在Redis Codis 部署安裝的文章中,介紹了經過fe在web上搭建codis的基本步驟和方法,也介紹了codis-admin的相關說明,爲了更好的熟悉codis-admin的使用,本文將使用codis-admin直接搭建codis集羣(和fe進行相關的對比)。這樣作的另外一個目的是爲實現自動化腳本部署的時候作相關的準備。html
和Redis Codis 部署安裝中的環境同樣,包括各個服務的IP和端口,以及安裝方法。git
機器github |
服務web |
端口redis |
端口說明json |
依賴api |
192.168.163.131/132/133(Ubuntu 16.04)spa |
Codis3d |
7021/7022日誌 |
server端口:主/從(三臺) |
GO |
11080 |
proxy管理端口(三臺) |
|||
18080 |
dashboard管理端口(一臺) |
|||
10890 |
fe管理端口(一臺) |
|||
10086 |
sentinel(三臺) |
|||
192.168.163.131/132/133(Ubuntu 16.04) |
zookeeper |
2181 |
zk客戶端監聽端口(三臺) |
JDK |
2888 |
zk內部通信端口(三臺) |
|||
3888 |
zk選舉端口(三臺) |
首先要保證ZooKeeper、Dashboard、Proxy、Server、Sentine、fe等都已經開啓。根據Redis Codis 部署安裝文章的安裝和配置,進行codis相關組件的開啓、關閉(ZK經過上篇文文章說明):
1)codis-server
開啓(三臺)
codis-server /etc/codis/codis-server/redis7021.conf codis-server /etc/codis/codis-server/redis7022.conf
關閉(三臺)
進入到redis裏面進行shutdown或則kill。
2)dashboard
開啓(一臺)
codis-dashboard --ncpu=1 --config=/etc/codis/codis-dashboard/dashboard.toml --log=/usr/local/codis/logs/dashboard.log --log-level=warn &
關閉(一臺)
codis-admin --dashboard=192.168.163.131:18080 --shutdown
3)codis-fe
開啓(一臺)
cd /etc/codis/codis-fe/ codis-admin --dashboard-list --zookeeper=192.168.163.131:2181 | tee codis.json 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/ &
關閉(一臺)
ps -ef|grep codis-fe|grep -v grep|awk '{print $2}'|xargs kill
4)Proxy
開啓(三臺)
codis-proxy --ncpu=1 --config=/etc/codis/codis-proxy/proxy.toml --log=/usr/local/codis/logs/proxy.log --log-level=warn &
關閉(三臺)
codis-admin --proxy=192.168.163.131:11080 --shutdown codis-admin --proxy=192.168.163.132:11080 --shutdown codis-admin --proxy=192.168.163.133:11080 --shutdown
1)Proxy
① 添加Proxy到Dashboard,而且設置成Online(3個)。
Proxy進程起來以後一直處於proxy waiting online ...狀態,不會接受請求(該狀態不會註冊到zk的codis3和jodis裏)。先加入到Dashboard、註冊到zk(jodis、codis3)並設置成online:
codis-admin --dashboard=192.168.163.131:18080 --create-proxy --addr=192.168.163.131:11080 codis-admin --dashboard=192.168.163.132:18080 --create-proxy --addr=192.168.163.131:11080 codis-admin --dashboard=192.168.163.133:18080 --create-proxy --addr=192.168.163.131:11080
等於codis-fe的操做:
執行完畢以後,api會調用:
[WARN] [0xc4202bf440] API call /api/topom/proxy/create/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.133:11080 from 192.168.163.131:44504 [192.168.163.1] [WARN] create proxy-[cfa02d4002da74e6b1f3b51f1416aa1d]
能夠在日誌裏看到 proxy is working ...
②:從Dashboard上刪除掉Proxy。
codis-admin --dashboard=192.168.163.131:18080 --remove-proxy --addr=192.168.163.133:11080
等於codis-fe的操做:
執行完畢以後,api會調用:
[WARN] [0xc4202bf440] API call /api/topom/proxy/remove/4c0ca749efb5aad2b20b8d84b1bb6905/cfa02d4002da74e6b1f3b51f1416aa1d/0 from 192.168.163.132:42134 [] [WARN] remove proxy-[cfa02d4002da74e6b1f3b51f1416aa1d]
須要注意的是,執行該操做以後,不只從DashBoard退出,並且也會把進程退出掉,後續要開啓才能加入。
③:從新同步全部的slots,當Proxy的slots出現異常的時候執行。
codis-admin --dashboard=192.168.163.131:18080 --reinit-proxy --addr=192.168.163.131:11080
等於codis-fe的操做:
執行完畢以後,api會調用:
[WARN] [0xc4202bf440] API call /api/topom/proxy/reinit/4c0ca749efb5aad2b20b8d84b1bb6905/4f07158ae347d67b1af825fd8e84b2f9 from 192.168.163.131:44612 [192.168.163.1] [WARN] proxy-[4f07158ae347d67b1af825fd8e84b2f9] reinit:
2)Group
① 添加Group到Dashboard(3個)
codis-admin --dashboard=192.168.163.131:18080 --create-group --gid=1 codis-admin --dashboard=192.168.163.131:18080 --create-group --gid=2 codis-admin --dashboard=192.168.163.131:18080 --create-group --gid=3
等於codis-fe的操做:
執行完畢以後,api會調用:
[WARN] [0xc4202bf440] API call /api/topom/group/create/4c0ca749efb5aad2b20b8d84b1bb6905/1 from 192.168.163.132:42138 [] [WARN] create group-[1]: { "id": 1, "servers": [], "promoting": {}, "out_of_sync": false } ...
② 刪除Group
codis-admin --dashboard=192.168.163.131:18080 --remove-group --gid=4
等於codis-fe的操做:
執行完畢以後,api會調用:
[WARN] [0xc4202bf440] API call /api/topom/group/remove/4c0ca749efb5aad2b20b8d84b1bb6905/4 from 192.168.163.132:42146 [] [WARN] remove group-[4]: { "id": 4, "servers": [], "promoting": {}, "out_of_sync": false }
③ 添加Server到Group
#group1 codis-admin --dashboard=192.168.163.131:18080 --group-add --gid=1 --addr=192.168.163.131:7021 codis-admin --dashboard=192.168.163.131:18080 --group-add --gid=1 --addr=192.168.163.132:7022 #group2 ... #group3 ...
等於codis-fe的操做:
執行完以後,api會調用:
[WARN] [0xc4202bf440] API call /api/topom/group/add/4c0ca749efb5aad2b20b8d84b1bb6905/1/192.168.163.132:7022 from 192.168.163.132:42156 [] [WARN] update group-[1]: { "id": 1, "servers": [ { "server": "192.168.163.131:7021", "datacenter": "", "action": {}, "replica_group": false }, { "server": "192.168.163.132:7022", "datacenter": "", "action": {}, "replica_group": false } ], "promoting": {}, "out_of_sync": false }
...
③ 移除Group中的Server
codis-admin --dashboard=192.168.163.131:18080 --group-del --gid=1 --addr=192.168.163.132:7022
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/group/del/4c0ca749efb5aad2b20b8d84b1bb6905/1/192.168.163.132:7022 from 192.168.163.132:42158 [] [WARN] update group-[1]: { "id": 1, "servers": [ { "server": "192.168.163.131:7021", "datacenter": "", "action": {}, "replica_group": false } ], "promoting": {}, "out_of_sync": false }
④ 給Group添加Server
須要注意,作高可用的話每一個Group裏須要至少2個Server,一主一從。默認第2個Server是從。
codis-admin --dashboard=192.168.163.131:18080 --sync-action --create --addr=192.168.163.132:7022 --第2個server
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/group/action/create/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.132:7022 from 192.168.163.132:42172 [] [WARN] update group-[1] ... [WARN] server-[192.168.163.132:7022] action prepare [WARN] update group-[1] ... [WARN] sync-[192.168.163.132:7022] process action [WARN] server-[192.168.163.132:7022] action failed = false [WARN] update group-[1]: { "id": 1, "servers": [ { "server": "192.168.163.131:7021", "datacenter": "", "action": {}, "replica_group": false }, { "server": "192.168.163.132:7022", "datacenter": "", "action": { "state": "synced" }, "replica_group": false } ], "promoting": {}, "out_of_sync": false }
⑤ 提高Group的一個Slave爲Master
codis-admin --dashboard=192.168.163.131:18080 --promote-server --gid=3 --addr=192.168.163.133:7021
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/group/promote/4c0ca749efb5aad2b20b8d84b1bb6905/3/192.168.163.133:7021 from 192.168.163.132:42190 [] [WARN] group-[3] will promote index = 1 [WARN] update group-[3] "state": "preparing" ... [WARN] group-[3] resync to prepared [WARN] update group-[3]: "state": "prepared" ... [WARN] update group-[3]: "state": "finished" ... [WARN] group-[3] resync to finished [WARN] update group-[3]: { "id": 3, "servers": [ { "server": "192.168.163.133:7021", "datacenter": "", "action": {}, "replica_group": false }, { "server": "192.168.163.131:7022", "datacenter": "", "action": {}, "replica_group": false } ], "promoting": {}, "out_of_sync": false }
這裏還要注意,Slave提高成Master以後,老Master還須要執行slaveof才能進行新的複製。
codis-admin --dashboard=192.168.163.131:18080 --sync-action --create --addr=192.168.163.131:7022
3)Slots
注意:此時,全部的slots都處在offline狀態,須要進行分配slots。不然客戶端會報錯:
ERR handle request, slot is not ready, may be offline
① 分配slots,離開offline狀態。遷移某一段範圍的slots到指定的group,分配全部的slots到Group中。
codis-admin --dashboard=192.168.163.131:18080 --slot-action --create-range --beg=1 --end=100 --gid=1 codis-admin --dashboard=192.168.163.131:18080 --slot-action --create-range --beg=101 --end=1000 --gid=2 codis-admin --dashboard=192.168.163.131:18080 --slot-action --create-range --beg=1001 --end=1023 --gid=3
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/action/create-range/4c0ca749efb5aad2b20b8d84b1bb6905/0/0/1 from 192.168.163.131:45936 [192.168.163.1] [WARN] update slot-[0]: "state": "pending", ... [WARN] slot-[0] action prepare: "state": "pending", [WARN] update slot-[0]: "state": "preparing", ... [WARN] slot-[0] resync to prepared "state": "prepared", ... [WARN] slot-[0] resync to migrating "state": "migrating", ... [WARN] slot-[0] process action [WARN] slot-[0] action complete "state": "migrating", ... [WARN] slot-[0] resync to finished "state": "finished", ...
注意:正在遷移的slots中的key被訪問,該key會被立馬遷移到新的group,才能被訪問。遷移好以後的slots經過--slots-status查看,發生了變化:
{ "id": 0, "backend_addr": "192.168.163.131:7021", --遷移後新增 "backend_addr_group_id": 1, --遷移後新增 "forward_method": 1 },
② 遷移slots,遷移指定數量的slots從一個Group到另外一個Group。
從Group2中遷移100個slots到Group3中:
codis-admin --dashboard=192.168.163.131:18080 --slot-action --create-some --gid-from=2 --gid-to=3 --num-slots=100
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/action/create-some/4c0ca749efb5aad2b20b8d84b1bb6905/2/3/100 from 192.168.163.132:42498 [] "state": "pending", ... [WARN] slot-[104] action prepare: "state": "pending", ... "state": "preparing", [WARN] slot-[104] resync to prepared "state": "prepared", [WARN] slot-[104] resync to migrating "state": "migrating", [WARN] slot-[104] resync to finished "state": "finished", ...
注意,勾選Action Status能夠查看遷移的進度。
③ 中止、開啓Slots遷移。
中止:
codis-admin --dashboard=192.168.163.131:18080 --slot-action --disabled=1
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/action/disabled/4c0ca749efb5aad2b20b8d84b1bb6905/1 from 192.168.163.132:42524 [] [WARN] set action disabled = true
開啓:
codis-admin --dashboard=192.168.163.131:18080 --slot-action --disabled=0
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/action/disabled/4c0ca749efb5aad2b20b8d84b1bb6905/0 from 192.168.163.132:42526 [] [WARN] set action disabled = false
④ 平均分配slots,各個Group平均分配1024個slots。
codis-admin --dashboard=192.168.163.131:18080 --rebalance --confirm
--confirm 表示執行rebalance,不加表示查看(不執行)
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/rebalance/4c0ca749efb5aad2b20b8d84b1bb6905/1 from 192.168.163.132:42534 [] ... [WARN] slot-[882] resync to finished ...
⑤ slots遷移的時間間隔
codis-admin --dashboard=192.168.163.131:18080 --slot-action --interval=1000
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/slots/action/interval/4c0ca749efb5aad2b20b8d84b1bb6905/1000 from 192.168.163.132:42540 [] [WARN] set action interval = 1000
4)Sentinel 高可用
① 添加Sentinel(3個)
codis-admin --dashboard=192.168.163.131:18080 --sentinel-add --addr=192.168.163.131:10086 codis-admin --dashboard=192.168.163.131:18080 --sentinel-add --addr=192.168.163.132:10086 codis-admin --dashboard=192.168.163.131:18080 --sentinel-add --addr=192.168.163.133:10086
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/sentinels/add/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.131:10086 from 192.168.163.132:42544 [] [WARN] update sentinel: { "servers": [ "192.168.163.131:10086" ], "out_of_sync": true } ...
爲了保證Sentinel服務的正常,須要再resync下sentinel:
codis-admin --dashboard=192.168.163.131:18080 --sentinel-resync
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/sentinels/resync-all/4c0ca749efb5aad2b20b8d84b1bb6905 from 192.168.163.132:42550 [] [WARN] rewatch sentinels = [192.168.163.131:10086 192.168.163.132:10086 192.168.163.133:10086]
② 移除Sentinel
codis-admin --dashboard=192.168.163.131:18080 --sentinel-del --addr=192.168.163.133:10086
等於codis-fe的操做:
執行時,調用的api:
[WARN] [0xc4202bf440] API call /api/topom/sentinels/del/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.133:10086/0 from 192.168.163.132:42598 []
到此,經過codis-admin已經完成了Codis的搭建。
經過本文的說明,進一步理順了codis-admin的各個命令。能夠不依賴fe的web界面進行Codis集羣的搭建,能夠爲自動化的一些腳本作好更好的支持工做。