在linux服务器上部署redis哨兵模式


以IP为192.168.225.200的服务器为例,工具Xshell。

1. 用Xshell连接到服务器,进入usr/local目录下,创建redis目录

cd /usr/local
mkdir redis

2. 下载、解压并安装redis。

(1)进入redis目录下,下载redis

wget http://download.redis.io/releases/redis-5.0.7.tar.gz

(2)解压

tar xzf redis-5.0.7.tar.gz

(3)进入redis-5.0.7目录编译、安装redis

make && make install

1)创建用于存放数据和日志的目录文件夹data、log。

mkdir data
mkdir log

2)进入log目录,创建日志文件

touch redis.log
touch sentinel.log

linux安装redis6.2.1 linux安装redis哨兵模式_IP

3.在redis目录下新建三份文件夹,分别命名为redis_master(主),redis_slave1(从),redis_slave2(从)。然后将redis-5.0.7文件夹分别复制到三个文件夹中。

(1)进入redis目录,新建redis_master(主),redis_slave1(从),redis_slave2(从)文件夹

mkdir redis_master
mkdir redis_slave1
mkdir redis_slave2

linux安装redis6.2.1 linux安装redis哨兵模式_IP_02


(2)将redis-5.0.7复制到新建的3个目录中

cp -r redis-5.0.7 /usr/local/redis/redis_master
cp -r redis-5.0.7 /usr/local/redis/redis_slave1
cp -r redis-5.0.7 /usr/local/redis/redis_slave2

4.分别进入redis_master(主),redis_slave1(从),redis_slave2(从)文件夹,修改redis.conf和sentinel.conf文件。

从机的配置和主机相似,不同的地方是从机需要使用replicaof指定主机(master)的IP地址和端口,老版本使用的是 slaveof,5.0.7版本使用 replicaof

(1)redis_master的配置

1)redis.conf配置

#如果想指定限制访问,可设置对应的ip
 bind 192.168.225.200
#配置端口
 port 6379
 timeout 0
 tcp-keepalive 300
#设置为后台启动
 daemonize yes
#redis pid存储位置,加上端口是便于区分
 pidfile /var/run/redis_6379.pid
 loglevel notice
#日志文件
 logfile “/usr/local/redis/redis_master/redis-5.0.7/log/redis_6379.log”
 databases 16
 dbfilename dump6379.rdb
#存放备份文件以及日志等文件的目录
 dir /usr/local/redis/redis_master/redis-5.0.7/data
#slave服务连接 master的密码
 masterauth qazwsx
 slave-serve-stale-data no
 slave-read-only yes
 repl-diskless-sync yes
 repl-diskless-sync-delay 5
 repl-ping-slave-period 10
 repl-timeout 60
 repl-disable-tcp-nodelay no
#redis 连接密码
 requirepass qazwsx

2)sentinel.conf配置

bind 192.168.225.200
#关闭保护模式,可以外部访问
 protected-mode no
#默认端口为26379
 port 26379
#设置为后台启动
 daemonize yes
#redis sentinel pid文件位置
 pidfile “/var/run/redis-sentinel.pid”
#日志文件
 logfile “/usr/local/redis/redis_master/redis-5.0.7/log/sentinel.log”
 dir “/usr/local/redis/redis_master/redis-5.0.7”
 sentinel deny-scripts-reconfig yes
#30秒ping不通主节点的信息,主观认为master宕机
 sentinel down-after-milliseconds mymaster 3000
#监控的IP 端口号,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换,此处为至少2个
 sentinel monitor mymaster 192.168.225.200 6379 2
#当在Redis实例中开启了requirepass,这里就需要提供密码
 sentinel auth-pass mymaster qazwsx
 sentinel config-epoch mymaster 0
#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1,1表示串行,>1并行
 snetinel parallel-syncs mymaster 1
#故障转移开始,三分钟内没有完成,则认为转移失败
 sentinel failover-timeout mymaster 180000

(2)redis_slave1的配置

1)redis.conf配置

daemonize yes
 bind 192.168.225.200
 port 6380
 timeout 0
 tcp-keepalive 300
 pidfile /var/run/redis_6380.pid
 loglevel notice
 logfile “/usr/local/redis/redis_slave1/redis-5.0.7/log/redis_6380.log”
 databases 16
 dbfilename dump6380.rdb
 dir /usr/local/redis/redis_slave1/redis-5.0.7/data
 replicaof 192.168.225.200 6379
 masterauth qazwsx
 replica-serve-stale-data yes
 replica-read-only yes
 repl-diskless-sync yes
 repl-diskless-sync-delay 5
 repl-disable-tcp-nodelay no
 replica-priority 100
 requirepass qazwsx

2)sentinel.conf配置

bind 192.168.225.200
 protected-mode no
 port 26380
 daemonize yes
 pidfile “/var/run/redis-sentinel.pid”
 logfile “/usr/local/redis/redis_slave1/redis-5.0.7/log/sentinel.log”
 dir “/usr/local/redis/redis_slave1/redis-5.0.7”
 sentinel deny-scripts-reconfig yes
 sentinel monitor mymaster 192.168.225.200 6379 2
 sentinel auth-pass mymaster qazwsx
 sentinel config-epoch mymaster 0
 sentinel leader-epoch mymaster 0
 sentinel failover-timeout mymaster 180000
 snetinel parallel-syncs mymaster 1

(2)redis_slave2的配置

1)redis.conf配置

daemonize yes
 bind 192.168.225.200
 port 6381
 timeout 0
 tcp-keepalive 300
 pidfile /var/run/redis_6381.pid
 loglevel notice
 logfile “/usr/local/redis/redis_slave2/redis-5.0.7/log/redis_6381.log”
 databases 16
 dbfilename dump6381.rdb
 dir /usr/local/redis/redis_slave2/redis-5.0.7/data
 replicaof 192.168.225.200 6379
 masterauth qazwsx
 replica-serve-stale-data yes
 replica-read-only yes
 repl-diskless-sync yes
 repl-diskless-sync-delay 5
 repl-disable-tcp-nodelay no
 replica-priority 100
 requirepass qazwsx

2)sentinel.conf配置

bind 192.168.225.200
 protected-mode no
 port 26381
 daemonize yes
 pidfile “/var/run/redis-sentinel.pid”
 logfile “/usr/local/redis/redis_slave2/redis-5.0.7/log/sentinel.log”
 dir “/usr/local/redis/redis_slave2/redis-5.0.7”
 sentinel deny-scripts-reconfig yes
 sentinel monitor mymaster 192.168.225.200 6379 2
 sentinel auth-pass mymaster qazwsx
 sentinel config-epoch mymaster 0
 sentinel leader-epoch mymaster 0
 sentinel failover-timeout mymaster 180000
 snetinel parallel-syncs mymaster 1

5.启动redis_master,redis_slave1,redis_slave2。启动顺序主-从-哨兵。

分别进入redis_master,redis_slave1,redis_slave2的redis-5.0.7目录下。

(1)启动主从

./src/redis-server ./redis.conf

(2)启动哨兵

./src/redis-sentinel ./sentinel.conf

通过ps -ef|grep redis查看redis进程,如下图:

linux安装redis6.2.1 linux安装redis哨兵模式_linux安装redis6.2.1_03


6.验证效果。

(1)验证主从数据是否同步。由于设置了密码,所以要先auth qazwsx,如下图:

linux安装redis6.2.1 linux安装redis哨兵模式_linux安装redis6.2.1_04


1)通过redis-cli -h 192.168.225.200 -c -p 6379,在主上写入数据,如下:

192.168.225.200:6379> auth qazwsx
OK
192.168.225.200:6379> keys *
(empty list or set)
192.168.225.200:6379> set k1 123
OK
192.168.225.200:6379> set k2 456
OK
192.168.225.200:6379> get k1
"123"
192.168.225.200:6379> get k2
"456"
192.168.225.200:6379>

2)进入从1,redis-cli -h 192.168.225.200 -c -p 6380,查看数据是否同步,如下:

192.168.225.200:6380> auth qazwsx
OK
192.168.225.200:6380> keys *
1) "k1"
2) "k2"
192.168.225.200:6380> get k1
"123"
192.168.225.200:6380> get k2
"456"
192.168.225.200:6380>

3)进入从2,redis-cli -h 192.168.225.200 -c -p 6381,查看数据是否同步,如下:

192.168.225.200:6381> auth qazwsx
OK
192.168.225.200:6381> keys *
1) "k2"
2) "k1"
192.168.225.200:6381> get k1
"123"
192.168.225.200:6381> get k2
"456"
192.168.225.200:6381>

通过info replication可以查看他们的角色,如下:

linux安装redis6.2.1 linux安装redis哨兵模式_数据_05


linux安装redis6.2.1 linux安装redis哨兵模式_redis_06


linux安装redis6.2.1 linux安装redis哨兵模式_IP_07

(2)验证哨兵。

停止redis_master上的redis,kill -9 杀掉端口号为6379的redis进程,6380端口的role会由slave变为master,而且redis.conf文件的replicaof 属性会发生变化,会由之前的6379变化为6380,如下图:

1)redis.conf文件

linux安装redis6.2.1 linux安装redis哨兵模式_redis_08


linux安装redis6.2.1 linux安装redis哨兵模式_redis_09


2)6380端口的role会由slave变为master

linux安装redis6.2.1 linux安装redis哨兵模式_redis_10