Redis集群搭建及测试
Redis有三种模式,前两种有点点问题,高可用做的不是那么好,目前来讲,最后一种Cluster模式算是最完美的,本文将模拟搭建这种模式的集群搭建过程,废话不多说,我要搭建成如下图所示的样子(灵魂画手,将就看):
说明:
一般来讲,生产环境的redis集群都是在不同机房的不同服务器上的,目的就是一个机房发生诸如掉电,火灾,断网等等问题时,依旧能够做到高可用,本文模拟3台服务器搭建6个节点,目的是:
1).告诉读者,redis集群的每个节点只通过端口和ip来区分,运行起来相当于一个Redis任务(进程)可以做一个redis节点来看待,也就意味着其实可以通过一台服务器构建这6个节点,当然这是模拟,生产环境不会这么干,因为没有意义,
如果是一台服务器,完全用一个redis就可以了,不用集群,就算用集群,部署到一个节点上,一但掉电,集群整个垮掉了,没有意义。
2).
上图我一个服务器部署2个节点,一个主节点,一个其他主节点的从节点,这样,不论是一个从节点垮掉还是一个主节点垮掉,还是Server1整个垮掉,redis集群都不会垮掉,就保证了高可用。
下面介绍实施过程:
第一步: 给Servier1,
Servier2,Servier3安装Redis。不会的看我之前的帖子,从网络到安装到避坑到连接都有详细写。
第二步:在Service1(192.168.217.111),Service2(192.168.217.112),Servier3(192.168.217.112)的/usr/local/下创建目录分别如下:
192.168.217.111: /usr/local/redis6371 /usr/local/redis6374
192.168.217.112: /usr/local/redis6372 /usr/local/redis6375
192.168.217.113: /usr/local/redis6373 /usr/local/redis6376
第三步:将redis解压目录下的redis.conf拷贝到上面创建的目录下,也可以拷贝到其中一个,改完配置之后再分别拷贝到其他目录下(因为大部分的配置是一样的,避免繁琐的修改)
第四步:修改redis.conf配置文件,修改内容如下:
修改完以上配置之后可以cp或者scp到其他节点的目录下,修改ip,端口,指向文件,集群配置文件等指向,也上面的第1,2,4,5,6,9行的配置为相对应的配置。
第五步:启动redis服务,安装路径下的bin路径下,利用redis-server
配置文件的方式启动redis服务,每个节点都同样的方法去启动
启动成功之后查看:
第六步:都启动之后,再某一个节点,举例子第一个节点,上执行创建集群的操作命令(5.0之后的版本可以直接用下面的命令创建集群,但是5.0之前的版本需要用ruby脚本去创建,命令有差别,目的一模一样,请自行百度,这里不赘述):
./redis-cli --cluster create
192.168.217.111:6371 192.168.217.112:6372 192.168.217.113:6373
192.168.217.112:6375 192.168.217.113:6376 192.168.217.111:6374
--cluster-replicas 1
如上图所示:按照设计,从节点6375添加到6371主节点,从节点6376添加到6372主节点,从节点6374添加到6373主节点,
只有3个主节点且主节点有分配Slots(槽),也就是主节点可以读/写操作,但是从节点只能写。
出现如下页面,表示集群创建成功:
下面开始测试集群是否搭建成功:
连接其中一个节点,连接方式:redis-cli -c -h [IP]
-p [端口] 如下图所示,-c表示集群:
查看集群中的节点:
从节点:前面长长的是节点id,
后面长长的是他的主节点id,通过这个可以看出哪个从节点隶属于哪个主节点,是我们上面设计的样子。
集群测试:
我们在Server1这个服务器上登录6371这个节点存入一个数:
然后新开一个xshell窗口,登录Servier3的6373这个节点去获取这个key,看是否拿到值:
我再登录Server2的一个从节点6376去获取数据看看:
从其他节点可以正常获取数据,说明集群正常
节点掉电测试,将Server3下电:
然后测试集群的set/get是否正常,如下图所示,集群工作正常,说明了高可用。
需要再说一下的是:在集群中,如果在当前节点下set一个值,他不一定会存到当前节点下,他会自己选择一个节点去存,也就是说用keys可能并不能看到刚才存入的数据,但是用get
key就可以拿到刚才存入的值。
至此完!