集群部署和单机部署

集群部署和单机部署,第1张

codis集群部署实战

一.总结

1.codis系统被丢弃已经快两个月了。感谢codis作者刘琦和黄的耐心支持,在此给大家一个赞。现在,我们公司有一项业务运行在codis集群上。目前整个业务只削减了10%。预计整个业务将于下周在codis上削减。这个时候你一定特别有兴趣想知道codis是否稳定?没有bug。你想知道的就是我想知道的。启动它,用了才知道。反正目前我们这边还没发现什么问题,一些小问题已经及时联系作者改正了。好了,别瞎说了。写这篇文章的目的是帮助想了解codis的初学者快速部署(官方部署文档对应的是运维知识薄弱的童鞋,看起来还是有点费力),并为后期集群部署做好备份记录。

2.Codis是一个分布式Redis解决方案。对于上层应用来说,连接Codis代理和连接原生Redis服务器没有明显区别(有些命令不支持)。上层应用程序可以像使用独立的Redis一样使用,Codis的下层将处理请求的转发、不停机的数据迁移等。后面的一切对前面的客户端都是透明的,所以可以简单的认为是后面连接了一个无限内存的redis服务。当然,前段时间Redis3.0正式版稳定版出来了,3.0支持集群功能。codis的实现原理类似于3.0的集群功能。据我所知,美团和阿里已经在用3.0的聚类功能了。我们这里的业务主要是php。目前看来3.0集群的sdk还不支持php语言。请联系我,我会从中学习。redis常用的集群技术请移至infoq专栏Redis集群技术与Codis实践@晓天小果。

二。体系结构

第三,分批作用

zookeeper集群: 10.10.0.47 10.10.0.48 10.10.1.76 codis-config、codis-ha: 10.10.32.10:18087 codis-proxy: 10.10.32.10:19000 10.10.32.49:19000 codis-server: 10.10.32.42:6379、10.10.32.43:6380(主、从) 10.10.32.43:6379、10.10.32.44:6380(主、从) 10.10.32.44:6379、10.10.32.42:6380(主、从)

四。部署

1.安装zookeeper。

yum -y install zookeeper jdk  ##安装服务 vim /etc/hosts  ##添加host 10.10.0.47 ZooKeeper-node1 10.10.0.48 ZooKeeper-node2 10.10.1.76 ZooKeeper-node3 vim /etc/zookeeper/conf/zoo.cfg ##撰写zk的配置文件 maxClientCnxns=50 tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper/ clientPort=2181 server.1=ZooKeeper-node1:2888:3888 server.2=ZooKeeper-node2:2888:3888 server.3=ZooKeeper-node3:2888:3888 mkdir /data/zookeeper/ ##创建zk的datadir目录 echo "2" >/data/zookeeper/myid  ##生成ID,这里需要注意, myid对应的zoo.cfg的server.ID,比如ZooKeeper-node2对应的myid应该是2 /usr/lib/zookeeper/bin/zkServer.sh start  ## 服务启动

2.go安装(codis是用go语言写的,所以那些机器需要安装,你懂的)

wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz tar -zxvf go1.4.1.linux-amd64.tar.gz mv go /usr/local/ cd /usr/local/go/src/ bash all.bash cat >> ~/.bashrc << _bashrc_export export GOROOT=/usr/local/go export PATH=\$PATH:\$GOROOT/bin export GOARCH=amd64 export GOOS=linux _bashrc_export source ~/.bashrc

3.下载并编译CODIS(codis(codis-config、codis-proxy和codis-server所在的机器)

mkdir /data/go export GOPATH=/data/go /usr/local/go/bin/go get github.com/wandoulabs/codis cd  /data/go/src/github.com/wandoulabs/codis/ ./bootstrap.sh make gotest

动词(verb的缩写)集群的服务启动和初始化

1.启动仪表板(在codis-config上 *** 作)

cat /etc/codis/config_10.ini ##撰写配置文件 zk=10.10.0.47:2181,10.10.0.48:2181,10.10.1.76:2181 product=zh_news proxy_id=codis-proxy_10 net_timeout=5000 proto=tcp4 dashboard_addr=10.10.32.10:18087 cd /data/go/src/github.com/wandoulabs/codis/ &&  ./bin/codis-config -c /etc/codis/config_10.ini  dashboard &

2.初始化插槽( *** 作插槽(codis-config)

cd /data/go/src/github.com/wandoulabs/codis/ &&  ./bin/codis-config -c /etc/codis/config_10.ini slot init

3.启动CodisRedis,与官方Redis服务器参数相同(在codis-server上运行)

cd /data/go/src/github.com/wandoulabs/codis/ && ./bin/codis-server /etc/redis_6379.conf &

4.添加Redis服务器组。每个服务器组都作为Redis服务器组存在。只允许一个主机和多个从机。组ID仅支持大于或等于1的整数(对codis-config的 *** 作)

cd /data/go/src/github.com/wandoulabs/codis/ ./bin/codis-config -c /etc/codis/config_10.ini server add 1 10.10.32.42:6379 master ./bin/codis-config -c /etc/codis/config_10.ini server add 1 10.10.32.43:6380 slave ./bin/codis-config -c /etc/codis/config_10.ini server add 2 10.10.32.43:6379 master ./bin/codis-config -c /etc/codis/config_10.ini server add 2 10.10.32.44:6380 slave ./bin/codis-config -c /etc/codis/config_10.ini server add 3 10.10.32.44:6379 master ./bin/codis-config -c /etc/codis/config_10.ini server add 3 10.10.32.42:6380 slave

5.设置服务器组服务Codis的槽位范围采用预分片技术实现数据分片,默认分为1024个槽位(0-1023)。对于每个键,通过以下槽Id来确定其所属的槽Id:SlotId=crc32(key)%1024每个槽将具有特定的服务器组ID,以指示哪个服务器组提供该槽的数据。(codis-config上的 *** 作)

cd /data/go/src/github.com/wandoulabs/codis/ ./bin/codis-config -c /etc/codis/config_10.ini slot range-set 0 300 1 online ./bin/codis-config -c /etc/codis/config_10.ini slot range-set 301 700 2 online ./bin/codis-config -c /etc/codis/config_10.ini slot range-set 701 1023 3 online

6.启动Codis-proxy(Codis-proxy上的 *** 作)

cat /etc/codis/config_10.ini ##撰写配置文件 zk=10.10.0.47:2181,10.10.0.48:2181,10.10.1.76:2181 product=zh_news proxy_id=codis-proxy_10  ##10.10.32.49上改成codis-proxy_49,多个proxy,proxy_id 需要唯一 net_timeout=5000 proto=tcp4 dashboard_addr=10.10.32.10:18087 cd /data/go/src/github.com/wandoulabs/codis/ &&  ./bin/codis-proxy  -c /etc/codis/config_10.ini -L /data/log/codis-proxy_10.log  --cpu=4 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000 & cd /data/go/src/github.com/wandoulabs/codis/ &&  ./bin/codis-proxy  -c /etc/codis/config_49.ini -L /data/log/codis-proxy_49.log  --cpu=4 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000 &

好了,整个集群已经搭建成功,我来展示展示截图。

不及物动词codis服务器的高可用性

Codis-ha实现了codis-server的主从切换。如果codis-server的主库挂起,它会将一个从库提升为主库。如果从属库挂起,它会将该从属库设置为从集群注销。

1.装置

export GOPATH=/data/go /usr/local/go/bin/go get github.com/ngaut/codis-ha cd  /data/go/src/github.com/ngaut/codis-ha go build cp codis-ha /data/go/src/github.com/wandoulabs/codis/bin/ 使用方法: codis-ha --codis-config=dashboard地址:18087 --productName=集群项目名称

2.使用supervisord管理codis-ha流程

yum -y install supervisord /etc/supervisord.conf中添加如下内容: [program:codis-ha] autorestart = True stopwaitsecs = 10 startsecs = 1 stopsignal = QUIT command = /data/go/src/github.com/wandoulabs/codis/bin/codis-ha --codis-config=10.10.32.17:18087 --productName=zh_news user = root startretries = 3 autostart = True exitcodes = 0,2

3.启动超级管理员服务

/etc/init.d/supervisord start chkconfig supervisord  on

此时,ps-ef|grepcodis-ha,你会发现codis-ha进程已经开始。此时,您应该停止codis服务器的主服务器,并查看从服务器是否会提升为主服务器。


七。关于监控

关于整个codis集群的监控,我们这里用的是zabbix,监控指标比较简单,有什么好的建议请给我。

Zookeeper:监控每个节点的端口连通性(想想以后监控进程)

Codis-proxy:监控端口的连通性,这远远不够。

codis-服务器:监控内存使用,连接数和连接。

Codis-ha:监测过程

仪表板:监控端口连接


八、使用过程中遇到的问题

1.codis-proxy的日志切割。codis-proxy的默认日志级别是info,这导致了大量的日志。目前codis-proxy不支持热重启,修改启动参数比较麻烦。建议使用logrotate进行原木切割。

2.默认情况下,codis-proxy的监听地址没有特定的ipv4,即启动codis-proxy后没有监听0.0.0:19000,会导致前端lvs无法负载均衡codis-proxy,无法转发请求的问题。这个问题已经通过联系作者得到了处理。在codis-proxy启动的配置文件中添加proto=tcp4,将支持监听ipv4。

3.当添加redis服务器组时,非codis服务器(本地redis)甚至可以加入codis集群。很明显Redis和codis-server共用一台物理机,很容易加错。我希望可以有一个非codis服务器不能加入codis集群的验证。

4.codis集群的内部通信是通过主机名进行的。如果不通过域名解析主机名,dashboard无法通过主机名访问代理的http-addr地址,这将导致无法从web界面看到OP/s数据。至于其他什么问题,我这里还没发现。建议内部通信直接使用内网IP。

PS:我建立了一个管理codis的QQ群。对codis感兴趣的可以加入我们交流。群号是183613045。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/783449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存