Aaron

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1. codis线上环境

  2. 部署
  3. 启动
  4. 迁移
  5. 扩容
  6. 主从切换

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参见

http://wiki.letv.cn/pages/viewpage.action?pageId=47125487#id-60.%E8%BF%90%E7%BB%B4%E5%AE%8C%E5%85%A8%E6%89%8B%E5%86%8C-1.2ZK%E9%9B%86%E7%BE%A4

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中。

  1. 导出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

  1. 在 10.98.28.201,10.98.28.202机器上安装codis,根据需要修改codis-server的配置文件,并启动codis- server即可(/letv/codis/server.sh start),
    具体参见codis部署和启动中关于codis-server的部分。
  2. 添加新的服务组(参见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。

posted on 2016-03-02 16:56  软件LOVE网络  阅读(548)  评论(0编辑  收藏  举报