天天看点

【Redis主从架构】搭建经典的3节点哨兵集群

1. 哨兵配置文件

位于redis解压根目录下:sentinel.conf
【Redis主从架构】搭建经典的3节点哨兵集群
  • 最小配置

每一个哨兵都可以去监控多个master-slaves的主从架构

因为生产环境一般会部署多个master-slaves的redis主从集群

相同的一套哨兵集群,可以去监控不同的多个redis主从集群。

你可以给每个redis主从集群分配一个逻辑的名称:

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

           

1.1 sentinel monitor mymaster 192.168.0.102 6379 2

指定一个master的监控,给监控的master指定一个名称,指定监控的IP地址和端口号,2表示qronum。
  • quorum详解:
  1. 至少需要quorum个哨兵一致同意,master进程挂掉了,获取slave进程挂掉了,获取要启动一个故障转移操作。
  2. quorum是用来识别故障的,真正执行故障转移的时候,还要在哨兵集群执行选举,选举一个哨兵进程出来进行故障转移操作。
  3. 假如有5个哨兵,quorum设置了2,那么5个哨兵中的2个都认为master挂掉了,master才会认为是odown了。就会从2个哨兵中的选举一个哨兵,来执行故障转移。如果5个哨兵中有3个哨兵都是运行的,那么故障转移就会别允许执行。

1.2 sentinel down-after-milliseconds

超过多少毫秒跟一个redis实例端口了连接,哨兵就可能认为redis实例挂掉了。

1.3 sentinel failover-timeout

执行故障转移的timeout的超时时长,如果限定时长内没有完成故障转移,就会认为执行故障转移失败,就从剩下的哨兵选择一个哨兵从新执行故障转移。

1.4 sentinel parallel-syncs

新的master切换之后,允许同时有多少个slave被切换到去连接新的master,重新做同步,数字越低,花费的事件就越高。
假如你的redis是1个master,4个slave
然后你的master宕机了,4个salve中有一个切换成了master,剩下3个slave就要挂到新的master上去。
这个时候,如果parallel-syncs是1,那么3个slave,会一个接一个挂到新的master上面去,一个挂完后,而且从新的master sync完数据之后,再挂接下一个。
如果parallel-syncs是3,那么一次性就会把所有的slave挂接到新的master上去。

2. 安装一主二从的redis主从架构

eshop-cache01,eshop-cache02,eshop-cache03上安装redis,并启动。

# 安装tcl
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar -xzvf tcl8.6.1-src.tar.gz
cd  /usr/local/tcl8.6.1/unix/
./configure  
make && make install

# 安装redis
tar -zxvf redis-3.2.8.tar.gz
cd redis-3.2.8
make && make test
make install
           

3. 搭建经典三个节点的哨兵集群

哨兵默认是用26279端口,默认不能跟其他集群在指定端口联通,只能在本地访问
mkdir /etc/sentinal

mkdir -p /var/sentinal/5000/log

# 编辑etc/sentinel/5000.conf
cp sentinal.conf 5000.conf

vi 5000.conf

           
  • 配置sentinal
# redis绑定端口
port 5000
# redis绑定ip
bind 192.168.31.187
# redis绑定缓存存储目录
dir /var/sentinal/5000
# 哨兵绑定端口,ip,设置quorum
sentinel monitor mymaster 192.168.0.102 6379 2
# 哨兵连接 master 超时时间
sentinel down-after-milliseconds mymaster 30000
# 哨兵设置 哨兵故障转移超时时间
sentinel failover-timeout mymaster 60000
# 哨兵设置 运行同时挂载到新master的slave数量
sentinel parallel-syncs mymaster 1
           

3.1 启动哨兵进程

eshop-cache01,eshop-cache02,eshop-cache03三个节点启动sentinal,并查看日志。
  • 启动sentinal命令
redis-sentinel /etc/sentinal/5000.conf
redis-server /etc/sentinal/5000.conf --sentinal
           

日志会显示出来,每个哨兵去监控对应的redis master,并且能够自动发现对应的slave。

哨兵之间,互相也会自动进行发现,用的就是pub/sub消息发布和订阅信息系统和机制

【Redis主从架构】搭建经典的3节点哨兵集群

3.2 检查哨兵转态

SENTINEL get-master-addr-by-name mymaster
           
  • 进入哨兵命令行
redis-cli -h 192.168.31.187 -p 5000
           
  • 查看sentinel是否搭建成功
info sentinel
           
【Redis主从架构】搭建经典的3节点哨兵集群

从图片中可以看到:redis的master节点有两个从节点,sentinel有三个节点。

  • 查看所有master的信息
sentinel master mymaster
           
【Redis主从架构】搭建经典的3节点哨兵集群
  • 查看所有slave的信息
SENTINEL slaves mymaster
           
【Redis主从架构】搭建经典的3节点哨兵集群
【Redis主从架构】搭建经典的3节点哨兵集群
  • 查看所有的哨兵信息
SENTINEL sentinels mymaster
           
【Redis主从架构】搭建经典的3节点哨兵集群
  • 根据master名称获取master地址信息
SENTINEL get-master-addr-by-name mymaster
           
【Redis主从架构】搭建经典的3节点哨兵集群

继续阅读