Codis是豌豆荚在2014年11月开通的。它是基于go和c开发的,是最近出现的由中国人开发的优秀开源软件之一。它的稳定性极高,性能也提升了不少。
Codis由四部分组成:
Codis-proxy:codis-proxy是用于客户端连接的Redis代理服务。codis-proxy本身就实现了Redis协议,和一个原生Redis没什么区别。对于一个业务,可以部署多个Codis-proxy,Codis-proxy本身是无状态的。
Codis-Config:Codis-Config是Codis的一个管理工具,支持添加/删除Redis节点。同时会启动一个dashboard服务,可以通过web界面直接观察Redis集群的运行状态。
Codis-server:Codis-server是由Codis项目维护的Redis的一个分支,基于2.8.13开发,增加了solt的支持原理的数据迁移指令。Codis上层的Codis-proxy和codis-config只有和这个版本的Redis交互才能正常运行。
Zookeeper:Codis依靠Zookeeper来存储数据路由表和codis-proxy节点的元信息。codis-config发起的命令将通过zookeeper同步到所有codis-proxy节点。zookeeper还维护codis服务器组信息,并提供分布式锁和其他服务。
Codis的特点:
1.自动平衡
2.它使用起来非常简单,并且可以通过web界面进行管理。
3.图形面板和管理工具
4.它支持大多数Redis命令,并与twemproxy完全兼容。
5.支持Redisnative客户端
6.安全且完全透明的数据迁移,可以根据需要轻松添加和删除节点。
7.提供命令行界面。
部署服务
1.提供java环境,Zookeeper和Go依赖java(node1,node2,node3)
[root@node1 ~]# mkdir -pv /opt/java [root@node1 ~]# tar -xf /root/jdk-7u51-linux-x64.tar.gz -C /opt/java/第二,提供Go语言,Codis服务依赖Go语言(node1,node2,node3)
[root@node1 ~]# tar -xf /root/go1.6.linux-amd64.tar.gz -C /usr/local/三。编辑“/etc/hosts”(节点1、节点2、节点3)
[root@node1 ~]# vim /etc/hosts 10.10.73.148 node1 10.10.73.149 node2 10.10.73.192 node3 ####node2、node3和node1一样四。在节点1和节点2服务器上部署Zookeeper服务(节点1和节点2)
[root@node1 ~]# mkdir /opt/app/zookeeper -pv [root@node1 ~]# cd /opt/app/zookeeper/ [root@node1 zookeeper]# wget http://apache.fayea.com/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz [root@node1 zookeeper]# tar -xf zookeeper-3.4.8.tar.gz [root@node1 zookeeper]# cd zookeeper-3.4.8 [root@node1 zookeeper-3.4.8]# pwd /opt/app/zookeeper/zookeeper-3.4.8 [root@node1 zookeeper-3.4.8]# cp conf/zoo_sample.cfg conf/zoo.cfg ##"zoo.cfg"为"zookeeper"的配置文件 [root@node1 zookeeper-3.4.8]# vim conf/zoo.cfg tickTime=2000 ##指明服务端(Leader)和客户端(Follower)之间的心跳时间间隔,单位为ms initLimit=10 ##指定容忍心跳检测失败的最大次数 syncLimit=5 ##指定Leader和Folloer之间发送消息,请求和应答的时常,不能大于’tickTime’的值 dataDir=./data/ ##指定数据存储路径,需创建 dataLogDir=./logs ##指明日志存储路径,需创建 server.148=node1:2888:3888 ##指明zookeeper节点,148表示每台zookeeper标号,2888表示zookeeper监听端口,3888表示leader选举端口 server.149=node2:2888:3888 clientPort=2181 ##指明客户端连接服务端的端口 [root@node1 zookeeper-3.4.8]# mkdir data logs [root@node1 zookeeper-3.4.8]# cat data/myid 148 ##指明zookeeper当前节点的标示符 #####以上 *** 作均在node1节点上 *** 作,node2节点同样如此,需要注意的是node2节点下的data/myid应为149动词(verb的缩写)提供环境保护,编辑“/etc/profile”(节点1、节点2、节点3)
[root@node1 ~]# vim /etc/profile export PATH=$PATH:/usr/local/go/bin export JAVA_HOME=/opt/java/jdk1.7.0_51 export PATH=$JAVA_HOME/bin:$PATH export GOPATH=/opt/app/product ##codis的路径,下面由”$GOPATH”表示 export PATH=$PATH:$GOPATH/bin export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar [root@node1 ~]# source /etc/profile ##重载配置文件 [root@node1 ~]# go version ##检测环境变量配置是否成功 go version go1.6 linux/amd64不及物动词安装codis服务(节点1、节点2、节点3)
[root@node1 product]# pwd /opt/app/product [root@node1 codis]# cd $GOPATH/src/github.com/CodisLabs/codis/ [root@node1 codis]# go get -u -d github.com/CodisLabs/codis ##下载codis package github.com/CodisLabs/codis: no buildable Go source files in /opt/app/product/src/github.com/CodisLabs/codis ##正确 [root@node1 codis]# make make[2]: Leaving directory `/opt/app/product/src/github.com/CodisLabs/codis/extern/redis-2.8.21/src' make[1]: Leaving directory `/opt/app/product/src/github.com/CodisLabs/codis/extern/redis-2.8.21' [root@node1 codis]# make gotest ? github.com/CodisLabs/codis/cmd/cconfig [no test files] ? github.com/CodisLabs/codis/cmd/proxy [no test files] ##出现以上内容表示codis安装成功 [root@node1 codis]# mkdir -pv logs data conf [root@node1 codis]# vim config.ini zk=node1:2181,node2:2181 ##指明zookeeper节点的IP和端口 product=ch_wtc ##定义数据库 dashboard_addr=10.10.73.192:18087 ##定义dashboard节点,监听端口为18087 password=wtc.com ##slave连接master的密码 proxy_id=proxy_148 ##定义proxy节点的id [root@node1 codis]# cd /conf [root@node1 conf]# wget https://github.com/ijonas/dotfiles/raw/master/etc/redis.conf --no-check-certificate [root@node1 conf]# ll total 24 -rw-r--r-- 1 root root 23350 Aug 30 11:02 redis.conf [root@node1 conf]# cp redis.conf redis_9736.conf [root@node1 conf]# cp redis.conf redis_9746.conf [root@node1 conf]# vim redis_9736.conf pidfile ./data/redis_9736.pid port 9736 logfile ./logs/redis_9736.log dbfilename dump_9736.rdb dir ./data/redis_9736 masterauth wtc.com ##开启认证功能 requirepass wtc.com ##指定密码,必须与”config.ini’配置文件中的password值一样 [root@node1 conf]# vim redis_9746.conf pidfile ./data/redis_9746.pid port 9746 logfile ./logs/redis_9746.log dbfilename dump_9746.rdb dir ./data/redis_9746 masterauth wtc.com requirepass wtc.com ####以上 *** 作均在node1节点上运行,node2、node3节点 *** 作方式和node1一样七。以上 *** 作完成后,分别启动zookeeper、codis-server、dashboard和codis-proxy。
1.启动zookeeper(节点1,节点2)
2.启动codis服务器(节点1、节点2、节点3)
[root@node1 codis]# pwd /opt/app/product/src/github.com/CodisLabs/codis [root@node1 codis]# bin/codis-server conf/redis_9736.conf [root@node1 codis]# bin/codis-server conf/redis_9746.conf [root@node1 codis]# ps aux | grep codis root 1597 0.0 0.1 137388 9432 ? Ssl 11:58 0:00 bin/codis-server *:9736 root 1601 0.0 0.1 137388 9432 ? Ssl 11:59 0:00 bin/codis-server *:9746 注意:如果启动失败,可查看错误日志 [root@mysql_01 codis]# pwd /opt/app/product/src/github.com/CodisLabs/codis [root@mysql_01 codis]# cat logs/redis_9736.log [28181] 29 Aug 16:44:17.121 # Can't chdir to './data/redis_9736': No such file or directory 解决办法:在相应的目录下创建相应的文件即可--./data/redis_97363.启动dashboard(node3)并初始化它。
[root@node3 codis]# nohup bin/codis-config dashboard >./logs/dashboard.log 2>&1 & [1] 4891 [root@node3 codis]# ps aux | grep dashboard root 4891 0.5 0.1 281876 8296 pts/1 Sl 11:59 0:00 bin/codis-config dashboard [root@node3 codis]# bin/codis-config slot init ##进行初始化,之后建立组关系 { "msg": "OK", "ret": 0 }八。为每个节点(node3)建立组关系
[root@node3 codis]# bin/codis-config server add 1 node1:9736 master { "msg": "OK", "ret": 0 } [root@node3 codis]# bin/codis-config server add 1 node2:9746 slave { "msg": "OK", "ret": 0 } [root@node3 codis]# bin/codis-config server add 2 node2:9736 master { "msg": "OK", "ret": 0 } [root@node3 codis]# bin/codis-config server add 2 node3:9746 slave { "msg": "OK", "ret": 0 } [root@node3 codis]# bin/codis-config server add 3 node3:9736 master { "msg": "OK", "ret": 0 } [root@node3 codis]# bin/codis-config server add 3 node1:9746 slave { "msg": "OK", "ret": 0 } ##总共分了三个组 1、node1为主、node2为从 2、node2为主、node3为从 3、node3为主、node1为从九、划分各组的solt范围,并启动代理,并设置为online(node3)
[root@node3 codis]# bin/codis-config slot range-set 0 340 1 online { "msg": "OK", "ret": 0 } [root@node3 codis]# bin/codis-config slot range-set 341 681 2 online { "msg": "OK", "ret": 0 } [root@node3 codis]# bin/codis-config slot range-set 682 1023 3 online { "msg": "OK", "ret": 0 } [root@node1 codis]# nohup bin/codis-proxy -c config.ini -L ./logs/proxy.log --cpu=4 --addr=0.0.0.0:19000 & [root@node2 codis]# nohup bin/codis-proxy -c config.ini -L ./logs/proxy.log --cpu=4 --addr=0.0.0.0:19000 & [root@node3 codis]# nohup bin/codis-proxy -c config.ini -L ./logs/proxy.log --cpu=4 --addr=0.0.0.0:19000 & [root@node1 codis]# bin/codis-config -c config.ini proxy online proxy_148 ##node1 { "msg": "OK", "ret": 0 } [root@node2 codis]# bin/codis-config -c config.ini proxy online proxy_149 ##node2 { "msg": "OK", "ret": 0 } [root@node3 codis]# bin/codis-config -c config.ini proxy online proxy_192 ##node3 { "msg": "OK", "ret": 0 }问题摘要:
1.在构建Redis集群时,一定要配置“/etc/hosts”,否则将无法启动dashboard。
2.“config.ini”与“redis_97(3|4)6”中的“password”相同
3.用于通过dashboard对Redis集群进行分组的solt范围是“0-1023”
4.仪表板成功启动后,必须对其进行初始化。通过zookeeper节点检查是否初始化。
[root@node1 zookeeper-3.4.8]# pwd ##node1 /opt/app/zookeeper/zookeeper-3.4.8 [root@node1 zookeeper-3.4.8]# sh bin/zkCli.sh [zk: localhost:2181(CONNECTED) 0] ls /zk/codis [db_wtc] [zk: localhost:2181(CONNECTED) 1] ls /zk/codis/db_wtc [fence, servers, slots, proxy, migrate_tasks, dashboard, LOCK, actions, ActionResponse] ####若出现了"slots",则说明进行了初始化(用于定义solt范围)欢迎分享,转载请注明来源:内存溢出
评论列表(0条)