redis集群搭建

就写给自己以后忘记的时候看看,不一定正确

安装redis

wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar xzf redis-5.0.3.tar.gz
cd redis-5.0.3
make
cd src
cp redis-cli redis-sentinel redis-server /usr/sbin
#配置文件模板在redis-5.0.3目录里面
cd ../
cp redis.conf sentinel.conf /etc/   #方便等下运行的时候,指定配置文件

一、搭建master-slave模式 (主备模式)

192.168.3.27 (master)
192.168.3.26 (slave)

修改master上的配置文件
vim /etc/redis.conf

然后在文件里面修改一下配置

bind 127.0.0.1====>bind 0.0.0.0  #方便其他机器访问
daemonize no====>daemonize yes  #以后台方式运行
logfile ""====>logfile "/var/log/redis.conf"  #指定日志文件,方便追踪排查

然后运行

redis-server /etc/redis.conf
修改slave主机上的配置文件

修改和master一样的设置后,在redis.conf里面增加

replicaof 192.168.3.27 6379   #指定本机的master为192.168.3.27

然后运行

redis-server /etc/redis.conf
查看运行结果
slave运行信息
master运行信息
验证

image.png

在master上设置一个key后,在slave上也有相应的key,默认情况该模式下,主服务器上可以进行读写,从服务器只能读,如:
image.png

但是如果在从服务器的配置文件修改配置
image.png

将replica-read-only的值yes改成no,重启后,就可以读写
ps:从服务器配置成可以写入,但是写入的值并不会同步到主服务器上

同步机制
image.png
  • 当slave第一次连上master时,会进行一次完整同步
  • 当master上写入新的值时,slave会向master请求一次partial resynchronization,根据offset值,只进行增量同步
  • 当master重启之后,slave向master请求增量同步时,由于和之前的id不一致,所以会重新进行一次完整同步

二、搭建master-sentinel模式 (哨兵模式)

sentinel模式可以在master下线后,从slave中选择一台升级为master。
配置环境列表:
ip: 11.11.1.108 port: 6379 (master) -------- ip: 11.11.1.108 port: 26379 (sentinel进程)
ip: 11.11.1.107 port: 6379 (slave) -------- ip: 11.11.1.107 port: 26379 (sentinel进程)
ip: 11.11.1.106 port: 6379 (master) -------- ip: 11.11.1.106 port: 26379 (sentinel进程)

配置文件:
1、首先按照主备分别配置3台服务器 ()
slave上的redis.conf 上,在默认的配置文件里面添加

replicaof 11.11.1.108 6379   # 标明是108的slave

然后在3台服务器上分别启动redis

redis-server /etc/redis/redis.conf

2、配置 sentinel
下面是配置sentinel文件的典型配置:

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
  • sentinel monitor
    意思是sentinel进程,去监听一组名称为:master-group-name 的redis服务。
    quorum的意思是仲裁的数量,例如 sentinel monitor mymaster 127.0.0.1 6379 2
    表示监听一组名称为mymaster的服务,监听的地址是127.0.0.1的6379端口, 仲裁的数量为2。
    ps: 需要设置仲裁的原因是,redis-sentinel模式是靠sentinel进程去监听服务,然后去变换master,如果你集群里面设置3个redis服务,然后只有一个sentinel去监听,那么当这个sentinel进程挂掉的时候,就不会自动变换master了呀。quorum = 2 表示两个sentinel进程监听到master下线了,就会触发变换master的过程

  • down-after-milliseconds
    实例无法访问超过这个时间后,sentinel就会认为这个master已经下线

  • parallel-syncs
    在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步

  • failover-timeout
    故障转移时,超时的时间

3、配置
配置11.11.1.108 (master) sentinel.conf

port 26379
bind 0.0.0.0
daemonize yes
sentinel monitor zycloud localhost 6379 2
sentinel down-after-milliseconds zycloud 30000
sentinel failover-timeout zycloud 180000
sentinel parallel-syncs zycloud 1

配置11.11.1.106,11.11.1.107 sentinel.conf

port 26379
bind 0.0.0.0
daemonize yes
sentinel monitor zycloud 11.11.1.108 6379 2
sentinel down-after-milliseconds zycloud 30000
sentinel failover-timeout zycloud 180000
sentinel parallel-syncs zycloud 1

然后在3台服务器上分别把sentinel启动

redis-sentinel /etc/redis/sentinel.conf

4、测试

  • 首先在3台服务器都存活的情况下


    image.png

    目前初始情况下,108是master。
    查看一下sentinel的信息:

~ redis-cli -h 11.11.1.108 -p 26379
11.11.1.108:26379> sentinel masters
1)  1) "name"
    2) "zycloud"
    3) "ip"
    4) "127.0.0.1"    #目前的master ip ,由于是通过108登录进来的,所以目前显示的是127.0.0.1
    5) "port"
    6) "6379"
    7) "runid"
    8) "9d626bf0aaf0bdd9f00925436ac6b59702f68121"
    9) "flags"
   10) "master"
   11) "link-pending-commands"
   12) "0"

也可以通过sentinel的get-master-addr-by-name来获取目前的master ip

11.11.1.108:26379> sentinel get-master-addr-by-name zycloud
1) "127.0.0.1"
2) "6379"
  • 现在断开master,可以只杀掉redis-server的进程,也可以直接关机,我比较懒,直接断开master的网卡
~ redis-cli -h 11.11.1.106 -p 26379
11.11.1.106:26379> sentinel get-master-addr-by-name zycloud
1) "11.11.1.107"
2) "6379"
11.11.1.106:26379>

可以看到,现在的master已经被更换为107了。


1)由于上面设置的quorum = 2,所以测试的时候,最少需要两个sentinel进程存活,否则是无法选举新的master
2)选举哪台从服务器升级为master是根据配置文件redis.conf里的replica-priority判断的

image.png

3)配置文件redis.conf是会被sentinel修改配置的

你可能感兴趣的:(redis集群搭建)