三台服务器部署redis主从及哨兵

Redis主从同步

当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致。同时slave上还可以开启二级slave,三级slave从库。 Redis主从配置非常简单,只需要在Redis从库配置中指定slaveof ip port 即可,IP表示指定主库的ip,port表示redis监听端口。

redis哨兵模式

redis主从虽然解决了单点导致的数据丢失问题,但是还是没有解决无缝的故障转移,也就是说在主库宕机后,从库无法自动切换为主库,需要手工去切换,在这一瞬间会对后端数据库造成极大的负载,可能直接导致后端数据宕机。

哨兵主要作用

监控:监控redis主库及从库运行状态;
通知:如果redis发生故障转移,可以通过邮件通知管理员;
自动故障转移:一旦发现主库宕机,则在从库中通过选举新的master进行故障转移。

工作原理

哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。
每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方宕机了,这种宕机称为”主观认为宕机” Subjective Down,简称sdown)。
若“哨兵群”中的多数sentinel,都报告某一master没响应,系统才认为该master真正宕机,即客观上认为宕机,Objective Down,简称odown),通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置

 

部署

master: 192.168.75.92
slave1: 192.168.75.91
slave2: 192.168.75.90

配置主从

# 配置master,开启网卡监听,(可选设置密码):
vim /usr/local/redis/6379/6379.conf
bind 0.0.0.0


# 配置slave1,指定master:
bind 0.0.0.0
replicaof 192.168.75.92 6379

# 配置slave2,指定master:
bind 0.0.0.0
replicaof 192.168.75.92 6379

# 启动master、slave1、slave2的redis服务:
systemctl restart redis_6379

查看主从状态

# 在master执行以下指令,均可查看同步信息:
[root@localhost bin]# ./redis-cli 
127.0.0.1:6379> role
1) "master"
2) (integer) 14
3) 1) 1) "192.168.75.91"
      2) "6379"
      3) "14"
   2) 1) "192.168.75.90"
      2) "6379"
      3) "14"
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.75.91,port=6379,state=online,offset=42,lag=1
slave1:ip=192.168.75.90,port=6379,state=online,offset=42,lag=1
master_replid:44aa80051a5aced8f9ba5b331ed1e864a6637a3d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:42
127.0.0.1:6379> 

配置哨兵

# master端配置sentinel:
[root@node5 ~]# cd /usr/src/redis-5.0.8
# 复制哨兵得配置文件:
[root@node5 redis-5.0.8]# cp sentinel.conf /usr/local/redis/
# 修改配置文件:
vim /usr/local/redis/sentinel.conf
# 绑定监听IP
bind 0.0.0.0
# 监听端口
port 26379
# 后台运行
daemonize yes
pidfile /var/run/redis-sentinel.pid
# 哨兵得日志文件
logfile "sentinel.log"
# 日志文件存放路径
dir /usr/local/redis/
# 设置初始master以及法定认为下线人数:
sentinel monitor mymaster 192.168.75.92 6379 2
# master主观下线时间,默认30秒,30秒内没有回复pong,则认为下线了
sentinel down-after-milliseconds mymaster 30000
# 指定在故障转移期间,多少个slave向新的master同步得数量,如果slave是提供查询服务,则应该设置小一点更好
sentinel parallel-syncs mymaster 1
# 指定故障转移超时时间,默认为3分钟
sentinel failover-timeout mymaster 180000
# 设置通知脚本,发生故障转移可以向管理员发送通知(可选)
sentinel notification-script mymaster /usr/local/redis/notify.sh
# 禁止修改脚本,避免脚本重置
sentinel deny-scripts-reconfig yes
---------------
# notify.sh脚本:
#!/bin/bash
# lutixia
#####################
TO="[email protected]"
SUBJECT="redis 发生故障转移"
CONTEXT="redis 发生故障转移"
echo -e $CONTEXT | mailx -s $SUBJECT $TO

------------------slave--------------------------
# slave端配置sentinel,把配置好的sentinel配置文件直接复制过去,不要把启动后的配置文件发过去了:
scp /usr/local/redis/sentinel.conf 192.168.75.91:/usr/local/redis/
scp /usr/local/redis/sentinel.conf 192.168.75.90:/usr/local/redis/

# 分别启动master,slave1,slave2的sentinel服务
cd /usr/local/redis/bin
./redis-sentinel /usr/local/redis/sentinel.conf

#主服务器关闭(192.168.75.92)

127.0.0.1:6379>SHUTDOWN

not connectd>

#查看哨兵日志

tailf /usr/local/redis/sentinel.log

我们可以查看从服务器的sentinel.log日志,发现master发生变化,192.168.75.91成为了master,和192.168.75.90成为了主从,数据不丢失.

重新启动192.168.75.92,此时92成为了91的slave

 

 

 

 

 

你可能感兴趣的:(redis,redis)