Codis源代码地址:https://github.com/wandoulabs/codis
可以参考:https://github.com/wandoulabs/Codis/blob/master/doc/tutorial_zh.MD。
今天分享的文章纯属个人理解和体会。如果有错误,请指出来。
更重要的是,认识一些正在使用或者将要使用Codis的朋友,多多少少是有帮助的。
官方文件关于Codis的整体结构和功能描述的太详细了,不想画蛇添足。
由于使用AWS的当前ec2主机,默认的当前用户是ec2-user,而不是root。
1.安装基本Go环境,所有节点都已安装。
2.安装Codis。除ZooKeeper之外的所有节点都正常安装。
3.要安装ZooKeeper,只需要在这个节点安装即可。
# yum -y install java-1.8.0 # wget https://www.apache.org/dist/zookeeper/zookeeper-3.4.7/zookeeper-3.4.7.tar.gz # tar -zxf zookeeper-3.4.7.tar.gz -C /opt # cd /opt/zookeeper-3.4.7 # cp conf/zoo_sample.cfg conf/zoo.cfg # mkdir /data/{zookeeper,logs} -p # sudo vim conf/zoo.cfg dataLogDir=/data/logs dataDir=/data/zookeeper server.1=localhost:2888:3888 # vim /data/zookeeper/myid 1 # vim /etc/profile.d/zookeeper.sh PATH=$PATH:/opt/zookeeper-3.4.7/bin # source /etc/profile # sudo /opt/zookeeper-3.4.7/bin/zkServer.sh start conf/zoo.cfg # netstat -alnut | grep 2181 # nc -v localhost 2181 # zkServer.sh status#查看ZooKeeper的角色(leader|follower|standalone) # zkCli.sh -server 127.0.0.1:2181 ls / create /Test hellozk get /Test set /Test hellozookeeper get /Test delete /Test get /Test quit4.启动codis-redis服务。仅在redis节点中。
# sudo mkdir /etc/redis # cd /opt/mygo/src/github.com/wandoulabs/codis # sudo ./bin/codis-server /etc/redis/redis.conf # sudo netstat -tnlp |grep codis-se5.在dashbaord节点上 *** 作。
1> 配置dashboard服务 # cd /opt/mygo/src/github.com/wandoulabs/codis/ # mkdir /etc/codis # cp config.ini /etc/codis/codis-config.ini # vim vim /etc/codis/codis-config.ini zk=172.31.16.33:2181 product=cn_release_codis dashboard_addr=localhost:18087 proxy_id=proxy_1 proto=tcp4 2> 启动dashboard服务 # cd /opt/mygo/src/github.com/wandoulabs/codis/ # ./bin/codis-config -c /etc/codis/codis-config.ini dashboard 3> 初始化 slots(该命令会在zookeeper上创建slot相关信息) # cd /opt/mygo/src/github.com/wandoulabs/codis/ # ./bin/codis-config -c /etc/codis/codis-config.ini slot init 4> 强制格式化slot # ./bin/codis-config -c /etc/codis/codis-config.ini slot init6.添加codis-group-redis
>添加第一组编码
# ./bin/codis-config -c /etc/codis/codis-config.ini server add 1 172.31.51.119:6379 master # ./bin/codis-config -c /etc/codis/codis-config.ini server add 1 172.31.51.125:6379 slave>添加第二组codis。
# ./bin/codis-config -c /etc/codis/codis-config.ini server add 2 172.31.51.126:6379 master # ./bin/codis-config -c /etc/codis/codis-config.ini server add 2 172.31.51.124:6379 slave>打开切片
# ./bin/codis-config -c /etc/codis/codis-config.ini slot range-set 0 511 1 online # ./bin/codis-config -c /etc/codis/codis-config.ini slot range-set 512 1023 2 online>在线扩展容量和添加新存储片。
# ./bin/codis-config -c codis-config.ini server add 3 192.168.10.131:6381 master # ./bin/codis-config -c codis-config.ini server add 3 192.168.10.132:6381 slave # ./bin/codis-config -c codis-config.ini slot migrate 256 511 37.启动codis-代理服务。
例如,有两个在线Codis代理服务。
# cd /opt/mygo/src/github.com/wandoulabs/codis/ # mkdir /etc/codis # cp config.ini /etc/codis/codis-proxy.ini # vim /etc/codis/codis-proxy.ini zk=172.31.51.123:2181 product=cn_release_codis dashboard_addr=172.31.51.120:18087 proxy_id=proxy_1 proto=tcp4 # ./bin/codis-proxy -c /etc/codis/codis-proxy.ini -L /var/log/codis_proxy.log --cpu=1 --addr=172.31.51.122:19000 --http-addr=172.31.51.122:11000 # cd /opt/mygo/src/github.com/wandoulabs/codis/ # mkdir /etc/codis # cp config.ini /etc/codis/codis-proxy.ini # vim /etc/codis/codis-proxy.ini zk=172.31.51.123:2181 product=cn_release_codis dashboard_addr=172.31.51.120:18087 proxy_id=proxy_2 proto=tcp4 # ./bin/codis-proxy -c /etc/codis/codis-proxy.ini -L /var/log/codis_proxy.log --cpu=1 --addr=172.31.51.121:19000 --http-addr=172.31.51.121:110008.仪表板监控页面
http://<;dashboard_ip>:18087/admin/
9.移除碎片化进程。
---假设将分片3移除--- 1. 设置codis-proxy为offline状态. ./bin/codis-config -c codis-config.ini proxy offline proxy_1 2. 迁移分片3上的数据到分片1 ./bin/codis-config -c codis-config.ini slot migrate 256 511 1 3. 彻底移除分片3 ./bin/codis-config -c codis-config.ini server remove-group 310.codis服务器的高可用性
# export GOPATH=/opt/mygo # go get github.com/ngaut/codis-ha # cp /opt/mygo/bin/codis-ha /opt/mygo/src/github.com/wandoulabs/codis/bin/ # cd /opt/mygo/src/github.com/wandoulabs/codis/ # ./bin/codis-ha -codis-config="localhost:18087" -log-level="info" -productName="cn_release_codis"遇到的问题和解决方法,希望这部分对朋友有用。
(1)
2015/12/11 16:49:10 dashboard.go:160: [INFO] dashboard listening on addr: :18087 2015/12/11 16:49:10 dashboard.go:234: [PANIC] create zk node failed [error]: dashboard already exists: {"addr": "172.31.16.30:18087", "pid": 7762}解决方法:
这种问题是由于使用kill-9导致dashboard服务非正常终止,而你在退出服务的时候没有清除自己在zk上的信息,所以出现了这种问题。
所以在停止codis集群的任何服务的时候都不要轻易使用kill-9,但是可以使用kill。
如果使用kill,服务终止时会自动清除自己在zk上的信息,下次重启时会立即注册。
临时解决方案是:
#rmr/ZK/codis/db_codis_proxy_test/仪表板
(2)
仪表板提供的api接口
http://debugAddr/setloglevel?级别=调试
Http://debugAddr/debug/vars#主要获取ops信息,也可以设置日志级别。
通过访问代理的debug_addr对应地址/debug/vars路径可以看到每个代理的qps信息。
(3)
codis-proxy服务日志中生成信息的解释。
退出:客户端发出的退出指令。
EOF:连接直接断开,即代理从客户端的tcp读取时,遇到EOF。
Codis会在每次主动关闭客户端的连接时进行记录。一般来说,可能有:
非法 *** 作,请求公司的底层redis死了,这个会话长时间没有请求触发了代理端的清理逻辑。
第三个可能更大。要看6点以后的时间。是因为你的访问量不大吗?
会话最大超时=1800
如果30分钟内没有ops,codis会主动关闭这个连接。
嗯,主要是有人反映,有时候客户端主动关闭了他们环境中的连接,但是代理端没有收到关闭消息,导致代理端最后积累了很多连接,把资源都吃光了。
(4)
NaNGB
因为redis配置文件中没有设置memorymaxmemory参数
(5)
codis中的所有读写 *** 作都在redis-master上进行,redis-master只负责数据冗余。当主设备出现故障时,可以切换主从设备。
(6)******
在codis聚类中,用乘积来区分是否是同一个聚类。因此,如果是同一个集群,那么仪表板和codis-proxy中的产品应该设置相同。否则,我们将面临以下问题。
zk:节点不存在
codis-proxy配置文件中的proxy_id用于区分同一集群中的不同成员,因此该参数应该是唯一的。
(7)
Codis-ha只负责在主设备挂起时自动选择一个从设备提升为主设备,而不会将剩余的从设备再次挂起到新的主设备上,也不保证选择的从设备是最优的。
(8)
打开的文件太多
用python多线程测试redis的压力,压力超过4000,就会出现这种问题。
两个codis-proxy支持并发2-3w没有太大问题。
(9)
即使dashboard服务停止,也不会影响app通过codis-proxy正常访问redis服务。
但是会影响codis-ha服务,所以主备不会自动切换。
也就是说,如果dashboard服务被停止,那么app仍然可以正常访问redis,但是codis-ha会终止运行期。
(10)
redis数据的主从复制可以在同一个组内实现,但不能在不同的组内实现。
如果同一个组的主从全部挂机,数据会丢失,但如果仍然查询挂机组中的键,会得到错误。并且该键也将被占用。
所有写 *** 作codis-proxy都不会发送到挂起组。
(11)
在同组的codis-server实例下,多个从机会分担主机的读请求吗?
codis的设计思想是更注重一致性,redis的主从同步不是强一致的,所以codis不支持读写分离。
(12)
一个集群中只能运行一个仪表板服务,同时可以运行多个但只能运行一个服务。
如果是正在使用Codis的朋友,肯定会遇到这样的问题,就是dashboard的登录认证。这里我做了一个基于nginx的用户登录认证,配置如下。
当时我在做这个登录认证的时候,也是2~3个小时才能解决。这不是因为它有多复杂,而是因为许多仪表板都是基于api来获取数据。如果配置中没有重写重定向,则只会显示页面,而不会获得任何数据。记住
下一篇Codis文章的补充:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)