memcached主主复制+keepalive

news2025/5/17 20:57:06

一、Memcached主主复制技术原理

Memcached原生不支持复制,需通过repcached分支实现双向同步。其关键机制包括:

  1. 双向同步架构

    • 两节点互为主备(Master-Master),任意节点写入的数据会同步至对端。
    • 同步基于TCP协议,通过-x <peer_ip>参数指定对端地址启动服务。
    • 示例命令
      # 节点A(IP:10.1.1.66)
      memcached -d -m64 -l0.0.0.0 -p11211 -x10.1.1.77
      # 节点B(IP:10.1.1.77)
      memcached -d -m64 -l0.0.0.0 -p11211 -x10.1.1.66
      

      2.数据一致性保障

      • 采用时间戳机制解决冲突,后写入的数据覆盖先写入的数据。
      • 需避免脑裂:通过Keepalived的VIP漂移确保客户端始终访问同一入口。

二、Keepalived高可用核心组件

  1. VRRP协议实现

    • 虚拟路由器ID(VRID)标识集群,MASTER节点持有虚拟IP(VIP)。
    • 优先级机制:MASTER(优先级100)故障时,BACKUP(优先级90)接管。

    •  
  2. 三层健康检查体系

    • Layer3:ICMP Ping检测节点存活。
    • Layer4:TCP端口检查(默认11211)。
    • Layer5:HTTP GET请求+MD5校验(可选,需配置URL监控)。

三.拓扑图

四.步骤

(1)搭建memcached 主主复制架构

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

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

[root@localhost ~]# yum  -y remove memcached

(2)环境准备

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

(3)安装依赖

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

[root@localhost ~]# yum install -y gcc make libevent-devel

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

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

  1. 下载 repcached

[root@localhost ~]# wget http://downloads.sourceforge.net/repcached/memcached-1.                                                                                   2.8-repcached-2.2.tar.gz

2.解压文件

[root@localhost ~]# tar zxvf memcached-1.2.8-repcached-2.2.tar.gz
[root@localhost ~]# cd memcached-1.2.8-repcached-2.2

3.修改文件

[root@localhost memcached-1.2.8-repcached-2.2]# vim   memcached.c //改成如下样子,删了两行内容

[root@localhost memcached-1.2.8-repcached-2.2]# vim replication.c //改成如下样子,加了一行

4.配置编译选项

[root@localhost memcached-1.2.8-repcached-2.2]# ./configure --prefix=/usr/local/                                                                                   memcached  --enable-replication --with-libevent=/usr/lib64/

5. 编译并安装

[root@localhost memcached-1.2.8-repcached-2.2]# make
make  install 

(5)配置主主复制

  1. 启动 Server A 的 Memcached

[root@localhost ~]# useradd  memcached
useradd:用户“memcached”已存在
[root@localhost ~]# ./memcached -d -u memcached  -m 64 -l 0.0.0.0 -p 11211 -x 10                                                                                   .1.1.29
-bash: ./memcached: 没有那个文件或目录
[root@localhost ~]# ls
anaconda-ks.cfg                memcached-1.2.8-repcached-2.2.tar.gz
memcached-1.2.8-repcached-2.2  test.php
[root@localhost ~]# cd /usr/local/memcached/bin
[root@localhost bin]# ./memcached -d -u memcached  -m 64 -l 0.0.0.0 -p 11211 -x                                                                                    10.1.1.29
[root@localhost bin]# netstat -naptl |grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN                                                                                         1768/./memcached
tcp        0      0 0.0.0.0:11212           0.0.0.0:*               LISTEN                                                                                         1768/./memcached

2.启动 Server B 的 Memcached

[root@localhost ~]# useradd  memcached
useradd:用户“memcached”已存在
[root@localhost ~]# cd /usr/local/memcached/bin
[root@localhost bin]# ./memcached -d -u memcached  -m 64 -l 0.0.0.0 -p 11211 -x                                                                                    10.1.1.28
[root@localhost bin]# netstat -naptl |grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN                                                                                         2143/./memcached
tcp        0      0 10.1.1.29:49924         10.1.1.28:11212         ESTABLISHED                                                                                    2143/./memcached

(6)验证主主复制

1. 在 Server A 插入数据

[root@localhost bin]# telnet 10.1.1.28 11211
Trying 10.1.1.28...
Connected to 10.1.1.28.
Escape character is '^]'.
set test_key 0 0 5
value
STORED
quit
Connection closed by foreign host.

2. 在 Server B 验证数据

[root@localhost bin]# telnet 10.1.1.29 11211
Trying 10.1.1.29...
Connected to 10.1.1.29.
Escape character is '^]'.
get test_key
VALUE test_key 0 5
value
END
quit

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

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

五.搭建memcached 主主复制+keepalived 高可用

1.在两个节点上都安装keepalived

[root@localhost bin]# yum -y install keepalived ipvsadm

  2.在10.1.1.28 上的配置

[root@localhost keepalived]# cat /etc/keepalived/keepalived.conf
vrrp_script chk_memcached {
    script "/usr/bin/pgrep memcached"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        10.1.1.30/24
    }
    track_script {
        chk_memcached
    }
}

在另一台上,仅修改state和priority

state BACKUP 
priority 90 

3.启动keepalived

[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# systemctl restart keepalived

查看两边ip,此时vip在master

4. 测试故障切换

手动停止memcached: 在 10.1.1.28(master)

[root@localhost keepalived]# pkill -9 memcached

观察vip 飘逸此时vip在backup

六.总结

1. Memcached 概述与核心功能

功能:Memcached 是一个高性能的分布式内存对象缓存系统,主要用于缓存数据库查询结果、API调用结果等,通过减少数据库访问次数提升动态Web应用的性能。

特点:

协议简单,基于键值存储(仅支持String类型)。

多线程模型,适合高并发场景。

不支持持久化,重启后数据丢失,适合临时缓存场景。

依赖客户端分片(如一致性哈希)实现分布式。

2. 高可用配置(主主复制 + Keepalived)

主主复制

下载并编译支持复制的repcached版本,解决编译错误(如修改memcached.c中的IOV_MAX定义)。

启动服务时指定对端IP:

./memcached -d -u memcached -m 64 -l 0.0.0.0 -p 11211 -x <对端IP>

验证数据同步:在A节点写入数据,B节点可读取,反之亦然。

Keepalived 高可用

安装Keepalived:yum install -y keepalived

配置VIP和健康检测脚本:

vrrp_script chk_memcached {

  script "/usr/bin/pgrep memcached"

  interval 2

  weight -20}vrrp_instance VI_1 {

  state MASTER  # 主节点为MASTER,备节点为BACKUP

  priority 100  # 主节点优先级高于备节点

  virtual_ipaddress { 10.1.1.30/24 }

  track_script { chk_memcached }}

测试故障切换:手动停止主节点Memcached,观察VIP漂移至备节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2377972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea运行

各种小kips Linuxidea上传 Linux 部署流程 1、先在idea打好jar包&#xff0c;clean之后install 2、在Linux目录下&#xff0c;找到对应项目目录&#xff0c;把原来的jar包放在bak文件夹里面 3、杀死上一次jar包的pid ps -ef|grep cliaidata.jar kill pid 4、再进行上传新的jar…

CVPR2025 | 首个多光谱无人机单目标跟踪大规模数据集与统一框架, 数据可直接下载

论文介绍 题目&#xff1a;MUST: The First Dataset and Unified Framework for Multispectral UAV Single Object Tracking 期刊&#xff1a;IEEE/CVF Computer Vision and Pattern Recognition Conference 论文&#xff1a;https://arxiv.org/abs/2503.17699 数据&#x…

Docker实现MySQL数据库主从复制

一、拉取数据库镜像 docker pull mysql:5.7二、创建两个数据库(一主一从模式) mysql01&#xff08;主&#xff09; 1.docker run -d -p 3310:3306 -v /root/mysql/node-1/init:/docker-entrypoinit-initdb.d -v /root/mysql/node-1/config:/etc/mysql/conf.d -v /root/mysq…

2025长三角杯数学建模B题教学思路分析:空气源热泵供暖的温度预测

2025长三角杯数学建模B题教学思路模型代码&#xff0c;详细内容见文末名片 一、问题背景 在当今“电供暖”日益普及的大背景下&#xff0c;空气源热泵凭借其独特优势&#xff0c;在楼宇供暖领域崭露头角&#xff0c;成为缓解电网调峰压力的得力助手。然而&#xff0c;供暖过程…

InternVL3: 利用AI处理文本、图像、视频、OCR和数据分析

InternVL3推动了视觉-语言理解、推理和感知的边界。 在其前身InternVL 2.5的基础上,这个新版本引入了工具使用、GUI代理操作、3D视觉和工业图像分析方面的突破性能力。 让我们来分析一下是什么让InternVL3成为游戏规则的改变者 — 以及今天你如何开始尝试使用它。 InternVL…

重构金融数智化产业版图:中电金信“链主”之道

近日&#xff0c;《商学院》杂志独家专访了中电金信常务副总经理&#xff08;主持经营工作&#xff09;冯明刚&#xff0c;围绕“金融科技”“数字底座”“架构转型”“AI驱动”等议题&#xff0c;展开了一场关于未来架构、技术变革与系统创新的深入对话。 当下&#xff0c;数字…

2025年PMP 学习十六 第11章 项目风险管理 (总章)

2025年PMP 学习十六 第11章 项目风险管理 &#xff08;总章&#xff09; 第11章 项目风险管理 序号过程过程组1规划风险管理规划2识别风险规划3实施定性风险分析规划4实施定量风险分析规划5规划风险应对执行6实施风险应对执行7监控风险监控 目标: 提高项目中积极事件的概率和…

bili.png

import pygame as pg import sys import time import randompg.init() screen pg.display.set_mode((800,500)) pg.display.set_caption(runcool) screen.fill((135, 206, 235)) bili pg.image.load(bili.png)#得分 coin 0 game_font pg.font.Font(None, 50)#人物大小…

【设计模式】- 行为型模式1

模板方法模式 定义了一个操作中的算法骨架&#xff0c;将算法的一些步骤推迟到子类&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的某些步骤 【主要角色】&#xff1a; 抽象类&#xff1a;给出一个算法的轮廓和骨架&#xff08;包括一个模板方法 和 若干基…

AI神经网络降噪算法在语音通话产品中的应用优势与前景分析

采用AI降噪的语言通话环境抑制模组性能效果测试 一、引言 随着人工智能技术的快速发展&#xff0c;AI神经网络降噪算法在语音通话产品中的应用正逐步取代传统降噪技术&#xff0c;成为提升语音质量的关键解决方案。相比传统DSP&#xff08;数字信号处理&#xff09;降噪&#…

springboot连接高斯数据库(GaussDB)踩坑指南

1. 用户密码加密类型与gsjdbc4版本不兼容问题 我的数据库&#xff0c;设置的加密类型(password_encryption_type)是2&#xff0c; 直接使用gsjdbc4.jar连接数据库报错。 org.postgresql.util.PSQLException: Invalid or unsupported by client SCRAM mechanisms 后使用gsjdb…

c++20引入的三路比较操作符<=>

目录 一、简介 二、三向比较的返回类型 2.1 std::strong_ordering 2.2 std::weak_ordering 2.3 std::partial_ordering 三、对基础类型的支持 四、自动生成的比较运算符函数 4.1 std::rel_ops的作用 4.2 使用<> 五、兼容他旧代码 一、简介 c20引入了三路比较操…

Cursor开发酒店管理系统

目录&#xff1a; 1、后端代码初始化2、使用Cursor打开spingboot项目3、前端代码初始化4、切换其他大模型5、Curosr无限续杯 1、后端代码初始化 找一个目录&#xff0c;使用idea在这个目录下新建springboot的项目。 2、使用Cursor打开spingboot项目 在根目录下新建.cursor文件…

图像对比度调整(局域拉普拉斯滤波)

一、背景介绍 之前刷对比度相关调整算法&#xff0c;找到效果不错&#xff0c;使用局域拉普拉斯做图像对比度调整&#xff0c;尝试复现和整理了下相关代码。 二、实现流程 1、基本原理 对输入图像进行高斯金字塔拆分&#xff0c;对每层的每个像素都针对性处理&#xff0c;生产…

如何在本地打包 StarRocks 发行版

字数 615&#xff0c;阅读大约需 4 分钟 最近我们在使用 StarRocks 的时候碰到了一些小问题&#xff1a; • 重启物化视图的时候会导致视图全量刷新&#xff0c;大量消耗资源。- 修复 PR&#xff1a;https://github.com/StarRocks/starrocks/pull/57371• excluded_refresh_tab…

git使用的DLL错误

安装好git windows客户端打开git bash提示 Error: Could not fork child process: Resource temporarily unavailable (-1). DLL rebasing may be required; see ‘rebaseall / rebase –help’. 提示 MINGW64的DLL链接有问题&#xff0c;其实是Windows的安全中心限制了&…

区块链blog1__合作与信任

&#x1f342;我们的世界 &#x1f33f;不是孤立的&#xff0c;而是网络化的 如果是单独孤立的系统&#xff0c;无需共识&#xff0c;而我们的社会是网络结构&#xff0c;即结点间不是孤立的 &#x1f33f;网络化的原因 而目前并未发现这样的理想孤立系统&#xff0c;即现实中…

从数据包到可靠性:UDP/TCP协议的工作原理分析

之前我们已经使用udp/tcp的相关接口写了一些简单的客户端与服务端代码。也了解了协议是什么&#xff0c;包括自定义协议和知名协议比如http/https和ssh等。现在我们再回到传输层&#xff0c;对udp和tcp这两传输层巨头协议做更深一步的分析。 一.UDP UDP相关内容很简单&#xf…

【CanMV K230】AI_CUBE1.4

《k230-AI 最近小伙伴有做模型的需求。所以我重新捡起来了。正好把之前没测过的测一下。 这次我们用的是全新版本。AICUBE1.4.dotnet环境9.0 注意AICUBE训练模型对硬件有所要求。最好使用独立显卡。 有小伙伴说集显也可以。emmmm可以试试哈 集显显存2G很勉强了。 我们依然用…

vscode 默认环境路径

目录 1.下面放在项目根目录上&#xff1a; 2.settings.json内容&#xff1a; 自定义conda环境断点调试 启动默认参数&#xff1a; 1.下面放在项目根目录上&#xff1a; .vscode/settings.json 2.settings.json内容&#xff1a; {"python.analysis.extraPaths"…