源码包redis5.0哨兵模式+vip安装、cluster模式集群模式
哨兵模式+vip
特点
- 当master挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置 文件,其他slave的配置文件也会被修改,比如replicaof属性会指向新的master
- 当master重新启动后,它将不再是master而是做为slave接收新的master的同步数 据
- sentinel因为也是一个进程有挂掉的可能,所以sentinel也会启动多个形成一个 sentinel集群
- 多sentinel配置的时候,sentinel之间也会自动监控
- 当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中
工作机制:
- 每个sentinel以每秒钟一次的频率向它所知的master,slave以及其他sentinel实例发 送一个 PING 命令
- 如果一个实例距离最后一次有效回复 PING 命令的时间超过
down-after-milliseconds 选项所指定的值,则这个实例会被sentinel标记为主观下 线。 - 如果一个master被标记为主观下线,则正在监视这个master的所有sentinel要以每 秒一次的频率确认master的确进入了主观下线状态
- 当有足够数量的sentinel(大于等于配置文件指定的值)在指定的时间范围内确认 master的确进入了主观下线状态, 则master会被标记为客观下线
- 在一般情况下, 每个sentinel会以每 10 秒一次的频率向它已知的所有master,slave 发送 INFO 命令
- 当master被sentinel标记为客观下线时,sentinel向下线的master的所有slave发送 INFO 命令的频率会从 10 秒一次改为 1 秒一次
- 若没有足够数量的sentinel同意master已经下线,master的客观下线状态就会被移 除;若master重新向sentinel的 PING 命令返回有效回复,master的主观下线状态就会被移除
主从从搭建(请看上一篇文章)
修改sentinel配置文件
vim /data/redis-5.0.12/sentinel.conf
port 26379
# 保护模式修改为否,允许远程连接
protected-mode no
#设置为后台启动。
daemonize yes
#日志文件。
logfile "/data/redis-5.0.12/logs/sentinel.log"
#数据路径
dir /data/redis-5.0.12/data/sentinel
# 设定监控地址,为对应的主redis库的内网地址
sentinel monitor mymaster 192.168.66.21 6379 2
#主数据库密码
sentinel auth-pass mymaster 123456
# 设定5秒内没有响应,说明服务器挂了
sentinel down-after-milliseconds mymaster 5000
# 设定15秒内master没有活起来,就重新选举主
sentinel failover-timeout mymaster 15000
#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1
sentinel parallel-syncs mymaster 1
#故障转移的超时时间,这里设置为三分钟
sentinel failover-timeout mymaster 180000
#设置vip漂移脚本
sentinel client-reconfig-script mymaster /data/redis-5.0.12/notify_master6800.sh
创建相关目录
mkdir /data/redis-5.0.12/data/sentinel
编写脚本
vim /data/redis-5.0.12/notify_master6800.sh
#!/bin/bash
#第六个参数是新主redis的ip地址
MASTER_IP=$6
#其他两个服务器上为192.168.56.102,192.168.56.103
LOCAL_IP='192.168.66.21'
VIP='192.168.66.100'
NETMASK='24'
INTERFACE='ens33:1'
if [ ${MASTER_IP} = ${LOCAL_IP} ];then
#将VIP绑定到该服务器上
/sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE}
/sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}
exit 0
else
#将VIP从该服务器上删除
/sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}
exit 0
fi
#如果返回1,sentinel会一直执行这个脚本
exit 1
chmod +x /data/redis-5.0.12/notify_master6800.sh
手动绑定VIP到主服务器上
/sbin/ip addr add 192.168.66.100/24 dev ens33:1
/sbin/arping -q -c 3 -A 192.168.66.100 -I ens33:1
启动三个哨兵
redis-sentinel /data/redis-5.0.12/sentinel.conf
netstat -tunpl | grep 26379
查看哨兵信息
redis-cli -p 26379
>info sentinel
故障演练
-
停止master
systemctl stop redis6379.service
-
从节点查看vip
ip addr | grep 100
-
查看每个节点状态
redis-cli -h 192.168.66.20 -p 6379 -a 123456 >info replication
-
查看每个节点配置文件
cat /data/redis-5.0.12/conf/6379.conf | grep replicaof cat /data/redis-5.0.12/sentinel.conf | grep 'sentinel monitor mymaster'
-
以vip连接
redis-cli -h 192.168.66.100 -p 6379 -a 123456 Vip完成漂移成功
-
启动刚停止的master
-
查看每个节点状态
redis-cli -h 192.168.66.20 -p 6379 -a 123456 >info replication
-
查看每个节点配置文件
cat /data/redis-5.0.12/conf/6379.conf | grep replicaof cat /data/redis-5.0.12/sentinel.conf | grep 'sentinel monitor mymaster'
-
故障的集群重启了加入了集群,变成node了
cluster模式
特点
- 多个redis节点网络互联,数据共享
- 所有的节点都是一主一从(也可以是一主多从),其中从不提供服务,仅作为备用
- 不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个 节点上,并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行 为
- 支持在线增加、删除节点
- 客户端可以连接任何一个主节点进行读写
工作机制:
- 每个sentinel以每秒钟一次的频率向它所知的master,slave以及其他sentinel实例发 送一个 PING 命令
- 如果一个实例距离最后一次有效回复 PING 命令的时间超过
down-after-milliseconds 选项所指定的值,则这个实例会被sentinel标记为主观下 线。 - 如果一个master被标记为主观下线,则正在监视这个master的所有sentinel要以每 秒一次的频率确认master的确进入了主观下线状态
- 当有足够数量的sentinel(大于等于配置文件指定的值)在指定的时间范围内确认 master的确进入了主观下线状态, 则master会被标记为客观下线
- 在一般情况下, 每个sentinel会以每 10 秒一次的频率向它已知的所有master,slave 发送 INFO 命令
- 当master被sentinel标记为客观下线时,sentinel向下线的master的所有slave发送 INFO 命令的频率会从 10 秒一次改为 1 秒一次
- 若没有足够数量的sentinel同意master已经下线,master的客观下线状态就会被移除;若master重新向sentinel的 PING 命令返回有效回复,master的主观下线状就会被移除
节点
-
编译安装(请看上一篇文章)
-
修改配置文件
vim /data/redis-5.0.12/conf/6379.conf
port 6379 bind 0.0.0.0 protected-mode yes daemonize yes databases 16 logfile "/data/redis-5.0.12/logs/redis_6379.log" dir /data/redis-5.0.12/data/6379 #在redis目录生成appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof 文件中 appendonly yes #开启集群 cluster-enabled yes #集群的配置文件 nodes_{port}.conf的形式 cluster-config-file nodes_6379.conf #超时时间 5s够了 cluster-node-timeout 5000 requirepass 123456 masterauth 123456 maxclients 10000 maxmemory <bytes> maxmemory-samples 5 maxmemory-policy 策略
-
配置服务启动文件
vim /usr/lib/systemd/system/redis6379.service
[Unit] Description=redis After=network.target [Service] ExecStart=/etc/init.d/redis_6379 start ExecStop=/etc/init.d/redis_6379 stop Type=forking [Install] WantedBy=multi-user.target
vim /etc/init.d/redis_6379
$CLIEXEC -h IP地址 -p 端口 -a 密码 shutdown
systemctl daemon-reload ps -ef | grep redis kill -9 21739 rm -rf /var/run/redis_6379.pid systemctl restart redis6379.service systemctl enable redis6379.service
-
查看服务状态
/etc/init.d/redis_6379 status netstat -antupl |grep :6379 ps -C redis-server
-
访问服务
redis-cli -h 192.168.66.20 -p 6379 -a 123456
创建集群
redis-cli -a 123456 --cluster create 192.168.66.24:6379 192.168.66.25:6379 192.168.66.26:6379 192.168.66.27:6379 192.168.66.28:6379 192.168.66.29:6379 --cluster-replicas 1
redis-cli -c -h 192.168.66.24 -p 6379 -a 123456 #-c使用集群的方式登入
检查集群信息
> CLUSTER INFO
#列出节点信息
> CLUSTER NODES
操作
-
增加节点
>CLUSTER MEET ip 6379 (新增的节点会以master加入)
将新增的从节点身份改为新主的slave
redis-cli -c -h 从ip -p 6379 -a 123456 cluster replicate 主id
列出节点信息
>CLUSTER NODES
-
删除节点
>CLUSTER FORGET节点id
保存配置
>CLUSTER SAVECONFIG
-
列出节点信息
>CLUSTER NODES
喜欢的亲可以关注点赞评论哦!以后每天都会更新的哦!本文为小编原创文章;
文章中用到的文件、安装包等可以加小编联系方式获得;
欢迎来交流小编联系方式VX:CXKLittleBrother
进入运维交流群