介绍
搭建一个分布式主从集群,机器有限,设置不同端口,模拟分布式(伪分布式), 多台机器搭建方式一样的。增加哨兵配置,提高系统高可用
环境
机器 | 服务 |
---|---|
192.168.116.131:6379 | master |
192.168.116.131:6380 | slave |
192.168.116.131:6381 | slave |
主从架构
主从通过 rdb 进行数据同步,
主从配置
# 任何ip都可以访问,可以指定
bind 0.0.0.0
# 访问密码
requirepass ikang
# 后台运行
daemonize yes
master配置
# 复制缓冲区的大小,默认关闭
# 缓存区的作用就是用于slave离线后的数据存放,缓冲区越大,slave离线时间就可以越长
# 缓冲区只有在有slave连接的时候才会分片内存,没有slave一段时间后内存就会被释放出来,默认是1m
repl-backlog-size 5mb
# master在没有slave多久后会将缓冲区释放,默认关闭,单位:秒
repl-backlog-ttl 3600
# master正常写入时salve 最少个数。默认为0, 关闭该功能
min-replicas-to-write 2
# 副本心跳延时,必须小于<=min-replicas-max-lag,认为可用。 默认关闭
min-replicas-max-lag 10
# master的访问密码
masterauth ikang
salve 配置
# master的ip和端口
replicaof 127.0.0.1 6379
# slave上要设置访问master的密码
masterauth ikang
# yes:主从复制中,从服务器可以响应客户端请求
# no:主从复制中,从服务器阻塞,有客户端请求时会返回:SYNC with master in progress
replica-serve-stale-data yes
# 节点只允许read,默认就是yes,只对slave 有效
replica-read-only yes
# slave根据指定时间间隔向master发送ping请求
repl-ping-replica-period 10
# 这是哨兵选举的权重,越小被选举的权重就越大
# 当这个值为0则不参数选举
# 默认开启,在slave上配置
replica-priority 100
启动
#进入安装目录,执行启动命令
redis-cli -p 6379 -a ikang
测试
-
数据写入、同步测试
-
主写入数据,同步到了从节点
-
只允许主节点写入
-
从节点挂掉
-
2个从节点干掉一个从节点后,主节点保存数据失败,主节点设置
min-replicas-to-write
值为2,至少有两个从,才能正常写入。启动6380后,服务恢复。
小结
以上是主从节点搭建,测试
redis 作为一个集群使用,从从节点挂点后,符合最小集群配置,服务正常启动,如果主节点挂掉后,从从节点又是只读,会导致整个服务不可用,为了避免这种这种情况发生,集群必须是高可用并且有自愈功能 为了满足高可用、自愈需要用到哨兵
Sentinel(哨兵)
哨兵作用
- 集群监控:可以监控Redis Master和Slave进程是否正常工作
- 消息通知:如果redis发生故障,哨兵可以发送消息给到系统管理员
- 故障转移:如果Master挂了,哨兵可以将Master自动转移到其中一台Slave Node上
- 配置中心:如果故障转移发生了,通知client客户端新的master地址
为了搭建哨兵,又装了一个机器,在一台机器上也可以。
环境
机器 | 服务 |
---|---|
192.168.116.131:6379 | master |
192.168.116.131:6380 | slave |
192.168.116.131:6381 | slave |
192.168.116.132:26379 | sentinel |
192.168.116.132:26380 | sentinel |
192.168.116.132:26381 | sentinel |
哨兵配置
redis安装目录下有哨兵配置sentinel.conf
# 关闭默认的专用IP保护
protected-mode no
port 26379
daemonize yes
# 修改路径文件
pidfile /var/run/redis-sentinel-26379.pid
logfile /usr/local/sentinel-26379/redis-sentinel.log
dir /usr/local/sentinel-26379
# mymaster监控集群名,随意起名
# 最后一个2(quorum)是指当>=2个哨兵主观认为master下线后(最后这个值一般>哨兵总数的一半),master才会被客观下线,这时sentinel会从slave中选举一个节点来做master
sentinel monitor mymaster 127.0.0.1 6379 2
# 设置哨兵访问主机的密码
sentinel auth-pass mymaster ikang
# 哨兵认为多久无法连接的时长配置,超过这个时间如果无法连接上就主观下线
sentinel down-after-milliseconds mymaster 3000
# 新的slave成为maser后,其他的的slave要改变master的所属关系,这个1就是改变后重新同步master的并行数量
# slave在同步master数据时不能处理外部请求
sentinel parallel-syncs mymaster 1
# 原master再次被选为新master的时间间隔, 单位:ms
sentinel failover-timeout mymaster 180000
# 启动sentinel哨兵
redis-sentinel sentinel.conf
查看哨兵配置
# 查看集群master
sentinel master mymaster
# 查看集群slave
sentinel slaves mymaster
# 查看sentinel的信息
sentinel sentinels mymaster
干掉master
- 主节点被干掉后,哨兵主动从从节点中选择一个节点为主节点
原理
- 哨兵选主,再sentinel.conf 文件中记录了主从配置
- redis的配置文件中,哨兵通过
config
命令在从节点,追加replicaof
配置,主节点没有该配置。
总结
redis 的主从高可用高可用集群搭建完成,redis 本身是没有自愈功能,必须借助哨兵,进行故障转移