一、概要
1、折腾codis集群已经快两个月了,感谢一直以来codis的作者刘奇和黄东旭的耐心支持,在这里给你们点个赞,现在我司已经有一个业务跑在了codis集群上,目前只是切了整个业务的10%%u7684量,预计下周会全量切到codis上,这个时候大家肯定特别想知道codis稳定吗?有没有什么bug啊,你想知道的也是我想知道的,搞起吧,用了才知道,反正目前我们这没发现啥问题,一些小的问题已经及时联系作者改掉了,好吧,不扯淡了,写这篇文章的目的是帮助想了解codis的初学者快速部署(官方的部署文档对应运维知识弱一点的童鞋看来还是有点费力)还有就是给自己做一个备录以便后期集群的部署。
2、codis 是一个分布式redis解决方案, 对于上层的应用来说, 连接到 codis proxy 和连接原生的 redis server 没有明显的区别 (有一些命令不支持), 上层应用可以像使用单机的 redis 一样使用, codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 redis服务,当然,前段时间redis官方的3.0出了稳定版,3.0支持集群功能,codis的实现原理和3.0的集群功能差不多,我了解的现在美团、阿里已经用了3.0的集群功能了,我们这边的业务主要是php,3.0集群的sdk目前貌似还没有支持php语言的,大家谁的php应用上了3.0集群,请联系我,我去取经,有关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-yinstallzookeeperjdk##安装服务
vim/etc/hosts##添加host 10.10.0.47zookeeper-node1 10.10.0.48zookeeper-node2 10.10.1.76zookeeper-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.shstart##服务启动
2、go安装(codis是go语言写的,所以那些机器需要安装你懂得)
wgethttps://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz tar-zxvfgo1.4.1.linux-amd64.tar.gz mvgo/usr/local/ cd/usr/local/go/src/ bashall.bash cat>>~/.bashrc<<_bashrc_export exportgoroot=/usr/local/go exportpath=$path:$goroot/bin exportgoarch=amd64 exportgoos=linux _bashrc_export source~/.bashrc
3、下载并编译codis(codis-config、codis-proxy、codis-server所在的机器)
mkdir/data/go exportgopath=/data/go /usr/local/go/bin/gogetgithub.com/wandoulabs/codis cd/data/go/src/github.com/wandoulabs/codis/ ./bootstrap.sh makegotest
五、服务启动及初始化集群
1、启动 dashboard(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.inidashboard&
2、初始化 slots(codis-config上操作)
cd/data/go/src/github.com/wandoulabs/codis/&&./bin/codis-config-c/etc/codis/config_10.inislotinit
3、启动 codis redis , 和官方的redis server参数一样(codis-server上操作)
cd/data/go/src/github.com/wandoulabs/codis/&&./bin/codis-server/etc/redis_6379.conf&
4、添加 redis server group , 每一个 server group 作为一个 redis 服务器组存在, 只允许有一个 master, 可以有多个 slave, group id 仅支持大于等于1的整数(codis-config上操作)
cd/data/go/src/github.com/wandoulabs/codis/ ./bin/codis-config-c/etc/codis/config_10.iniserveradd110.10.32.42:6379master ./bin/codis-config-c/etc/codis/config_10.iniserveradd110.10.32.43:6380slave ./bin/codis-config-c/etc/codis/config_10.iniserveradd210.10.32.43:6379master ./bin/codis-config-c/etc/codis/config_10.iniserveradd210.10.32.44:6380slave ./bin/codis-config-c/etc/codis/config_10.iniserveradd310.10.32.44:6379master ./bin/codis-config-c/etc/codis/config_10.iniserveradd310.10.32.42:6380slave
5、设置 server group 服务的 slot 范围 codis 采用 pre-sharding 的技术来实现数据的分片, 默认分成 1024 个 slots (0-1023), 对于每个key来说, 通过以下公式确定所属的 slot id : slotid = crc32(key) % 1024 每一个 slot 都会有一个特定的 server group id 来表示这个 slot 的数据由哪个 server group 来提供.(codis-config上操作)
cd/data/go/src/github.com/wandoulabs/codis/ ./bin/codis-config-c/etc/codis/config_10.inislotrange-set03001online ./bin/codis-config-c/etc/codis/config_10.inislotrange-set3017002online ./bin/codis-config-c/etc/codis/config_10.inislotrange-set70110233online
6、启动 codis-proxy
阿里云买哪个是独立服务器做网站对于网址来说要考虑再三新站SEO时为何会关键词排名不稳定新加坡云服务器租金贵吗购买服务器和云服务器哪个划算电脑钉钉直播怎么共享屏幕 钉钉电脑版直播如何共享屏幕阿里云服务器购买原因云服务器网站空间费用