Linux下编译安装-哨兵模式
哨兵sentinel模式
sentinel相当于是一个投票者或者哨兵,它时刻监视着redis集群的各个服务器,当主master挂了之后,它将进行投票进行新master的选举。下图
Sentinel的工作方式
每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。
如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态。
当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有Master,Slave发送 INFO 命令
当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次
若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。
若 Master 重新向 Sentinel 的 PING 命令返回有效回复, Master 的主观下线状态就会被移除。
主观下线和客观下线
主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。
客观下线(Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断。
客观下线条件只适用于主服务器: 对于任何其他类型的 Redis 实例, Sentinel 在将它们判断为下线前不需要进行协商, 所以从服务器或者其他 Sentinel 永远不会达到客观下线条件。
只要一个 Sentinel 发现某个主服务器进入了客观下线状态, 这个 Sentinel 就可能会被其他 Sentinel 推选出, 并对失效的主服务器执行自动故障迁移操作。
环境介绍
安装环境
节点 IP OS Redis版本
Node1 192.168.2.1 CentOS release 6.5 (Final) redis-4.0.14
Node2 192.168.2.2 CentOS release 6.5 (Final) redis-4.0.14
Node3 192.168.2.3 CentOS release 6.5 (Final) redis-4.0.14
预装系统依赖包 -- 三个主机节点都需要安装
dart
yum -y install gcc-c++
yum -y install tcl
安装Redis
配置node1
上传Redis安装介质到 node1 节点,编译安装redis
dart
tar -zxvf redis-4.0.14.tar.gz -C /tdx
cd /tdx/redis-4.0.14
make && make install
mkdir log && mkdir run
vi /tdx/redis-4.0.14/redis.conf
bind 0.0.0.0
port 6379
daemonize yes
pidfile /tdx/redis-4.0.14/run/redis.pid
logfile "tdx/redis-4.0.14/log/redis.log"
vi /tdx/redis-4.0.14/sentinel.conf
bind 192.168.2.1 127.0.0.1
port 26379
sentinel monitor mymaster 192.168.2.1 6379 2
daemonize yes
配置node2
上传Redis安装介质到 node1 节点,编译安装redis
dart
tar -zxvf redis-4.0.14.tar.gz -C /tdx
cd /tdx/redis-4.0.14
make && make install
mkdir log && mkdir run
vi tdx/redis-4.0.14/redis.conf
bind 0.0.0.0
port 6379
daemonize yes
pidfile /tdx/redis-4.0.14/run/redis_16379.pid
logfile "tdx/redis-4.0.14/log/redis.log"
slaveof 192.168.2.1 6379
vi tdx/redis-4.0.14/sentinel.conf
bind 127.0.0.1 192.168.2.2 127.0.0.1
port 26379
sentinel monitor mymaster 192.168.2.1 6379 2
daemonize yes
配置node3
上传Redis安装介质到 node1 节点,编译安装redis
dart
tar -zxvf redis-4.0.14.tar.gz -C /tdx
cd /tdx/redis-4.0.14
make && make install
mkdir log && mkdir run
vi /tdx/redis-4.0.14/redis.conf
bind 0.0.0.0
port 6379
daemonize yes
pidfile /tdx/redis-4.0.14/run/redis_16379.pid
logfile "tdx/redis-4.0.14/log/redis.log"
slaveof 192.168.2.1 6379
vi /tdx/redis-4.0.14/sentinel.conf
bind 192.168.2.3 127.0.0.1
port 26379
sentinel monitor mymaster 192.168.2.1 6379 2
daemonize yes
配置防火墙
dart
firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --permanent --add-port=26379/tcp
firewall-cmd --reload
启动服务
三个节点分别执行
dart
cd /tdx/redis-4.0.14
src/redis-server redis.conf && src/redis-sentinel sentinel.conf
查看状态
三个节点分别执行
dart
cd /tdx/redis-4.0.14
src/redis-cli -h 127.0.0.1 -p 6379 info Replication
src/redis-cli -h 127.0.0.1 -p 6379 info Replication
src/redis-cli -h 127.0.0.1 -p 6379 info Replication
查看进程
dart
ps aux | grep redis
清空日志
dart
truncate -s 0 redis.log