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

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. 可扩展性:架构支持后续添加更多节点。

http://www.xdnf.cn/news/2016.html

相关文章:

  • OpenCV 图形API(64)图像结构分析和形状描述符------在图像中查找轮廓函数findContours()
  • vue2实现Blod文件流下载
  • 使用ACME给动态域名下的Synology NAS免费申请SSL证书(无需开放80/443端口)
  • Docker拉取镜像代理配置实践与经验分享
  • 「Java EE开发指南」如何使用MyEclipse的可视化JSF编辑器设计JSP?(一)
  • SQLAlchemy 2.x 异步查询方法比较
  • Android 14 修改侧滑手势动画效果
  • xfce桌面汉化设置
  • 【防火墙 pfsense】2配置
  • 豆瓣图书数据采集与可视化分析(三)- 豆瓣图书数据统计分析
  • OSPF网络协议
  • Antd Modal Drawer 更改默认项
  • WSL 安装过程整理
  • 应用在物联网设备的爱普生可编程晶振SG-8018CA
  • Redis是单线程的,如何提高多核CPU的利用率?
  • 大学IP广播系统解决方案:构建数字化智慧化大学校园IP广播平台
  • 【含文档+PPT+源码】基于微信小程序的校园快递平台
  • HTML 模板技术与服务端渲染
  • 京东平台关键字搜索接口开发指南:Python实现与代码详解
  • PicoVR眼镜在XR融合现实显示模式下无法显示粒子问题
  • 大模型扫盲之推理性能指标全面详解
  • linux系统问题杂谈
  • Framework模块编译脚本利器
  • KafkaSpark-Streaming
  • C语言数据类型全面解析:从入门到精通
  • Django【应用 01】django-plotly-dash安装及使用
  • Java 设计模式心法之第22篇 - 备忘录 (Memento) - 捕获与恢复对象状态的“时光机”
  • 力扣-160.相交链表
  • 制作一款打飞机游戏23:编辑器ui
  • kafka与flume的整合、spark-streaming