使用keepalived + Redis 实现双机热备
简介
在分布式系统中,实现高可用性是一个重要的课题。一种常见的方式是使用双机热备机制,即当主节点故障时,备节点可以快速接管主节点的工作。本文将介绍如何使用keepalived和Redis实现双机热备。
原理
Keepalived是一个基于VRRP协议的工具,可以实现高可用性的故障切换。VRRP(Virtual Router Redundancy Protocol)是一种用于实现默认网关冗余的协议,可以将多个路由器组成一个虚拟路由器,对外提供一个虚拟的IP地址,实现故障切换。而Redis是一个开源的内存数据库,支持主从复制。通过将Redis配置为主节点和备节点,可以实现数据的实时同步。
以下是简化的系统架构图:
sequenceDiagram
participant Client
participant Keepalived
participant RedisMaster
participant RedisSlave
Client ->> Keepalived: 请求
Keepalived ->> RedisMaster: 转发请求
RedisMaster ->> RedisSlave: 同步数据
RedisSlave -->> RedisMaster: 应答
RedisMaster -->> Keepalived: 应答
Keepalived -->> Client: 应答
配置
安装 keepalived
首先,需要在两台服务器上安装keepalived。假设服务器A的IP地址为192.168.0.1,服务器B的IP地址为192.168.0.2。在服务器A上执行以下命令:
$ sudo apt-get install keepalived
在服务器B上执行相同的命令。
配置 keepalived
在服务器A上创建并编辑 /etc/keepalived/keepalived.conf
文件:
$ sudo vi /etc/keepalived/keepalived.conf
在文件中添加以下内容:
vrrp_instance VI_1 {
state MASTER # 服务器A配置为主节点
interface eth0 # 网卡名称
virtual_router_id 51 # 虚拟路由器ID,取一个唯一的值
priority 100 # 优先级,主节点的优先级应该高于备节点
advert_int 1 # 广播间隔
authentication {
auth_type PASS
auth_pass password # 身份验证密码
}
virtual_ipaddress {
192.168.0.100/24 # 虚拟IP地址
}
}
在服务器B上创建并编辑 /etc/keepalived/keepalived.conf
文件,内容如下:
vrrp_instance VI_1 {
state BACKUP # 服务器B配置为备节点
interface eth0
virtual_router_id 51
priority 98 # 备节点的优先级应该低于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
192.168.0.100/24
}
}
在以上配置中,重要的配置项有:
state
:指定节点的状态,可以是MASTER(主节点)或BACKUP(备节点)。interface
:指定网卡的名称。virtual_router_id
:虚拟路由器ID,需要在两个节点上保持一致。priority
:节点的优先级,主节点优先级应该高于备节点。virtual_ipaddress
:虚拟IP地址,客户端将通过该IP地址访问服务。
保存文件后,重启keepalived服务:
$ sudo service keepalived restart
配置 Redis
在服务器A上安装Redis,并将其配置为主节点。在服务器B上安装Redis,并将其配置为备节点。
在服务器A上创建并编辑 /etc/redis/redis.conf
文件,设置以下配置:
bind 127.0.0.1 192.168.0.100 # 绑定本地和虚拟IP地址
requirepass password # 设置访问密码
在服务器B上创建并编辑 /etc/redis/redis.conf
文件,设置以下配置:
bind 127.0.0.1