通过codis-fe进行web操作管理:注意在fe上添加的时候需要保证这些进程存在,fe不会自动开启,只是对这些已有进程进行相关操作。
1)添加proxy:地址是配置文件中配置的admin_addr信息,需要先开启codis-proxy(处于waiting online)。
其中SYNC表示:更新同步Proxy中的Slots信息,日志如下:
fill slot0000, backend.addr =192.168.163.133:7021, locked =falsefill slot 0001, backend.addr =192.168.163.133:7021, locked =falsefill slot 0002, backend.addr =192.168.163.133:7021, locked =falsefill slot 0003, backend.addr =192.168.163.133:7021, locked =false...
...
2)添加Group:本文说明的Group就是一主一从的环境,当然也可以一主多从。在上面介绍codis-server中,只是开启了实例,没有做主从关系。现在通过codis-fe来进行主从关系的创建,添加group:
Group 主 从
1 192.168.163.131:7021 192.168.163.132:7022
需要注意的是在fe上添加,组内默认第一个Server是master。
注意:点了PROMOTE之后,slave会被提升为master,但是老的master需要手动点中间那个帮手,才能对新主进行同步。
按照上面继续添加GROUP 2和3,最终图的结果为:
通过codis-fe已经把 codis-server(redis)已经添加并自动做了主从复制。
3)初始化Slots:进行到这步的时候整个codis集群已经搭建完毕,最后只需要把Slots初始和分配下就可以使用了。
把0~300的slots分配给Group1,301~800的slots分配给Group2,801~1023的slots分配给Group3,最终结果图如下:
上面的图可以看到slots的分布信息,也可以通过condis-admin进行查询:
codis-admin --dashboard=192.168.163.131:18080 --slots-status
迁移Slots:
从Group1迁移10个slots到Group3,操作完之后的结果图:
在迁移Slots时候的zk的操作信息如下:
2018/07/0312:54:09zkclient.go:272: [DEBUG] zkclient update node /codis3/codis-testX/slots/slot-00082018/07/0312:54:09zkclient.go:280: [DEBUG] zkclient update OK
到这里,codis的集群安装和初始化完毕,可以正常提供服务器了,不过这里还有个情况就是主Codis-Server挂了:
模拟Group1的主挂掉,通过Proxy连上去看看查询到整个Group的Slots会怎么样:
root@test1:~# redis-cli -h192.168.163.132-p19000 #随便连一个Proxy192.168.163.133:19000>get age(error)ERR handle response, backend conn reset
HA如何保证?那就继续HA的部署说明。
⑥:配置启动codis-ha
codis-ha --log=/usr/local/codis/logs/ha.log --log-level=warn --dashboard=192.168.163.131:18080&
注意:codis-ha启动之后,主挂掉虽然可以把从切换成主,但是老主再次启动会被codis-ha关闭(开不起来,除非关掉codis-ha),关闭掉codis-ha之后,还需要重新在codis-fe上添加这个老主进行同步,这个对于主从非常不友好,不推荐使用。还是使用Sentinel来替代codis-ha。
⑦:配置Sentinel 3个节点(三台都安装),来替换codis-ha。sentinel的说明可以参考Redis 复制、Sentinel的搭建和原理说明
注意:codis是通过sentinel来保证每个group下的Redis主从高可用,并且在codis-fe上配置的Sentinel是监控所有主机的,不需要单独配置监控的主,codis集群会自动添加。
建立所需的目录:
mkdir-p /var/lib/sentinel
修改配置文件:cp /usr/local/codis/extern/redis-3.2.11/sentinel.conf /etc/codis/codis-server/
vim /etc/codis/codis-server/sentinel.conf
port 10086
dir "/var/lib/sentinel"
logfile "/var/lib/sentinel/sentinel.log"
daemonize yes
protected-mode no
不需要启用其他的Sentinel开头的这些参数,codis-fe会自动发现处理。
开启Sentinel,三台保持一致即可:
codis-server /etc/codis/codis-server/sentinel.conf --sentinel
添加到集群(dashboard):命令行模式
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添加:
该3个节点的Sentinel,监听着三组Group,即三个主从。最后一列表示从codis-fe上删除。添加完毕之后,在codis-fe上的Group中可以看到状态发生了改变:主上多了一个[HA]标识。
模拟Group1的主挂掉,通过Proxy连上去看看查询到整个Group的Slots会怎么样:
192.168.163.131:19000> get age
(error) ERR handle response, backend conn reset192.168.163.131:19000> get age"1233"
说明:当Group1的主被shutdown之后,Sentinel经过选举,选择新主(选举时间可配置)提供服务,选举期间该Group不可访问。老主启动后,Sentinel会自动的把老主slaveof 到新的主,形式主从集群,codis-fe不需要做主从同步的操作。最后出现“OUT OF SYNC”的标志,只需要手动SYNC下就可以了。另外说明下,如果codis-server添加了密码,则需要在codis相关组件的配置文件中的auth相关参数里添加密码。
扩容:如果Group1集群内存不足,需要扩容,则添加一个Group2集群,对指定数量的slots进行数据迁移,如:
迁移过程中,正在迁移的key可以访问(通过Proxy进行访问),不影响业务使用。
Codis-admin的使用
上面介绍的都是基于fe的web管理界面操作的,那如何通过命令行来实现呢?这时可以看下Codis-admin就派上用场了:
root@test1:~# codis-admin --help
Usage:
codis-admin [-v] --proxy=ADDR [--auth=AUTH] [config|model|stats|slots]
codis-admin [-v] --proxy=ADDR [--auth=AUTH] --start
codis-admin [-v] --proxy=ADDR [--auth=AUTH] --shutdown
codis-admin [-v] --proxy=ADDR [--auth=AUTH] --log-level=LEVEL
codis-admin [-v] --proxy=ADDR [--auth=AUTH] --fillslots=FILE [--locked]
codis-admin [-v] --proxy=ADDR [--auth=AUTH] --reset-stats
codis-admin [-v] --proxy=ADDR [--auth=AUTH] --forcegc
codis-admin [-v] --dashboard=ADDR [config|model|stats|slots|group|proxy]
codis-admin [-v] --dashboard=ADDR --shutdown
codis-admin [-v] --dashboard=ADDR --reload
codis-admin [-v] --dashboard=ADDR --log-level=LEVEL
codis-admin [-v] --dashboard=ADDR --slots-assign --beg=ID --end=ID (--gid=ID|--offline) [--confirm]
codis-admin [-v] --dashboard=ADDR --slots-status
codis-admin [-v] --dashboard=ADDR --list-proxy
codis-admin [-v] --dashboard=ADDR --create-proxy --addr=ADDR
codis-admin [-v] --dashboard=ADDR --online-proxy --addr=ADDR
codis-admin [-v] --dashboard=ADDR --remove-proxy (--addr=ADDR|--token=TOKEN|--pid=ID) [--force]
codis-admin [-v] --dashboard=ADDR --reinit-proxy (--addr=ADDR|--token=TOKEN|--pid=ID|--all) [--force]
codis-admin [-v] --dashboard=ADDR --proxy-status
codis-admin [-v] --dashboard=ADDR --list-group
codis-admin [-v] --dashboard=ADDR --create-group --gid=ID
codis-admin [-v] --dashboard=ADDR --remove-group --gid=ID
codis-admin [-v] --dashboard=ADDR --resync-group [--gid=ID | --all]
codis-admin [-v] --dashboard=ADDR --group-add --gid=ID --addr=ADDR [--datacenter=DATACENTER]
codis-admin [-v] --dashboard=ADDR --group-del --gid=ID --addr=ADDR
codis-admin [-v] --dashboard=ADDR --group-status
codis-admin [-v] --dashboard=ADDR --replica-groups --gid=ID --addr=ADDR (--enable|--disable)
codis-admin [-v] --dashboard=ADDR --promote-server --gid=ID --addr=ADDR
codis-admin [-v] --dashboard=ADDR --sync-action --create --addr=ADDR
codis-admin [-v] --dashboard=ADDR --sync-action --remove --addr=ADDR
codis-admin [-v] --dashboard=ADDR --slot-action --create --sid=ID --gid=ID
codis-admin [-v] --dashboard=ADDR --slot-action --remove --sid=ID
codis-admin [-v] --dashboard=ADDR --slot-action --create-some --gid-from=ID --gid-to=ID --num-slots=N
codis-admin [-v] --dashboard=ADDR --slot-action --create-range --beg=ID --end=ID --gid=ID
codis-admin [-v] --dashboard=ADDR --slot-action --interval=VALUE
codis-admin [-v] --dashboard=ADDR --slot-action --disabled=VALUE
codis-admin [-v] --dashboard=ADDR --rebalance [--confirm]
codis-admin [-v] --dashboard=ADDR --sentinel-add --addr=ADDR
codis-admin [-v] --dashboard=ADDR --sentinel-del --addr=ADDR [--force]
codis-admin [-v] --dashboard=ADDR --sentinel-resync
codis-admin [-v] --remove-lock --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT)
codis-admin [-v] --config-dump --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT) [-1]
codis-admin [-v] --config-convert=FILE
codis-admin [-v] --config-restore=FILE --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT) [--confirm]
codis-admin [-v] --dashboard-list (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT)
Options:
-a AUTH, --auth=AUTH
-x ADDR, --addr=ADDR
-t TOKEN, --token=TOKEN
-g ID, --gid=ID
现在来逐一查看codis-admin实现的功能:
1. 查看Proxy的配置、model、状态、slots信息:具体的信息可以运行该命令
codis-admin [-v] --proxy=ADDR [--auth=AUTH] [config|model|stats|slots]
# codis-admin --proxy=192.168.163.132:11080 config
查看到proxy.toml的内容,如:proxy、zk、连接数等等
# codis-admin --proxy=192.168.163.132:11080 model
查看注册到ZK的信息:Proxy的地址,进群名称、主机名等等
# codis-admin --proxy=192.168.163.132:11080 stats
查看Proxy是否在线、sentinel信息、ops、qps、内存信息等等
# codis-admin --proxy=192.168.163.132:11080 slots
查看Slots信息:slot在哪个group,后端Redis Server地址
2. 开启关闭Proxy:这里的开启是值进入online状态。按照上面介绍的,开启codis-proxy 启动后,处于waitingonline 状态的,需要改成online状态进入zk(jodis)
codis-admin [-v] --proxy=ADDR [--auth=AUTH] --start/--shutdown
# codis-admin --proxy=192.168.163.132:11080 --start
日志中 proxy waiting online ... 会变成 proxy is working ...
并且注册到zk的jodis目录里:
API call /api/proxy/start/003acf3b450ebe66f56b8af4cc9c7d2d from 192.168.163.132:52426 []
jodis create node /jodis/codis-testX/proxy-1d24e313bee99f26174110c009714530
# codis-admin --proxy=192.168.163.132:11080 --shutdown
日志里记录关闭Proxy再把信息从zk里删除,最后再退出。
API call /api/proxy/shutdown/003acf3b450ebe66f56b8af4cc9c7d2d from 192.168.163.132:52428 []
admin shutdown
proxy shutdown
jodis remove node /jodis/codis-testX/proxy-1d24e313bee99f26174110c009714530
proxy is exiting ...
3. proxy 动态设置日志等级
codis-admin [-v] --proxy=ADDR [--auth=AUTH] --log-level=LEVEL
# codis-admin --proxy=192.168.163.132:11080 --log-level=info
日志里记录:
API call /api/proxy/loglevel/003acf3b450ebe66f56b8af4cc9c7d2d/INFO from192.168.163.132:52432 []
set loglevel to INFO
4. 清除Proxy状态
codis-admin [-v] --proxy=ADDR [--auth=AUTH] --reset-stats
# codis-admin --proxy=192.168.163.132:11080--reset-stats
API call /api/proxy/stats/reset/003acf3b450ebe66f56b8af4cc9c7d2d from192.168.163.133:57436 []
清除Proxy的QPS、OPS、Fail、Errors等Commands信息
5. 强制清理Proxy内存
codis-admin [-v] --proxy=ADDR [--auth=AUTH] --forcegc
# codis-admin --proxy=192.168.163.132:11080 --forcegc
API call /api/proxy/forcegc/003acf3b450ebe66f56b8af4cc9c7d2d from192.168.163.133:57437 []
控制Proxy内存的释放
6. 查看dashboard的配置、model、状态、slots、组和proxy信息:
codis-admin [-v] --dashboard=ADDR [config|model|stats|slots|group|proxy]
# codis-admin --dashboard=192.168.163.131:18080 config
查看dashboard的配置,即dashboard.toml配置的信息
# codis-admin --dashboard=192.168.163.131:18080 model
查看model信息
# codis-admin --dashboard=192.168.163.131:18080 stats
包括slot和group的对应信息,group信息(group后端的server以及server的配置),proxy信息(sentinel信息、server信息、server主信息以及proxy CPU和内存使用情况),
slots信息(迁移间隔、迁移状态),sentine信息(配置、状态),主server信息
# codis-admin --dashboard=192.168.163.131:18080 slots
slot和group的对应信息
# codis-admin --dashboard=192.168.163.131:18080 group
组信息,组下server的配置信息
# codis-admin --dashboard=192.168.163.131:18080 proxy
proxy信息,包括sentinel、server信息以及proxy cpu和内存使用情况,ops、qps等commands信息、连接数(session)等
7. 关闭和重新加载dashboard
codis-admin [-v] --dashboard=ADDR --shutdown/--reload
# codis-admin --dashboard=192.168.163.131:18080 --shutdown
关闭dashboard,清除zk里的topom
API call /api/topom/shutdown/4c0ca749efb5aad2b20b8d84b1bb6905 from 192.168.163.132:42772 []
admin exit on error
# codis-admin --dashboard=192.168.163.131:18080 --reload
修改dashboard之后,重新加载配置
API call /api/topom/reload/4c0ca749efb5aad2b20b8d84b1bb6905 from 192.168.163.132:42778 []
8. dashboard动态设置日志等级
codis-admin [-v] --dashboard=ADDR --log-level=LEVEL
# codis-admin --dashboard=192.168.163.131:18080 --log-level=info
API call /api/topom/loglevel/4c0ca749efb5aad2b20b8d84b1bb6905/INFO from192.168.163.132:42780 []
set loglevel to INFO
9. proxy加入到dashboard,并online
codis-admin [-v] --dashboard=ADDR --create-proxy --addr=ADDR
# codis-admin --dashboard=192.168.163.131:18080 --create-proxy --addr=192.168.163.131:11080
proxy加入到dashboard中
[WARN] [0xc4202d17a0] API call /api/topom/proxy/create/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.131:11080 from 192.168.163.132:42824 []
[WARN] create proxy-[1d24e313bee99f26174110c009714530]
...
10. proxy online初始化1024个槽,codis-admin [-v] --dashboard=ADDR --online-proxy --addr=ADDR
# codis-admin --dashboard=192.168.163.131:18080--online-proxy --addr=192.168.163.133:11080
#proxy online
[WARN] [0xc4200be790] API call /api/proxy/start/f6eadfec468df5b262af66e292a27699 from192.168.163.131:57976 []
[WARN] [0xc4200be790] API call /api/proxy/sentinels/f6eadfec468df5b262af66e292a27699 from192.168.163.131:57976 []
[WARN] [0xc4200be790] set sentinels = []
11. 查看proxy 列表,codis-admin [-v] --dashboard=ADDR --list-proxy
# codis-admin --dashboard=192.168.163.131:18080--list-proxy
查看该dashboard下的proxy列表和信息
12. 移除proxy,codis-admin [-v] --dashboard=ADDR --remove-proxy (--addr=ADDR|--token=TOKEN|--pid=ID) [--force]
# codis-admin --dashboard=192.168.163.131:18080 --remove-proxy --addr=192.168.163.133:11081
根据相关信息:ip、token、pid等移除proxy
[WARN] [0xc4200be790] API call /api/proxy/shutdown/f6eadfec468df5b262af66e292a27699 from 192.168.163.131:58144 []
[WARN] [0xc4200be790] proxy shutdown
[WARN] [0xc4200be790] admin shutdown
[WARN] jodis remove node /jodis/codis-testX/proxy-697e01c6c8b8aaf399599992e7108d35
[WARN] [0xc4200be790] proxy is exiting ...
13. reinit proxy:codis-admin [-v] --dashboard=ADDR --reinit-proxy (--addr=ADDR|--token=TOKEN|--pid=ID|--all) [--force]
# codis-admin --dashboard=192.168.163.131:18080--reinit-proxy --addr=192.168.163.132:11080初始化slots(1024)
[WARN] [0xc4200c68f0] API call /api/proxy/start/00d4e51e15eb811441ad228e44550b81 from192.168.163.131:59242 []
[WARN] [0xc4200c68f0] API call /api/proxy/sentinels/00d4e51e15eb811441ad228e44550b81 from192.168.163.131:59242 []
[WARN] [0xc4200c68f0] set sentinels = []
14 .获取proxy的信息:管理、代理端口。
# codis-admin --dashboard=192.168.163.131:18080 --proxy-status
[ ] proxy-1[T] 4f07158ae347d67b1af825fd8e84b2f9 [A]192.168.163.131:11080[P]192.168.163.131:19000[ ] proxy-2[T] 1d24e313bee99f26174110c009714530 [A]192.168.163.132:11080[P]192.168.163.132:19000[ ] proxy-3[T] cfa02d4002da74e6b1f3b51f1416aa1d [A]192.168.163.133:11080[P]192.168.163.133:19000
15. 查看group列表。codis-admin [-v] --dashboard=ADDR --list-group
# codis-admin --dashboard=192.168.163.131:18080 --list-group
查看group列表
16. 创建group。codis-admin [-v] --dashboard=ADDR --create-group --gid=ID
# codis-admin --dashboard=192.168.163.131:18080 --create-group --gid=1
创建一个group
[WARN] [0xc4202d17a0] API call /api/topom/group/create/4c0ca749efb5aad2b20b8d84b1bb6905/1 from 192.168.163.132:43114 []
[WARN] create group-[1]:
{
"id": 1,
"servers": [],
"promoting": {},
"out_of_sync": false
}
17. 移除group。codis-admin [-v] --dashboard=ADDR --remove-group --gid=ID
# codis-admin --dashboard=192.168.163.131:18080 --remove-group --gid=1
删除一个group
[WARN] [0xc4202d17a0] API call /api/topom/group/remove/4c0ca749efb5aad2b20b8d84b1bb6905/1 from 192.168.163.132:43116 []
[WARN] remove group-[1]:
{
"id": 1,
"servers": [],
"promoting": {},
"out_of_sync": false
}
18. group里添加server。codis-admin [-v] --dashboard=ADDR --group-add --gid=ID --addr=ADDR [--datacenter=DATACENTER]
# codis-admin --dashboard=192.168.163.131:18080 --group-add --gid=1 --addr=192.168.163.131:7021
group1里添加一个redis-server
[WARN] [0xc4202d17a0] API call /api/topom/group/add/4c0ca749efb5aad2b20b8d84b1bb6905/1/192.168.163.131:7021 from 192.168.163.132:43130 []
[WARN] update group-[1]:
{
"id": 1,
"servers": [
{
"server": "192.168.163.131:7021",
"datacenter": "",
"action": {},
"replica_group": false
}
],
"promoting": {},
"out_of_sync": false
}
19. group里删除server。codis-admin [-v] --dashboard=ADDR --group-del --gid=ID --addr=ADDR [--datacenter=DATACENTER]
codis-admin --dashboard=192.168.163.131:18080 --group-del --gid=1 --addr=192.168.163.132:7021
#删除group里的server
[WARN] [0xc4202d17a0] API call /api/topom/group/del/4c0ca749efb5aad2b20b8d84b1bb6905/1/192.168.163.132:7021 from 192.168.163.132:43140 []
[WARN] update group-[1]:
{
"id": 1,
"servers": [
{
"server": "192.168.163.131:7021",
"datacenter": "",
"action": {},
"replica_group": false
}
],
"promoting": {},
"out_of_sync": false
}
20. 每个group事一个M-S结构的集群,设置每个group的复制关系:codis-admin [-v] --dashboard=ADDR --replica-groups --gid=ID --addr=ADDR (--enable|--disable)
# codis-admin --dashboard=192.168.163.131:18080 --replica-groups --gid=13 --addr=192.168.163.133:7021 --enable
# codis-admin --dashboard=192.168.163.131:18080 --replica-groups --gid=13 --addr=192.168.163.133:7022 --enable
同一个group的2个sever加入复制关系。
[WARN] [0xc4202d17a0] API call /api/topom/group/replica-groups/4c0ca749efb5aad2b20b8d84b1bb6905/13/192.168.163.133:7022/1 from 192.168.163.132:43440 []
[WARN] update group-[13]:
{
"id": 13,
"servers": [
{
"server": "192.168.163.133:7021",
"datacenter": "",
"action": {},
"replica_group": true
},
{
"server": "192.168.163.133:7022",
"datacenter": "",
"action": {},
"replica_group": true
}
],
"promoting": {},
"out_of_sync": false
}
21. 把组里面的第2个server做为从,形成主从关系:codis-admin [-v] --dashboard=ADDR --sync-action --create --addr=ADDR
# codis-admin --dashboard=192.168.163.131:18080 --sync-action --create --addr=192.168.163.133:7022
让组内的第2个server作为从
[WARN] [0xc4202d17a0] API call /api/topom/group/replica-groups/4c0ca749efb5aad2b20b8d84b1bb6905/13/192.168.163.133:7021/0 from 192.168.163.131:41954 [192.168.163.1]
[WARN] update group-[13]:
{
"id": 13,
"servers": [
{
"server": "192.168.163.133:7021",
"datacenter": "",
"action": {},
"replica_group": false
},
{
"server": "192.168.163.133:7022",
"datacenter": "",
"action": {
"state": "synced"
},
"replica_group": true
}
],
"promoting": {},
"out_of_sync": false
}
22. 查看group状态:codis-admin [-v] --dashboard=ADDR --group-status
#codis-admin --dashboard=192.168.163.131:18080 --group-status #查看主从复制的关系
[ ] group-11 [0] 192.168.163.131:7022 ==> NO:ONE
[ ] group-11 [1] 192.168.163.131:7021 ==> 192.168.163.131:7022:up
[ ] group-12 [0] 192.168.163.132:7021 ==> NO:ONE
[ ] group-12 [1] 192.168.163.132:7022 ==> 192.168.163.132:7021:up
[ ] group-13 [0] 192.168.163.133:7021 ==> NO:ONE
[ ] group-13 [1] 192.168.163.133:7022 ==> 192.168.163.133:7021:up
23. 提升组里的一个从作为主:
codis-admin [-v] --dashboard=ADDR --promote-server --gid=ID --addr=ADDR
# codis-admin --dashboard=192.168.163.131:18080 --promote-server --gid=13 --addr=192.168.163.133:7022 #让组13的服务器作为一个从库
# codis-admin --dashboard=192.168.163.131:18080 --group-status
[ ] group-11 [0] 192.168.163.131:7022 ==> NO:ONE
[ ] group-11 [1] 192.168.163.131:7021 ==> 192.168.163.131:7022:up
[ ] group-12 [0] 192.168.163.132:7021 ==> NO:ONE
[ ] group-12 [1] 192.168.163.132:7022 ==> 192.168.163.132:7021:up
[ ] group-13 [0] 192.168.163.133:7022 ==> NO:ONE
[X] group-13 [1] 192.168.163.133:7021 ==> NO:ONE
[WARN] group-[13] resync to prepared
提升了之后,老主需要手动执行,执行命令和21一样:
--sync-action --create
24. 分配slot(单个slot),codis-admin [-v] --dashboard=ADDR --slot-action --create --sid=ID --gid=ID
# codis-admin --dashboard=192.168.163.131:18080--slot-action --create --sid=0--gid=11分配slot0 到group11中
[WARN] [0xc4202d17a0] API call /api/topom/slots/action/create/4c0ca749efb5aad2b20b8d84b1bb6905/0/11from192.168.163.132:43524 []
[WARN] update slot-[0]:
pending -> preparing ->prepared ->migrating -> finished
25.移除slot(单个slot),codis-admin [-v] --dashboard=ADDR --slot-action --remove --sid=ID
# codis-admin --dashboard=192.168.163.131:18080 --slot-action --remove --sid=1
26. 迁移某一段范围的slots到指定的group,codis-admin [-v] --dashboard=ADDR --slot-action --create-range --beg=ID --end=ID --gid=ID
# codis-admin --dashboard=192.168.163.131:18080 --slot-action --create-range --beg=5 --end=100 --gid=11
27. 停止开启slots迁移:codis-admin [-v] --dashboard=ADDR --slot-action --disabled=VALUE
# codis-admin --dashboard=192.168.163.131:18080 --slot-action --disabled=0
停止slots迁移
[WARN] [0xc4202d17a0] API call /api/topom/slots/action/disabled/4c0ca749efb5aad2b20b8d84b1bb6905/0 from 192.168.163.132:43936 []
[WARN] set action disabled = false
开启slots迁移
[WARN] [0xc4202d17a0] API call /api/topom/slots/action/disabled/4c0ca749efb5aad2b20b8d84b1bb6905/1 from 192.168.163.132:43938 []
[WARN] set action disabled = true
28. 平衡slots,各group平分slots,codis-admin [-v] --dashboard=ADDR --rebalance [--confirm]
# codis-admin --dashboard=192.168.163.131:18080--rebalance
[0517,1023] =>12done# codis-admin --dashboard=192.168.163.131:18080--rebalance
nothing changes
29. 添加sentinel,保证高可用。codis-admin [-v] --dashboard=ADDR --sentinel-add --addr=ADDR
# codis-admin --dashboard=192.168.163.131:18080 --sentinel-add --addr=192.168.163.131:10086
添加一台sentinel
[WARN] [0xc4202d17a0] API call /api/topom/sentinels/add/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.131:10086 from 192.168.163.132:43950 []
[WARN] update sentinel:
{
"servers": [
"192.168.163.131:10086"
],
"out_of_sync": true
}
30. 删除sentinel,codis-admin [-v] --dashboard=ADDR --sentinel-del --addr=ADDR [--force]
# codis-admin --dashboard=192.168.163.131:18080 --sentinel-del --addr=192.168.163.133:10086
[WARN] [0xc4202d17a0] API call /api/topom/sentinels/del/4c0ca749efb5aad2b20b8d84b1bb6905/192.168.163.133:10086/0 from 192.168.163.132:43956 []
[WARN] update sentinel:
{
"servers": [
"192.168.163.131:10086",
"192.168.163.132:10086",
"192.168.163.133:10086"
],
"out_of_sync": true
}
[WARN] update sentinel:
{
"servers": [
"192.168.163.131:10086",
"192.168.163.132:10086"
],
"out_of_sync": true
}
31. 重新同步,codis-admin [-v] --dashboard=ADDR --sentinel-resync
# codis-admin --dashboard=192.168.163.131:18080 --sentinel-resync
如果出现异常,可以尝试resync
[WARN] [0xc4202d17a0] API call /api/topom/sentinels/resync-all/4c0ca749efb5aad2b20b8d84b1bb6905 from 192.168.163.132:43988 []
[WARN] update sentinel:
{
"servers": [
"192.168.163.131:10086",
"192.168.163.132:10086"
],
"out_of_sync": true
}
[WARN] rewatch sentinels = [192.168.163.131:10086 192.168.163.132:10086]
[WARN] update sentinel:
{
"servers": [
"192.168.163.131:10086",
"192.168.163.132:10086"
],
"out_of_sync": false
}
32. 从ZooKeeper或则其他外部存储里里获取dashboard信息,codis-admin [-v] --dashboard-list (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT)
# codis-admin --dashboard-list --zookeeper=127.0.0.1:2181
2018/11/12 17:36:14 zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to 127.0.0.1:2181
2018/11/12 17:36:14 zkclient.go:23: [INFO] zookeeper - Connected to 127.0.0.1:2181
2018/11/12 17:36:14 zkclient.go:23: [INFO] zookeeper - Authenticated: id=144120780119670793, timeout=40000
2018/11/12 17:36:14 zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect
[
{
"name": "codis-testX",
"dashboard": "192.168.163.131:18080"
}
]
2018/11/12 17:36:15 zkclient.go:23: [INFO] zookeeper - Recv loop terminated: err=EOF
33. 从ZooKeeper或则外部存储里获取集群的信息:slots、proxy、group等。
codis-admin [-v] --config-dump --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT) [-1]
# codis-admin --config-dump --product=codis-testX --zookeeper=127.0.0.1:2181
2018/11/12 17:40:34 zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to 127.0.0.1:2181
2018/11/12 17:40:34 zkclient.go:23: [INFO] zookeeper - Connected to 127.0.0.1:2181
2018/11/12 17:40:34 zkclient.go:23: [INFO] zookeeper - Authenticated: id=144120780119670794, timeout=40000
2018/11/12 17:40:34 zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect
{
slots:
proxy:
groups:
}
34. 转换配置文件,codis-admin [-v] --config-convert=FILE
# codis-admin --config-convert codis_v2.0.json |tee codis_v3.0.json
该命令会将 Codis 2.x 版本的配置文件中有效信息提取出来,并转成 Codis3.x 版本的配置文件并输出
35. 应用配置文件,codis-admin [-v] --config-restore=FILE --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT) [--confirm]
codis-admin --config-restore=codis_v3.0.json --product=codis_v3.0 --zookeeper=127.0.0.1:2181 --confirm
该命令会将 Codis 3.x 版本的配置文件提交到 /codis3/codis_v3.0 目录下。
选项 --confirm 选项表示确认提交,缺省时该命令仅仅打印配置文件作为调试。
36. 清理残留信息,dashboard或proxy异常退出导致无法重新启动的情况下,可以使用--remove-lock清除zk里lock信息后再次尝试重启。
codis-admin [-v] --remove-lock --product=NAME (--zookeeper=ADDR [--zookeeper-auth=USR:PWD]|--etcd=ADDR [--etcd-auth=USR:PWD]|--filesystem=ROOT)
# codis-admin --remove-lock --product=codis-testX --zookeeper=127.0.0.1:2181
2018/11/1218:00:25zkclient.go:23: [INFO] zookeeper - zkclient setup new connection to127.0.0.1:21812018/11/1218:00:25zkclient.go:23: [INFO] zookeeper - Connected to127.0.0.1:21812018/11/1218:00:25zkclient.go:23: [INFO] zookeeper - Authenticated:id=216173149807312897, timeout=400002018/11/1218:00:25zkclient.go:23: [INFO] zookeeper - Re-submitting `0` credentials after reconnect2018/11/1218:00:25zkclient.go:23: [INFO] zookeeper - Recv loop terminated: err=EOF
网友评论