Redis哨兵模式部署
主机宕机
将宕机的master下线
找一个slave作为master
通知所有的slave连接新的master
启动新的master与slave
全量复制*N+部分复制*N
哨兵
哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控。当初夏故障通过投票机制选择新的master并将所有的slave连接到新的master
哨兵的作用
1.监控
- 不断的检查master和slave是否正常进行
- master存活检测,master与slave运行情况检查
2.通知(提醒)
- 当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知)
3.自动故障转移
- 断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址
注意:
- 哨兵也是一台redis服务器,只是不提供数据服务
- 通常哨兵配置数量为单数
启动哨兵模式
配置哨兵
- 配置一拖二的主从结构
- 配置三个哨兵(配置相同,端口不同)
- sentinel.conf
- 启动哨兵
redis-sentinel sentinel-端口号.conf
[root@kafka01 redis]# egrep -v "^#|^$" sentinel.conf port 26379 // daemonize no pidfile /var/run/redis-sentinel.pid logfile "" dir /tmp sentinel monitor mymaster 127.0.0.1 6379 2 //监控的主 2是几个哨兵认定master挂了 sentinel down-after-milliseconds mymaster 30000 毫秒单位(30s)//主连接多长时间没响应就认定挂了 sentinel parallel-syncs mymaster 1 //新的maste上任,开始同步一次有多个开始同步,越小服务器压力越小 sentinel failover-timeout mymaster 180000 //在进行同步多长时间超时 毫秒单位(180s) sentinel deny-scripts-reconfig yes
port 26379
- # 哨兵sentinel实例运行的端口 默认26379 port 26379
dir ./
- # 哨兵sentinel的工作目录
sentinel monitor mymaster 127.0.0.1 6379 2
- # 哨兵sentinel监控的redis主节点的 ip port 10
- # master-name 可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。 11
- # quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
- # sentinel monitor <master-name> <ip> <redis-port> <quorum> 13
- sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
- # 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
- # sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel parallel-syncs mymaster 1
- # 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步, 这个数字越小,完成failover所需的时间就越长, 但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。
- 可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
- # sentinel parallel-syncs <master-name> <numslaves>
sentinel failover-timeout mymaster 180000
- # 故障转移的超时时间 failover-timeout 可以用在以下这些方面:
- #1. 同一个sentinel对同一个master两次failover之间的间隔时间。
- #2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
- #3.当想要取消一个正在进行的failover所需要的时间。
- #4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
- # 默认三分钟 # sentinel failover-timeout <master-name> <milliseconds>
[root@kafka01 redis]# mkdir -p conf
[root@kafka01 redis]# egrep -v "^#|^$" sentinel.conf >./conf/sentinel-26379.conf
Redis集群规划
服务器名称 | 节点类型 | IP地址 | 端口 |
kafka01 | Redis服务1(主节点Master) | 192.168.1.8 | 7000 |
kfaka02 | Redis服务2(从节点slave1) | 192.168.1.9 | 7001 |
kafka03 | Redis服务3(从节点slave2) | 192.168.1.10 | 7002 |
Sentinel01 | 哨兵服务1 | 192.168.1.8 | 26379 |
Sentinel02 | 哨兵服务2 | 192.168.1.9 | 26380 |
Sentinel03 | 哨兵服务3 | 192.168.1.10 | 26381 |
搭建主从模式
主服务器(上图的Node1)配置文件 redis.config 主要配置项:详情请看Redis6-redis.conf配置文件说明
[root@kafka01 redis]# egrep -v "^#|^$" redis.conf > redis-6379.conf
初始化环境
echo '511' > /proc/sys/net/core/somaxconn
echo 1 > /proc/sys/vm/overcommit_memory
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
Redis配置
master
建立安装Redis时会用到的文件夹
[root@kafka01 redis]# mkdir -p /usr/local/redis/7000/{run,logs,data,conf}
设置redis配置文件
[root@kafka01 redis]# egrep -v "^#|^$" redis.conf > 7000/conf/redis_7000.conf
打开redis_7000.conf文件,添加/修改以下内容:
[root@kafka01 redis]# vim 7000/conf/redis_7000.conf
bind 192.168.1.8 #添加本机的ip port 7000 #端口 pidfile /usr/local/redis/7000/run/redis_7000.pid #pid存储目录 logfile /usr/local/redis/7000/logs/redis_7000.log #日志存储目录 dir /usr/local/redis/7000/data #数据存储目录,目录要提前创建好 protected-mode no #外部网络直接访问 requirepass 12345678 #从哨兵连接主的密码 masterauth 12345678 #master的密码,和哨兵密码一致 appendonly yes #持久化 daemonize yes #守护进程
修改sentinel.conf
[root@kafka01 redis]# egrep -v "^#|^$" sentinel.conf > 7000/conf/sentinel_7000.conf
port 26379 daemonize yes protected-mode no pidfile /usr/local/redis/7000/run/sentinel_7000.pid logfile /usr/local/redis/7000/logs/sentinel_7000.log dir /usr/local/redis/7000/data sentinel monitor mymaster 192.168.1.8 7000 2 #守护主节点 sentinel auth-pass mymaster 12345678 #连接主节点的密码 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes
设置192.168.1.9从节点
redis.conf添加
bind 192.168.1.9 #添加本机的ip port 7001 #端口 pidfile /usr/local/redis/7001/run/redis_7001.pid #pid存储目录 logfile /usr/local/redis/7001/logs/redis_7001.log #日志存储目录 dir /usr/local/redis/7001/data #数据存储目录,目录要提前创建好 protected-mode no #外部网络直接访问 requirepass 12345678 #从哨兵连接主的密码 masterauth 12345678 #slave连接master的密码 appendonly yes #持久化 daemonize yes #守护进程 slaveof 192.168.1.8 7000 #从节点 slave-read-only yes #从节点只读不写入
修改sentinel.conf
port 26380 daemonize yes protected-mode no pidfile /usr/local/redis/7001/run/sentinel_7001.pid logfile /usr/local/redis/7001/logs/sentinel_7001.logs dir /usr/local/redis/7001/data sentinel monitor mymaster 192.168.1.8 7000 2 #守护主节点 sentinel auth-pass mymaster 12345678 #连接主节点的密码 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes
设置192.168.1.10从节点
redis.conf添加
bind 192.168.1.10 #添加本机的ip port 7002 #端口 pidfile /usr/local/redis/7002/run/redis_7002.pid #pid存储目录 logfile /usr/local/redis/7002/logs/redis_7002.log #日志存储目录 dir /usr/local/redis/7002/data #数据存储目录,目录要提前创建好 protected-mode no #外部网络直接访问 requirepass 12345678 #从哨兵连接主的密码 masterauth 12345678 #slave连接master的密码 appendonly yes #持久化 daemonize yes #守护进程 slaveof 192.168.1.8 7000 #从节点 slave-read-only yes #从节点只读不写入
修改sentinel.conf
port 26381 daemonize yes protected-mode no pidfile /usr/local/redis/7002/run/sentinel_7002.pid logfile /usr/local/redis/7002/logs/sentinel_7002.log dir /usr/local/redis/7002/data sentinel monitor mymaster 192.168.1.8 7000 2 #守护主节点 sentinel auth-pass mymaster 12345678 #连接主节点的密码 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes
启动主节点
[root@kafka01 redis]# ./bin/redis-server ./7000/conf/redis_7000.conf
启动从节点
[root@kafka02 redis]# ./bin/redis-server ./7001/conf/redis_7001.conf
[root@kafka03 redis]# ./bin/redis-server ./7002/conf/redis_7002.conf
启动主节点哨兵
[root@kafka01 redis]# ./bin/redis-sentinel ./7000/conf/sentinel_7000.conf
启动从节点哨兵
[root@kafka02 redis]# ./bin/redis-sentinel ./7001/conf/sentinel_7001.conf
[root@kafka03 redis]# ./bin/redis-sentinel ./7002/conf/sentinel_7002.conf
连接节点查看配置
master
[root@kafka01 redis]# redis-cli -h 192.168.1.8 -p 7000 -a 12345678
slave1
[root@kafka02 redis]# redis-cli -h 192.168.1.9 -p 7001 -a 12345678
slave2
[root@kafka03 redis]# redis-cli -h 192.168.1.10 -p 7002 -a 12345678
停止master测试哨兵
[root@kafka01 redis]# ps -ef|grep redis root 37200 1 0 16:59 ? 00:00:02 ./bin/redis-server 192.168.1.8:7000 root 37233 1 0 17:03 ? 00:00:01 ./bin/redis-sentinel *:26379 [sentinel] root 37259 36496 0 17:19 pts/1 00:00:00 grep --color=auto redis [root@kafka01 redis]# kill -9 37200 [root@kafka01 redis]# ps -ef|grep redis root 37233 1 0 17:03 ? 00:00:01 ./bin/redis-sentinel *:26379 [sentinel] root 37267 36496 0 17:20 pts/1 00:00:00 grep --color=auto redis
查看从节点是否成为master,192.168.1.9已经成为了master
继续阅读

我的微信
这是我的微信扫一扫
评论