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

memcached主主复制+keepalive

一、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 2weight -20
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_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 2weight -20}vrrp_instance VI_1 {state MASTER  # 主节点为MASTER,备节点为BACKUPpriority 100  # 主节点优先级高于备节点virtual_ipaddress { 10.1.1.30/24 }track_script { chk_memcached }}

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

相关文章:

memcached主主复制+keepalive

一、Memcached主主复制技术原理 Memcached原生不支持复制&#xff0c;需通过repcached分支实现双向同步。其关键机制包括&#xff1a; 双向同步架构 两节点互为主备&#xff08;Master-Master&#xff09;&#xff0c;任意节点写入的数据会同步至对端。同步基于TCP协议&#x…...

光学设计核心

光学设计核心技术全流程教学&#xff1a;从理论建模到工程实践 一、光学设计基础理论体系构建 1.1 光线传播核心定律 • 斯涅尔定律&#xff1a;n_1\sin\theta_1 n_2\sin\theta_2&#xff0c;通过编程实现折射角动态计算&#xff08;Python示例&#xff09;&#xff1a; im…...

使用 `aiohttp` 构建高效的异步网络爬虫系统

使用 aiohttp 构建高效的异步网络爬虫系统 引言 在爬取大量网页时,传统同步方法(如 requests)可能面临网络 I/O 阻塞问题,导致性能低下。而 Python 的 aiohttp 结合 asyncio 提供了一种高效的解决方案,使得爬虫可以同时处理多个请求,大幅提升数据抓取速度。 本文将详细…...

Microsoft Azure 服务4月更新告示

由世纪互联运营的 Microsoft Azure 重要更新 名称变更 Azure Stack HCI现已正式更名为Azure Local&#xff0c;并成为其重要组成部分。Azure Local是一种超融合基础设施&#xff08;HCI&#xff09;解决方案&#xff0c;专为托管Windows和Linux虚拟机&#xff08;VM&#xff…...

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…...

第八天——贪心算法——队列重构问题

1. 题目 给定一个由人群组成的数组 people&#xff0c;其中每个人以 [hi, ki] 的形式表示&#xff0c;people[i] [hi, ki] 表示第 i 个人的身高为 hi&#xff0c;并且前面恰好有 ki 个身高大于或等于 hi 的人。 你需要重新构造并返回一个表示队列的数组 queue&#xff0c;其中…...

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…...

PTN中的L2VPN与L3VPN技术详解

文章目录 一、PTN网络中的VPN技术概述二、L2VPN&#xff08;二层虚拟专用网络&#xff09;技术解析1. 核心技术原理2. 主要类型3. 应用场景4. 技术优缺点 三、L3VPN&#xff08;三层虚拟专用网络&#xff09;技术解析1. 核心技术原理2. 主要类型3. 应用场景4. 技术优缺点 四、L…...

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

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

告别传统的防抖机制,提交按钮的新时代来临

目录 背景 目标 核心代码 样式定义&#xff1a;让图标居中、响应父级颜色 SVG 图标&#xff1a;轻量、无依赖的 loading 图标 指令注册&#xff1a;全局注册 v-bLoading DOM 操作&#xff1a;添加与清除 loading 图标 1. 添加 loading 图标 2. 清除 loading 图标 动画…...

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

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

关于 Web安全:1. Web 安全基础知识

一、HTTP/HTTPS 协议详解 1. HTTP协议基础 什么是 HTTP&#xff1f; HTTP&#xff08;HyperText Transfer Protocol&#xff09;是互联网中浏览器和服务器之间传输数据的协议&#xff0c;基于请求-响应模式。它是一个无状态协议&#xff0c;意思是每次请求都是独立的&#x…...

西门子 S1500 PLC 通过 Profinet 对 6 台施耐德 ATV304 变频器的控制,用于 6 台升降台的位置控制。

西门子 S1500 PLC 通过 Profinet 对 6 台施耐德 ATV304 变频器的控制&#xff0c;用于 6 台升降台的位置控制。程序主要特点&#xff1a; 模块化设计&#xff1a;采用功能块数组结构&#xff0c;实现对多台设备的统一控制循环控制&#xff1a;使用 FOR 循环遍历每台升降台&…...

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

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

高光谱遥感图像处理之数据分类的fcm算法

基于模糊C均值聚类&#xff08;FCM&#xff09;的高光谱遥感图像分类MATLAB实现示例 %% FCM高光谱图像分类示例 clc; clear; close all;%% 数据加载与预处理 % 加载示例数据&#xff08;此处使用公开数据集Indian Pines的简化版&#xff09; load(indian_pines.mat); % 包含变…...

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

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

IEEE 列表会议第五届机器人、自动化与智能控制国际会议

会议地点&#xff1a;中国 成都 会议官网&#xff1a;ICRAIC 主办单位&#xff1a;成都理工大学 协办单位&#xff1a;成都大学 早鸟截稿&#xff1a;2025年7月15日 截稿时间&#xff1a;2025年8月20日 出版信息&#xff1a;IEEE出版&EI数据库 会议时间&#xff1a…...

基于 React Hook 封装 Store 的三种方案

基于 React Hook 封装 Store 的三种方案 方案一&#xff1a;基于 useSyncExternalStore 的轻量级 Store&#xff08;推荐&#xff09; import { useSyncExternalStore } from react;type Store<T> {state: T;listeners: Set<() > void>; };function createSt…...

Gmsh 读取自定义轮廓并划分网格:深入解析与实践指南

一、Gmsh 简介 (一)Gmsh 是什么 Gmsh 是一款功能强大的开源有限元网格生成器,广泛应用于工程仿真、数值模拟以及计算机图形学等领域。它为用户提供了从几何建模到网格划分的一整套解决方案,能够有效处理复杂几何形状,生成高质量的二维和三维网格,满足多种数值方法的需求…...

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;包括一个模板方法 和 若干基…...

GMT之Bash语言使用

GMT的操作有自己的逻辑和“命令”&#xff0c;但GMT是可以用Bash语言控制的&#xff0c;所以常常以.sh为后缀写GMT程序。 GMT程序运行步骤如下&#xff1a; 采用cd &#xff0c;定位到指定文件夹&#xff1b;以sh ***.sh运行GMT&#xff0c;得到结果。 另外&#xff0c;遇到…...

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

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

ISBI 2012 EM 神经元结构分割数据集复现UNet

一些笔记在代码的注释中 因为使用的数据集比较简单&#xff0c;所以没有使用模型可视化和调试的内容&#xff0c;只是简单的数据集预处理和模型的搭建以及训练。 # 1. PyTorch 基础模块 import torch # 张量操作 import torch.nn as nn # 构建神经网…...

Java视频流RTMP/RTSP协议解析与实战代码

在Java中实现视频直播的输入流处理&#xff0c;通常需要结合网络编程、多媒体处理库以及流媒体协议&#xff08;如RTMP、HLS、RTSP等&#xff09;。以下是实现视频直播输入流的关键步骤和技术要点&#xff1a; 1. 视频直播输入流的核心组件 网络输入流&#xff1a;通过Socket或…...

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文件…...

nosqlbooster pojie NoSQLBooster for MongoDB

测过可用&#xff0c;注意 asar的安装使用报错改用 npx asar extract app.asar app 路径 C:\Users{computerName}\AppData\Local\Programs\nosqlbooster4mongo\resources npm install asar -g asar extract app.asar app 打开shared\lmCore.js 修改MAX_TRIAL_DAYS3000 修改…...