-
codis线上环境
- 部署
- 启动
- 迁移
- 扩容
- 主从切换
1.线上环境
使用代码 https://github.com/wlibo666/codis
线上codis集群包含组件: zookeeper,codis-dashboard,codis-proxy,codis-server,具体分布如下,
关于机器的更详细信息参见 http://wiki.letv.cn/pages/viewpage.action?pageId=31982059
内网Ip | 安装组件 | 服务地址 | 备注 |
10.98.28.5 | Zookeeper-3.4.6 Codis-dashboard Codis-server | 10.98.28.5:2181 10.98.28.5:18087 10.98.28.5:6381 | Codis-server为group_1中的slave |
10.98.28.13 | Zookeeper-3.4.6 Codis-server | 10.98.28.13:2181 10.98.28.13:6381 | Codis-server为group_1中的master |
10.98.28.14 | Zookeeper-3.4.6 | 10.98.28.14:2181 |
|
10.98.28.21 | Codis-proxy | 10.98.28.21:16379 |
|
10.98.28.22 | Codis-proxy | 10.98.28.22:16379 |
|
10.98.28.23 | Codis-proxy | 10.98.28.23:16379 |
|
10.98.28.24 | Codis-proxy | 10.98.28.24:16379 |
|
10.98.28.41 | Codis-proxy | 10.98.28.41:16379 |
|
10.98.28.42 | Codis-proxy | 10.98.28.42:16379 |
|
10.98.28.43 | Codis-proxy | 10.98.28.43:16379 |
|
10.98.28.48 | Codis-proxy | 10.98.28.48:16379 |
|
10.98.28.49 | Codis-proxy | 10.98.28.49:16379 |
|
10.98.28.50 | Codis-proxy | 10.98.28.50:16379 |
|
10.98.28.98 | Codis-proxy | 10.98.28.98:16379 |
|
10.98.28.99 | Codis-proxy | 10.98.28.99:16379 |
|
10.98.28.100 | Codis-proxy | 10.98.28.100:16379 |
|
10.98.28.103 | Codis-proxy | 10.98.28.103:16379 |
|
10.98.28.104 | Codis-proxy | 10.98.28.104:16379 |
|
10.98.28.105 | Codis-proxy | 10.98.28.105:16379 |
|
10.98.28.106 | Codis-proxy | 10.98.28.106:16379 |
|
10.98.28.25 | Codis-server | 10.98.28.25:6381 | 为group_2中的slave |
10.98.28.26 | Codis-server | 10.98.28.26:6381 | 为group_2中的master |
10.98.28.46 | Codis-server | 10.98.28.46:6381 | 为group_3中的master |
10.98.28.47 | Codis-server | 10.98.28.47:6381 | 为group_3中的slave |
10.98.28.44 | Codis-server | 10.98.28.44:6381 | 为group_4中的slave |
10.98.28.45 | Codis-server | 10.98.28.45:6381 | 为group_4中的master |
线上机器中codis-dashboard/codis-proxy/codis-server组件均由 supervisord 管理,down掉后自动拉起来
Supervisord 目录:/usr/bin/supervisord
Codis-dashbord supervisor配置文件路径:/letv/codis/conf/dashboard-supervisord.conf
Codis-proxy supervisor配置文件路径:/letv/codis/conf/proxy-supervisord.conf
Codis-server supervisor配置文件路径:/letv/codis/conf/server-supervisord.conf
2. Codis部署
将codis程序压缩包(10.98.28.5上/letv/codis中的codis-example.tar.gz)解压到指定文件夹内,线上环境路径为:/letv/codis/,该目录下内容有:
[letvuser@basic.azure.pushd.21 ~]$ ll /letv/codis/
total 20
drwxrwxr-x 3 root root 4096 Dec 23 09:31 bin
drwxr-xr-x 2 root root 122 Dec 23 09:30 conf
-rw-r--r-- 1 root root 188 Dec 10 17:57 config.ini
-rwxr-xr-x 1 root root 1440 Aug 25 20:53 dashboard.sh
-rwxr-xr-x 1 root root 1818 Aug 28 14:16 proxy.sh
-rwxr-xr-x 1 root root 1425 Aug 25 20:53 server.sh
Dashboard.sh 为codis-dashboard的使用脚本,可以有start/stop/status/restart 命令
Proxy.sh 为codis-proxy的使用脚本,使用同上
Server.sh 为codis-server的使用脚本,使用同上
Letv/codis/bin下内容为:
[letvuser@basic.azure.pushd.21 ~]$ ll /letv/codis/bin/
total 78684
drwxrwxr-x 4 root root 35 Aug 25 20:53 assets
-rwxr-xr-x 1 root root 15161808 Aug 25 20:53 codis-config
-rwxr-xr-x 1 letvuser letvuser 15990080 Dec 23 09:26 codis-proxy
-rwxr-xr-x 1 root root 6311107 Aug 25 20:53 codis-server
-rwxr-xr-x 1 root root 22233 Aug 25 20:53 redis-check-aof
-rwxr-xr-x 1 root root 45451 Aug 25 20:53 redis-check-dump
-rwxr-xr-x 1 root root 4688469 Aug 25 20:53 redis-cli
-rwxr-xr-x 1 root root 6311107 Aug 25 20:53 redis-sentinel
注意:在新机器上部署proxy时需要修改几个地方
1) config.ini中proxy_id配置值为proxy_10.98.28.21,其中IP地址应该改为本机的IP
2) /data/letv/codis/conf/proxy-supervisord.conf 配置中
command=/letv/codis/bin/codis-proxy --log-level=warn -c /letv/codis/config.ini -L /letv/logs/codis/proxy/proxy.log --cpu=8 --addr=10.98.28.21:16379 --http-addr=10.98.28.21:11000
需要将IP地址改为本机的IP地址,且不要将IP地址写为0.0.0.0,否则需要在每台机器的/etc/hosts列表中加上所有机器的名称/IP对应关系。
3)确保本机有目录 /letv/codis/ /letv/logs/codis/proxy/ /letv/run/codis/proxy/
配置codis-server注意事项
1) /letv/codis/conf/codis-server.conf 中根据自己需要修改 port (codis-server端口号),dir (rdb/aof备份文件路径),maxmemory(使用的最大内存),其他维持不变即可
3. codis启动
按照部署流程部署后,启动proxy时只需要 ./proxy.sh start 即可,启动dashboard/codis-server同样可以调用dashboard.sh server.sh 使用。
或者直接调用
Supervisord –c /data/letv/codis/conf/dashboard-supervisord.conf
Supervisorctl –c /data/letv/codis/conf/dashboard-supervisord.conf start codis-dashboard
Supervisord –c /data/letv/codis/conf/proxy-supervisord.conf start codis-proxy
Supervisorctl –c /data/letv/codis/conf/proxy-supervisord.conf start codis-proxy
Supervisord –c /data/letv/codis/conf/server-supervisord.conf start codis-server
Supervisorctl –c /data/letv/codis/conf/server-supervisord.conf start codis-server
同样,start可以换成stop/restart
Codis集群启动具体流程如下:
1) Codis集群启动需要先启动组件zookeeper,安装启动zookeeper参见
2) 启动dashboard
在10.98.28.5中执行/letv/codis/dashboard.sh start
Dashboard操作界面地址 http://10.98.28.5:18087/admin/
3) 初始化slot
在10.98.28.5中执行 /letv/codis/bin/codis-config –c /letv/codis/conf/config.ini slot init
4) 启动codis-server
进入各个codis-server机器执行/letv/codis/server.sh start即可
5) 添加codis-server组
/letv/codis/bin/codis-config –c /letv/codis/conf/config.ini server add 1 10.98.28.5:6381 master
/letv/codis/bin/codis-config –c /letv/codis/conf/config.ini server add 1 10.98.28.13:6381 slave
上述命令意思是在 服务组1中添加master,其地址是10.98.28.5:6381,添加slave地址是10.98.28.13:6381,一个服务组中只有一个master,可以同时有多个slave.
按照以上命令添加所有需要的服务组即可
6) 分配服务组的slot范围
/letv/codis/bin/codis-config –c /letv/codis/conf/config.ini slot rang-set 0 300 1 online
/letv/codis/bin/codis-config –c /letv/codis/conf/config.ini slot rang-set 301 800 2 online
/letv/codis/bin/codis-config –c /letv/codis/conf/config.ini slot rang-set 801 1023 3 online
上述命令意思是将slot 0-300分配到组1上,301-800分配到组2上,801-1023分配到组3上,同时设置slot的状态为online。
注意:分配slot时必须将0-1023个slot全部分配到服务组中,否则proxy不能启动;如果服务组没有分配slot,则服务组无法存储数据
7) 启动代理
进入各个代理机器,执行/letv/codis/proxy.sh start即可
备注:一旦slot分配完,服务组添加完,以后不必再添加,只需要根据需要启动代理/codis-server等即可。
4. Codis-server迁移
当某一服务组(codis-server)内存占用超过80%时,可以将占用内存大的服务组中的数据迁移一部分到内存占用少的服务组上,具体操作如下:
例 如:group_1中master为10.98.28.5,设置内存为12G,已使用10G,slave机器为10.98.28.13;group_4中 master为10.98.28.46,
设置内存为12G,已使用2G,则可以将group_1中的部分数据迁移到group_4中。
- 导出group_1中slave机器上的所有key值(master/slave数据是同步的,为了减轻master服务压力,最好在slave上执行检测)
在slave机器(10.98.28.13)的/home/letvuser目录下执行
/letv/codis/bin/redis-cli -p 6381 keys '*' > 10.98.28.13.keys
2. 运行迁移检测工具checkSlot(该工具在10.98.28.5中的/letv/codis/bin目录内,如果slave机器上没有可以拷贝过去),检测group_1中的哪些slot可以迁移
工具使用方式
[letvuser@basic.azure.zkdashboard.5 bin]$ ./checkSlot
./checkSlot keyfile ZkAddr DbName RedisAddr GroupId
该工具包括几个参数,描述如下:
Keyfile: 上面导出的key文件
ZkAddr: zookeeper的地址,线上codis集群中为10.98.28.5:2181
DbName: codis集群的名称,线上名称为pusher(即codis config.ini中的product)
RedisAddr:需要检测的redis机器的地址,可以填为127.0.0.1:6381
GroupId: 需要检测的redis所属的服务组,本示例为1
则可以执行命令如下
./checkSlot 10.98.28.13.keys 10.98.28.5:2181 pusher 127.0.0.1:6381 1
检测操作根据需要检测的key数量,检测时间长短不同,例如检测230万key,可能会花费15分钟左右。检测结束后会打印哪些key可以迁移,格式如下:
can migrate slot index:
beg end
0000 0010
0015
0020 0023
0102 0200
……
上面的输出结果表示从0-10,20-23,102-200,还有单个15编号的slot可以迁移
3. 执行迁移操作
在10.98.28.5中执行迁移命令
/letv/codis/bin/codis-config –c /letv/codis/conf/config.ini slot migrate 0 10 4
上述操作表示 将编号 0-20 的slot迁移到组4中,如果迁移单个slot,可以将起始/结束编号设为同一个值
迁移部分slot后需要查看dashboard中每个组的内存大小,均匀即可。
5. Codis扩容
当服务组中的master内存均不多时,需要添加新的机器进入,即扩容。
具体操作步骤如下:例如需要添加一个新的服务组5,master为10.98.28.201:6381,slave为10.98.28.202:6381
- 在 10.98.28.201,10.98.28.202机器上安装codis,根据需要修改codis-server的配置文件,并启动codis- server即可(/letv/codis/server.sh start),
具体参见codis部署和启动中关于codis-server的部分。 - 添加新的服务组(参见codis启动中步骤5)
在10.98.28.5中执行
/letv/codis/bin/codis-config –c /letv/codis/conf/config.ini server add 5 10.98.28.201:6381 master
/letv/codis/bin/codis-config –c /letv/codis/conf/config.ini server add 5 10.98.28.202:6381 slave
3. 将其他组中的数据迁移部分到服务组5
具体参见codis迁移
6. Codis-server主从切换
当 一个服务组中的master挂掉并起不来后,或者由于其他原因需要将组中的slave提升为master时,可以在dashboard界面
中点击 Promote to Master按钮,也可以在10.98.28.5中执行
/letv/codis/bin/codis-config -c /letv/codis/conf/config.ini server promote 1 10.98.28.5:6381
上述命令意思是:将组1中的slave机器10.98.28.5:6381 提升为master。