Redis 搭建 keepalived 双活b
keepalived 介绍
- keepalived 是集群管理中常用的高可用服务软件,用来解决单点故障
- 什么是单点故障?
当服务是单节点或者不具备主从切换能力的集群,主节点宕时,整个服务不可用,称为单点故障
- 常见的单点故障解决方案
基于 DNS,一主机名多 IP,DNS 服务自带负载均衡,并且一般任务 DNS 服务是高可用的
使用 keepalived,配置虚拟 IP,监控节点状态,在必要时将虚拟 IP 漂移到备用节点
- keepalived 基本原理
VRRP,虚拟链路冗余协议,在网络设计中用来做线路冗余、设备冗余等,防止网络存在单点故障
keepalived 基于 VRRP 协议,将服务器当作路由设备,通过虚拟 IP 的漂移来达到高可用的目的
Redis 主从复制
- 什么是 Redis 主从复制?
主从复制是一种由主节点向从节点同步数据的功能,Redis 的主从复制是单向的,只能由主到从
主从复制的作用是提供数据的冗余备份,这正是高可用的基础
使用 replicaof(5.0 之前 slaveof) 命令形成主从关系即可开启主从复制
- 主从复制原理
全量复制
主从刚建立连接时,主库将所有数据生成 RDB 文件,发给从库进行同步,然后再把生成 RDB 过程中产生的修改发给从库
增量复制
Redis 2.8 开始支持增量复制,主要是为了解决网络闪断造成全量复制,开销很大的问题
增量复制的原理是断开的一段时间内,主库保持一个记录主从差异数据的缓冲区
- 为什么使用 RDB 进行数据同步的传输?
RDB 是定时或需要全量复制时生成的快照,是经过压缩的二进制文件,体积小,恢复快
相比之下 AOF 记录了每次执行的命令,有许多冗余命令,体积大,浪费带宽,并且需要选择刷盘策略,选择不当可能会影响性能
Redis 高可用方案
- Redis 哨兵模式
Redis 主从复制保证了数据冗余备份,但当集群的主节点宕掉,整个集群将无法提供服务
Redis 哨兵机制提供了集群监控的能力,在主节点宕掉时通过选举产生新主,并完成集群主从角色的切换
- Redis keepalived 双活
Redis 哨兵节点至少需要三台以上节点,因为哨兵节点也需要做高可用
当只有两台机器用于部署 Redis 集群时,可以利用 keepalived 进行节点的监控和主从的切换,在资源有限的项目中不失为一个良好的高可用方案
环境准备与安装
使用 docker centos 镜像,启动两个容器,安装 Redis 和 keepalived 等软件,模拟两个 Redis 节点的集群
- 节点 IP 和端口规划
- 启动两个节点
拉取 centos 镜像
启动两个 centos 容器
查看容器 IP
进入容器
- 安装常用软件
更新软件库
安装 net-tools,提供 ifconfig 命令
安装 initscripts,提供 service 命令
docker 的 centos 镜像内部可能缺少一些常用命令,必要时自行安装
- 安装 Redis 并启动
安装 EPEL 软件库
安装 Redis
修改 Redis 配置文件
主节点 centos_1
从节点 centos_2
启动两个节点上的 Redis
主节点添加一条测试数据
从节点查看数据是否同步
- 安装 keepalived
配置 keepalived
- keepalived 配置的基本结构
- keeplaived Redis 主从切换配置
172.18.0.4 主节点初始状态设置为 MASTER,priority 为 100
172.18.0.5 从节点初始状态设置为 BACKUP,priority 为 90
当 .4 主节点 Redis 服务不可用时,优先级降低,VIP 漂移到 .5 上,但是当 .4 服务重新上线后,会抢走 MASTER 身份,造成不必要的主从切换,可以将 .4 配置为 nopreempt(非抢占模式)来避免
如果 .4 配置为非抢占,将不会为 priority 所动,只有 .5 上 keepalived 服务宕掉,VIP 才会漂移到 .4
keepalived 的配置文件要求很严格,避免多余的空格,缩进须使用 Tab
eth0是网卡,有些是eth33,可以通过ifconfig命令进行查看;
priority 是用来标记主从服务器的,priority 101表示主服务器,priority 100表示从服务器;
virtual_ipaddress表示虚拟ip的地址
- 相关脚本
redis_check.sh
redis_master.sh
redis_slave.sh
redis_falut.sh
redis_stop.sh
验证双活
- 测试 Redis 主从复制
- 启动 keepalived
也可以直接运行 keepalive 可执行文件
- 测试故障转移
通过 Redis cli 连接虚拟 IP,可以正常执行命令
kill 掉主节点的 Redis 进程
观察主节点 keepalived 日志
直连原来的从节点测试写入
172.18.0.5 上可以执行写入命令,说明该节点已经成功切换为主节点
Loading...