codis 小結(jié) ( 部署)

一。名詞解釋:

Codis Server:基于 redis-3.2.8 分支開發(fā)。增加了額外的數(shù)據(jù)結(jié)構(gòu),以支持 slot 有關(guān)的操作以及數(shù)據(jù)遷移指令。具體的修改可以參考文檔redis 的修改。

Codis Proxy:客戶端連接的 Redis 代理服務(wù), 實(shí)現(xiàn)了 Redis 協(xié)議。 除部分命令不支持以外,表現(xiàn)的和原生的 Redis 沒(méi)有區(qū)別(就像 Twemproxy)。對(duì)于同一個(gè)業(yè)務(wù)集群而言,可以同時(shí)部署多個(gè) codis-proxy 實(shí)例;不同 codis-proxy 之間由 codis-dashboard 保證狀態(tài)同步。

Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、刪除,以及據(jù)遷移等操作。在集群狀態(tài)發(fā)生改變時(shí),codis-dashboard 維護(hù)集群下所有 codis-proxy 的狀態(tài)的一致性。對(duì)于同一個(gè)業(yè)務(wù)集群而言,同一個(gè)時(shí)刻 codis-dashboard 只能有 0個(gè)或者1個(gè);(單點(diǎn)?)所有對(duì)集群的修改都必須通過(guò) codis-dashboard 完成。

Codis Admin:集群管理的命令行工具。可用于控制 codis-proxy、codis-dashboard 狀態(tài)以及訪問(wèn)外部存儲(chǔ)。

Codis FE:集群管理界面。多個(gè)集群實(shí)例共享可以共享同一個(gè)前端展示頁(yè)面;通過(guò)配置文件管理后端 codis-dashboard 列表,配置文件可自動(dòng)更新。

Storage:為集群狀態(tài)提供外部存儲(chǔ)。提供 Namespace 概念,不同集群的會(huì)按照不同 product name 進(jìn)行組織;目前僅提供了 Zookeeper、Etcd、Fs 三種實(shí)現(xiàn),但是提供了抽象的 interface 可自行擴(kuò)展。

安裝包下載

#go:?wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

#zookeeper:?wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz

#codis:?git clone https://github.com/CodisLabs/codis.git -b release3.2

一。 codis 部署

1:解壓:

tar -xf zookeeper-3.4.12.tar.gz

mv zookeeper-3.4.12 /usr/local/zookeeper

2:編輯配置文件:

cd /usr/local/zookeeper/conf

cp zoo_sample.cfg zoo.cfg

配置文件(zoo.cfg)見下面,對(duì)比單機(jī)模式多了server.ID

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/zookeeper/data

dataLogDir=/data/zookeeper/log

clientPort=2181

#要是一臺(tái)裝三個(gè)zk,可以按照端口區(qū)分:192.168.163.131:2887:3887/192.168.163.132:2887:3887/192.168.163.133:2887:3887

server.1=192.168.163.131:2888:3888

server.2=192.168.163.132:2888:3888

server.3=192.168.163.133:2888:3888

注意:2888表示zookeeper監(jiān)聽端口,3888表示zookeeper選舉通信端口;以上server.1 server.2 server.3都要配置到三臺(tái)zookeeper的zoo.cfg文件。

配置說(shuō)明:

集群模式中, 集群中的每臺(tái)機(jī)器都需要感知其它機(jī)器, 在 zoo.cfg 配置文件中, 可以按照如下格式進(jìn)行配置, 每一行代表一臺(tái)服務(wù)器配置:server.id=host:port:port

id 被稱為 Server ID, 用來(lái)標(biāo)識(shí)服務(wù)器在集群中的序號(hào)。同時(shí)每臺(tái) ZooKeeper 服務(wù)器上, 都需要在數(shù)據(jù)目錄(即 dataDir 指定的目錄) 下創(chuàng)建一個(gè) myid 文件, 該文件只有一行內(nèi)容, 即對(duì)應(yīng)于每臺(tái)服務(wù)器的Server ID。

ZooKeeper 集群中, 每臺(tái)服務(wù)器上的 zoo.cfg 配置文件內(nèi)容一致。

server.1 的 myid 文件內(nèi)容就是 "1"。每個(gè)服務(wù)器的 myid 內(nèi)容都不同, 且需要保證和自己的 zoo.cfg 配置文件中 "server.id=host:port:port" 的 id 值一致。

id 的范圍是 1 ~ 255。

創(chuàng)建myid文件:設(shè)置zookeeper的id,和server.ID對(duì)應(yīng)。

在 dataDir 指定的目錄下 (即 /data/zookeeper/data 目錄) 創(chuàng)建名為 myid 的文件, 文件內(nèi)容和 zoo.cfg 中當(dāng)前機(jī)器的 id 一致。根據(jù)上述配置, master 的 myid 文件內(nèi)容為 1。

按照相同步驟, 為 132 和 133 配置 zoo.cfg 和 myid 文件。zoo.cfg文件內(nèi)容相同, 132 的 myid 文件內(nèi)容為 2, 133 的 myid 文件內(nèi)容為 3。

#在第1臺(tái)zookeeper(192.168.163.131)上設(shè)置id=1

echo "1" >/data/zookeeper/data/myid

#在第2臺(tái)zookeeper(192.168.163.132)上設(shè)置id=2

echo "2" >/data/zookeeper/data/myid

#在第3臺(tái)zookeeper(192.168.163.133)上設(shè)置id=3

echo "3" >/data/zookeeper/data/myid

三臺(tái)啟動(dòng):zkServer.sh start

# zkServer.sh start

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

zkServer.sh status

root@test1:~# zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Mode: leader

root@test2:~# zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Mode: follower

root@test3:~# zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Mode: follower

關(guān)閉:zkServer.sh stop

root@test2:~#zkServer.sh stop

ZooKeeper JMX enabled by defaultUsing config: /usr/local/zookeeper/bin/../conf/zoo.cfg

Stopping zookeeper ... STOPPED

到此Zookeeper安裝完畢。



新建codis-server(redis):三臺(tái)上都安裝

cp/usr/local/codis/extern/redis-3.2.11/redis.conf /etc/codis/codis-server/redis7021.conf

修改redis7021.conf:

# bind 127.0.0.1

protected-mode no

port 7021

daemonize yes

pidfile /var/lib/redis_7021/redis_7021.pid

logfile "/var/lib/redis_7021/redis_7021.log"

dbfilename 7021dump.rdb

dir /var/lib/redis_7021/

appendfilename ?"7021appendonly.aof"


創(chuàng)建配置文件里所需的目錄:

mkdir/var/lib/redis_7021

再新建一個(gè)codis-server:

cd /etc/codis/codis-server

cp redis7021.conf redis7022.conf?

sed-i"s/7021/7022/g" redis7022.conf mkdir/var/lib/redis_7022

開啟codis-server:

codis-server /etc/codis/codis-server/redis7021.conf

codis-server /etc/codis/codis-server/redis7022.conf

說(shuō)明:每臺(tái)機(jī)器上有2個(gè)codis-server實(shí)例,端口為:7021、7022,沒(méi)有做主從。為了防止單點(diǎn)的問(wèn)題,可以交錯(cuò)的設(shè)置主從,防止一臺(tái)服務(wù)器掛掉,codis-server不可用。如下表格所示:

Group ? ? ?主 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?從

1 ? ? ? ? ? ?192.168.163.131:7021 ? ? ? ? ? ? ? ? ? ?192.168.163.132:7022

2 ? ? ? ? ? ?192.168.163.132:7021 ? ? ? ? ? ? ? ? ? ?192.168.163.133:7022

3 ? ? ? ? ? ?192.168.163.133:7021 ? ? ? ? ? ? ? ? ? ?192.168.163.131:7022

通過(guò)codis-fe ?添加各個(gè)Group節(jié)點(diǎn):需要先開啟 codis-dashboard 和 codis-fe,在?⑤?之后操作。

③ 配置codis-dashboard(一臺(tái))

cd /etc/codis/codis-dashboard/?

cp/usr/local/codis/config/dashboard.toml ?/etc/codis/codis-dashboard/

修改配置:vim /etc/codis/codis-dashboard/dashboard.toml

##################################################

#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

#? ? ? ? ? ? ? ? ? Codis-Dashboard? ? ? ? ? ? ? #

#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

##################################################

# Set Coordinator, only accept "zookeeper"&"etcd"&"filesystem".

# forzookeeper/etcd, coorinator_auth accept"user:password"

# Quick Start

#coordinator_name ="filesystem"

#coordinator_addr ="/tmp/codis"

coordinator_name ="zookeeper"

coordinator_addr ="192.168.163.131:2181,192.168.163.132:2181,192.168.163.133:2181"??

#zk地址,多個(gè)逗號(hào)隔開

#coordinator_auth =""

# Set Codis Product Name/Auth.

product_name ="codis-testX"?

#集群名稱product_auth ="" ? ? ?#集群密碼

# Set bind address foradmin(rpc), tcp only.

admin_addr ="192.168.163.131:18080" ? ? ? ? #restful api地址

# Set arguments fordata migration (only accept'sync'&'semi-async').

migration_method ="semi-async"

migration_parallel_slots =100

migration_async_maxbulks =200

migration_async_maxbytes ="32mb"

migration_async_numkeys =500

migration_timeout ="30s"

# Set configs for redis sentinel.

sentinel_client_timeout ="10s"

sentinel_quorum =2

sentinel_parallel_syncs =1

sentinel_down_after ="30s"

sentinel_failover_timeout ="5m"

sentinel_notification_script =""

sentinel_client_reconfig_script =""

參數(shù)說(shuō)明

coordinator_name外部存儲(chǔ)類型,接受 zookeeper/etcd

coordinator_addr外部存儲(chǔ)地址

product_name集群名稱,滿足正則\w[\w\.\-]*

product_auth集群密碼,默認(rèn)為空

admin_addrRESTful API 端口

創(chuàng)建codis日志目錄(存放codis所有l(wèi)og):

mkdir/usr/local/codis/logs

啟動(dòng)codis-dashboard服務(wù):(一臺(tái))

codis-dashboard --ncpu=1--config=/etc/codis/codis-dashboard/dashboard.toml --log=/usr/local/codis/logs/dashboard.log --log-level=warn &

參數(shù)說(shuō)明:##--ncpu=N 最大使用 CPU 個(gè)數(shù);

## -c? CONF, --config=CONF 指定啟動(dòng)配置文件;

## -l? FILE, --log=FILE 設(shè)置 log 輸出文件;

##--log-level=LEVEL 設(shè)置 log 輸出等級(jí):INFO,WARN,DEBUG,ERROR;默認(rèn)INFO,推薦WARN;

##對(duì)于同一個(gè)業(yè)務(wù)集群而言,可以同時(shí)部署多個(gè)codis-proxy 實(shí)例;

##不同 codis-proxy 之間由 codis-dashboard 保證狀態(tài)同步。

關(guān)閉codis-dashboard服務(wù):

codis-admin --dashboard=192.168.163.131:18080--shutdown

④:配置codis-proxy(三臺(tái)):每臺(tái)配置一個(gè)Proxy,也可以一臺(tái)配置多個(gè)Proxy。

注意參數(shù):proxy_max_clients

cd /etc/codis/codis-proxy/cp/usr/local/codis/config/proxy.toml /etc/codis/codis-proxy/

修改配置:vim /etc/codis/codis-proxy/proxy.toml

##################################################

#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

#? ? ? ? ? ? ? ? ? Codis-Proxy? ? ? ? ? ? ? ? ? #

#? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #

##################################################

# Set Codis Product Name/Auth.

product_name ="codis-testX" ? ? ? ? ? #和dashboard對(duì)應(yīng)

product_auth =""

# Set auth for client session

#? 1. product_auth is usedforauth validation among codis-dashboard,

#? ? ? codis-proxy and codis-server.

#? 2. session_auth is different from product_auth, it requires clients

#? ? ? to issue AUTH before processing any other commands.

session_auth =""

# Set bind address foradmin(rpc), tcp only.

admin_addr ="192.168.163.131:11080" ? ? ? ? ?#同一臺(tái)服務(wù)器可以根據(jù)端口創(chuàng)建多個(gè)Proxy

# Set bind address forproxy, proto_type can be"tcp","tcp4","tcp6","unix"or"unixpacket".

proto_type ="tcp4"

proxy_addr ="192.168.163.131:19000" ? ? ? ? ??#同一臺(tái)服務(wù)器可以根據(jù)端口創(chuàng)建多個(gè)Proxy

# Set jodis address & session timeout

#? 1. jodis_name isshortforjodis_coordinator_name, only accept"zookeeper"&"etcd".

#? 2. jodis_addr isshortfor jodis_coordinator_addr

#? 3. jodis_auth isshortforjodis_coordinator_auth,forzookeeper/etcd,"user:password" is accepted.

#? 4. proxy will be registered as node:

#? ? ? ? ifjodis_compatible =true (not suggested):

#? ? ? ? ? /zk/codis/db_{PRODUCT_NAME}/proxy-{HASHID} (compatible with Codis2.0)

#? ? ? ? or else#? ? ? ? ? /jodis/{PRODUCT_NAME}/proxy-{HASHID}

jodis_name ="zookeeper"

jodis_addr="192.168.163.131:2181,192.168.163.132:2181,192.168.163.133:2181"

jodis_auth =""

jodis_timeout ="20s"

jodis_compatible =false...

...

參數(shù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 說(shuō)明:

product_name ? ? ? ? ? ? ? ? ? ? ? ? ?集群名稱,參考 dashboard 參數(shù)說(shuō)明

product_auth ? ? ? ? ? ? ? ? ? ? ? ? ? ?集群密碼,默認(rèn)為空

admin_addr ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?RESTful API 端口

proto_typeRedis ? ? ? ? ? ? ? ? ? ? ? 端口類型,接受 tcp/tcp4/tcp6/unix/unixpacket

proxy_addrRedis ? ? ? ? ? ? ? ? ? ? ? 端口地址或者路徑

jodis_addr ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Jodis 注冊(cè) zookeeper 地址

jodis_timeoutJodis ? ? ? ? ? ? ? ? ? ? ?注冊(cè) session timeout 時(shí)間,單位 second

jodis_compatibleJodis ? ? ? ? ? ? ? ? 注冊(cè) zookeeper 的路徑

backend_ping_period ? ? ? ? ? ? ? ? ? 與 codis-server 探活周期,單位 second,0 表示禁止

session_max_timeout與 client ? ? ? 連接最大讀超時(shí),單位 second,0 表示禁止

session_max_bufsize與 client ? ? ? ? 連接讀寫緩沖區(qū)大小,單位 byte

session_max_pipeline與 client ? ? ? ? 連接最大的 pipeline 大小

session_keepalive_period ? ? ? ? ? ? ? ? 與 client 的 tcp keepalive 周期,僅 tcp 有效,0 表示禁止

啟動(dòng)codis-proxy服務(wù)(三臺(tái)):

codis-proxy --ncpu=1--config=/etc/codis/codis-proxy/proxy.toml --log=/usr/local/codis/logs/proxy.log --log-level=warn &

codis-proxy 啟動(dòng)后,處于waitingonline 狀態(tài)(日志查詢),監(jiān)聽proxy_addr地址,但是不會(huì)accept連接,添加到集群并完成集群狀態(tài)的同步,才能改變狀態(tài)為online。添加的方法有以下兩種:

通過(guò) codis-fe 添加:通過(guò)Add Proxy按鈕,將admin_addr加入到集群中;⑤之后。

通過(guò) codis-admin 命令行工具添加,方法如下:

codis-admin --dashboard=192.168.163.131:18080 --create-proxy -x 192.168.163.131:11080

其中192.168.163.131:18080以及192.168.163.131:11080分別為 dashboard 和 proxy 的admin_addr地址;可以在后面的codis-fe里看到

添加過(guò)程中,dashboard 會(huì)完成如下一系列動(dòng)作:

獲取 proxy 信息,對(duì)集群 name 以及 auth 進(jìn)行驗(yàn)證,并將其信息寫入到外部存儲(chǔ)中(zookeeper);

同步 slots 狀態(tài);

標(biāo)記 proxy 狀態(tài)為online,此后 proxy 開始accept連接并開始提供服務(wù);

停止codis-proxy服務(wù):

codis-admin --proxy=192.168.163.131:11080 --shutdown

注意:直接kill Proxy進(jìn)程zk的codis3里會(huì)有殘留數(shù)據(jù),建議codis-admin方式停codis-proxy服務(wù)?

⑤:配置codis-fe(一臺(tái))

配置文件 codis.json 可以手動(dòng)編輯,也可以通過(guò) codis-admin 從外部存儲(chǔ)中拉取:

cd /etc/codis/codis-fe/

codis-admin --dashboard-list --zookeeper=192.168.163.131:2181 | teecodis.json

啟動(dòng)codis-fe:

codis-fe --ncpu=1--dashboard-list=/etc/codis/codis-fe/codis.json --listen=192.168.163.131:18090--log=/usr/local/codis/logs/fe.log --log-level=warn --assets-dir=/usr/local/codis/bin/assets/ &

關(guān)閉codis-fe:

ps-ef | grep codis-fe| grep-v grep| awk'{print $2}'| xargs ? kill

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容