集群解决方案

集群解决方案,第1张

Redis集群解决方案-Codis

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.提供命令行界面。

IP/主机名
部署服务
10.10.73.148/node1 codis+zookeeper
10.10.73.149/node2 codis-zookeeper
10.10.73.192/node3 codis+dashboard


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)

[root@node1 zookeeper-3.4.8]# pwd /opt/app/zookeeper/zookeeper-3.4.8 [root@node1 zookeeper-3.4.8]# bin/zkServer.sh start     ##node1 ZooKeeper JMX enabled by default Using config: /opt/app/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@node2 zookeeper-3.4.8]# bin/zkServer.sh start     ##node2 ZooKeeper JMX enabled by default Using config: /opt/app/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg Starting zookeeper ... STARTED


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_9736


3.启动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范围)



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

原文地址: http://outofmemory.cn/zz/778437.html

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

发表评论

登录后才能评论

评论列表(0条)

保存