在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
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
(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进程,如下图:
6.验证效果。
(1)验证主从数据是否同步。由于设置了密码,所以要先auth qazwsx
,如下图:
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
可以查看他们的角色,如下:
(2)验证哨兵。
停止redis_master上的redis,kill -9 杀掉端口号为6379的redis进程,6380端口的role会由slave变为master,而且redis.conf文件的replicaof 属性会发生变化,会由之前的6379变化为6380,如下图:
1)redis.conf文件
2)6380端口的role会由slave变为master