当前位置: 首页 > news >正文

Memcached 主主复制架构搭建与 Keepalived 高可用实现

实验目的

  1. 掌握基于 repcached 的 Memcached 主主复制配置

  2. 实现通过 Keepalived 的 VIP 高可用机制

  3. 验证数据双向同步及故障自动切换能力


实验环境

角色IP 地址主机名虚拟 IP (VIP)
主节点10.1.1.78server-a10.1.1.80
备节点10.1.1.79server-b10.1.1.80
  • 操作系统: CentOS 7

  • 软件版本: memcached-1.2.8-repcached-2.2

一、搭建memcached 主主复制

Memcached 的复制功能支持多个 Memcached 之间相互复制(双向复制,主备都是可读可写的),可以解决 Memcached 的容灾问题。

memcached 本身不支持相互复制,若已安装,需要卸载rpm 安装的memcached ,换带有支持复制功能的memcached;

yum -y remove memcached

(1)环境准备

假设有两台服务器用于 Memcached 主主复制,分别为 Server A(10.1.1.78)和 Server B(10.1.1.79)。确保两台服务器都运行 CentOS 7 系统,并且网络可以正常通信。

注意实验时需要设置防火墙规则,学习时期可直接关闭防火墙,因此两台虚拟机都需关闭防火墙

​
sudo firewall-cmd --add-port=11211/tcp --permanent 
sudo firewall-cmd --reload#注意也可以执行以下命令关闭防火墙(centos7中若要关闭防火墙两个都要关,具体使用规则可查看本人其他博客)
systemctl stop firewalld
systemctl stop iptables

(2)安装依赖

在两台服务器上都执行以下命令安装编译所需的依赖:

yum install -y gcc make libevent-devel

(3)下载并安装支持复制的 Memcached(repcached)

repcached 是实现 Memcached 复制功能的扩展,以下是安装步骤:

下载下面的压缩包并上传两台虚拟机,并执行wgte命令下载 repcached

Docs

wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz

如果上述链接不可用,你可以在 SourceForge 等网站上查找合适的版本。

(4)解压文件

tar zxvf memcached-1.2.8-repcached-2.2.tar.gz
ls  
cd memcached-1.2.8-repcached-2.2

(5)置编译选项

./configure --prefix=/usr/local/memcached  --enable-replication --with-libevent=/usr/lib64/ 

(6) 编译并安装

make clean
make &&make install

编译过程中若报错,处理后再编译:

修改memcached.c,删除两行如下图所示,大概在五十多行左右,可输入命令行:set nu显示行数

修改 replication.c文件,增加红色框住的一行

(7)配置主主复制

1. 启动 Server A 的 Memcached
#创建对应的用户
useradd  memcached
​
#进到对应目录启动服务
cd /usr/local/memcached/bin
./memcached -d -u memcached -m 64 -l 10.1.1.78 -p 11211 -x 10.1.1.79
​
注:若配合调度器上面的指令改成
./memcached -d -u memcached -m 64 -l 0.0.0.0 -p 11211 -x 10.1.1.79
​
​
#启动服务后一定要查看进程,看到底服务启动没
netstat -naptl |grep memcached
​
注:netstat 这个网络指令来源于net-tools 这个软件包,没有就自己安装!
sudo yum install net-tools​
#停掉服务的方法
pkill -9 memcached

参数说明:

  • -d:以守护进程模式运行。
  • -u root:以 root 用户身份运行。
  • -m 64:分配 64MB 内存给 Memcached。
  • -l 10.1.1.78:监听的 IP 地址。
  • -p 11211:监听的端口。
  • -x 10.1.1.79:指定要同步数据的对端服务器 IP。

2. 启动 Server B 的 Memcached
#创建对应的用户
useradd  memcached
​
#进到对应目录启动服务
cd /usr/local/memcached/bin
./memcached -d -u memcached -m 64 -l 10.1.1.79 -p 11211 -x 10.1.1.78
​
注:若配合调度器上面的指令改成
./memcached -d -u memcached -m 64 -l 0.0.0.0 -p 11211 -x 10.1.1.78
​
​
#启动服务后一定要查看进程,看到底服务启动没
netstat -naptl |grep memcached
​
注:netstat 这个网络指令来源于net-tools 这个软件包,没有就自己安装!
sudo yum install net-tools​
#停掉服务的方法
pkill -9 memcached

(8)验证主主复制

注意若没有telnet命令可自行下载

sudo yum install telnet -y
1. 在 Server A 插入数据
telnet 10.1.1.78 11211 
set test 0 0 5 
hello 
quit 
2. 在 Server B 验证数据
telnet 10.1.1.79 11211 
get test

如果能获取到在 Server A 上插入的数据,说明主主复制配置成功。同理,在 Server B 上插入数据,也应该能在 Server A 上获取到。

注意:同步的前提,使用相同用户启动服务;

二、搭建memcached 主主复制+keepalived 高可用

(1)在两个节点上都安装keepalived

yum -y install keepalived ipvsadm

(2)在10.1.1.78 上的配置

cd /etc/keepalived/
vi keepalived.conf
# 清空原文件并写入以下内容(示例为10.1.1.78主节点配置)
cat > /etc/keepalived/keepalived.conf <<'EOF'
! Configuration File for keepalivedglobal_defs {router_id LVS_DEVEL
}vrrp_script chk_memcached {script "/usr/bin/pgrep memcached"  # 检测Memcached进程interval 2weight -20
}vrrp_instance VI_1 {state MASTER                       # 主节点设为MASTER,备节点设为BACKUPinterface ens33                    # 网卡名(通过ip addr查看实际名称)virtual_router_id 51priority 100                       # 备节点改为90advert_int 1authentication {auth_type PASSauth_pass 1111                 # 密码需主备一致}virtual_ipaddress {10.1.1.80/24                  # 虚拟IP(VIP)}track_script {chk_memcached}
}
EOF

在10.1.1.79上,仅修改state和priority

cat > /etc/keepalived/keepalived.conf <<'EOF'
! Configuration File for keepalivedglobal_defs {router_id LVS_DEVEL_79  # 唯一标识,建议改为节点相关名称
}vrrp_script chk_memcached {script "/usr/bin/pgrep memcached"  # 检测Memcached进程interval 2weight -20
}vrrp_instance VI_1 {state BACKUP                      # 明确指定为备节点interface ens33                   # 网卡名(需与ip addr显示一致)virtual_router_id 51              # 必须与主节点相同priority 90                       # 优先级低于主节点(100)advert_int 1authentication {auth_type PASSauth_pass 1111                # 密码与主节点一致}virtual_ipaddress {10.1.1.80/24                 # 相同的虚拟IP}track_script {chk_memcached}
}
EOF

(3)启动keepalived

systemctl start keepalived
systemctl enable keepalived
systemctl status keepalived

(4) 测试故障切换

ip addr show ens33
pkill -9 memcached

最开始:

查看10.1.1.78,此时有10.1.1.80的VIP,

查看10.1.1.79,没有10.1.1.80的VIP

手动停止memcached后:

 在 主10.1.1.78上

pkill -9 memcached

观察vip 飘逸

78上没有80,79上有80

实验结论

  1. 主主复制有效性

    • 数据在 10.1.1.78 和 10.1.1.79 之间实现双向同步,写入任一节点的数据均能实时同步至对端。

    • 通过 stats replication 确认复制状态为 connected,同步字节数 (replication_bytes) 持续增长。

  2. 高可用性验证

    • 当主节点 Memcached 服务终止时,Keepalived 在 2秒内 将 VIP (10.1.1.80) 漂移至备节点。

    • 客户端通过 VIP 访问服务无感知中断,实现无缝故障转移。

  3. 关键问题与解决

    • 编译错误: 通过修改 memcached.c 定义 IOV_MAX 解决。

    • 同步失败: 因防火墙未放行 11212 复制端口,关闭防火墙后恢复正常。


实验总结

本次实验成功构建了 Memcached 主主复制集群,并结合 Keepalived 实现高可用。关键成果包括:

  1. 数据冗余:双向复制确保单节点故障时数据不丢失。

  2. 服务连续性:VIP 机制保障客户端访问零中断。

  3. 可扩展性:架构支持后续添加更多节点。

相关文章:

  • 9.ArkUI List的介绍和使用
  • MCP认证考试技术难题实战破解:从IP冲突到PowerShell命令的深度指南
  • Flutter Dart中的类 对象
  • 第四代北斗系统发展现状分析
  • QQ音乐安卓版歌曲版权覆盖范围与曲库完整度评测
  • IDEA编写flinkSQL(快速体验版本,--无需配置环境)
  • 在Python中设置现有Word文档的缩进
  • 红队系列-网络安全知识锦囊-CTF(持续更新)
  • netlist
  • Linux 官方蓝牙协议栈 BlueZ 第一篇:入门与架构概览
  • 【Linux网络】TCP服务中IOService应用与实现
  • pnpm常见报错解决办法
  • JMeter添加HTTP请求默认值元件的作用详解
  • PicoVR眼镜在XR融合现实显示模式下无法显示粒子问题
  • 欧拉计划 Project Euler56(幂的数字和)题解
  • pnpm monoreop 打包时 node_modules 内部包 typescript 不能推导出类型报错
  • firewalld 详解
  • 制作一款打飞机游戏24:键盘输入
  • OpenAI最新的4o图像生成模型 gpt-image-1 深度解析:API KEY 获取、开发代码示例
  • 待办事项日历组件实现
  • 人民日报:广东全力推动外贸稳量提质
  • 日均新开三家“首店”,上海的“首发经济”密码是什么?
  • 委员呼吁提高政府机构电话号码准确性,辽宁阜新回应
  • 快捷公寓单间不足5平方米?公寓方:预订平台图片只是参考,已退房款
  • 中国人民银行行长潘功胜会见世界银行行长彭安杰
  • 初中女生遭多人侵犯后,家属奔波三年要追责那个“案外”的生物学父亲