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.pswp.cn/diannao/80386.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80386.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80386.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何成功防護T級超大流量的DDoS攻擊

防護T級超大流量的DDoS攻擊需要綜合技術、架構與運營策略的多層次防御體系。以下是基于最新技術實踐和行業案例總結的關鍵防護策略&#xff1a; 一、流量清洗與分布式處理 部署流量清洗中心 T級攻擊的核心防御依賴于專業的流量清洗技術。通過部署分布式流量清洗集群&#xff0c…

基于SpringAI Alibaba實現RAG架構的深度解析與實踐指南

一、RAG技術概述 1.1 什么是RAG技術 RAG&#xff08;Retrieval-Augmented Generation&#xff09;檢索增強生成是一種將信息檢索技術與生成式AI相結合的創新架構。它通過以下方式實現智能化內容生成&#xff1a; 知識檢索階段&#xff1a;從結構化/非結構化數據源中檢索相關…

數字化技術的五個環節:大數據、云計算、人工智能、區塊鏈、移動互聯網

在21世紀的科技浪潮中&#xff0c;數字化技術以其強大的生命力和無限的潛力&#xff0c;正逐步重塑著我們的世界。大數據、云計算、人工智能、區塊鏈、移動互聯網&#xff0c;這五大數字化技術的環節&#xff0c;如同構建智慧未來的基石&#xff0c;每一方面都承載著推動社會進…

Java Web容器分類及對比

Java Web容器分類及對比 1. 按功能分類 (1) Servlet/JSP容器&#xff08;輕量級&#xff0c;僅支持Web層&#xff09; Tomcat 特點&#xff1a;輕量級、開源、僅支持Servlet/JSP規范&#xff0c;適合Web應用。 使用方式&#xff1a; // 通過Maven依賴啟動Spring Boot應用&…

【Java并發】【LinkedBlockingQueue】適合初學體質的LinkedBlockingQueue入門

&#x1f44b;hi&#xff0c;我不是一名外包公司的員工&#xff0c;也不會偷吃茶水間的零食&#xff0c;我的夢想是能寫高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 歡迎點贊、收藏、關注&#xff0c;跟上我的更新節奏 &#x1f4da;歡迎訂閱專欄…

Python在AI虛擬教學視頻開發中的核心技術與前景展望

Python在AI虛擬教學視頻開發中的核心技術與前景展望 一、引言&#xff1a;AI虛擬教學的技術革新 隨著教育數字化轉型加速&#xff0c;AI虛擬教學視頻憑借個性化、沉浸式體驗成為教育科技的新風口。Python以其強大的多模態處理能力、豐富的開源生態和跨領域兼容性&#xff0c;成…

shadcn/radix-ui的tooltip高度定制arrow位置

嘗試了半天&#xff0c;后來發現&#xff0c;不支持。。。。。就是不支持 那箭頭只能居中 改side和align都沒用&#xff0c;下面有在線實例 https://codesandbox.io/p/sandbox/radix-ui-slider-forked-zgn7hj?file%2Fsrc%2FApp.tsx%3A69%2C21 但是呢&#xff0c; 第一如果…

自動清空 maven 項目臨時文件,vue 的 node_modules 文件

echo off setlocal enabledelayedexpansion :: vue 的 node_modules 太大 :: maven 打包后的 target 文件也很大&#xff0c; :: 有些項目日志文件也很大&#xff0c;導致磁盤空間不足了&#xff0c; :: 所以寫了個腳本&#xff0c;只要配置一下各項目目錄&#xff0c; :: 雙擊…

[Mybatis-plus]

簡介 MyBatis-Plus &#xff08;簡稱 MP&#xff09;是一個 MyBatis的增強工具&#xff0c;在 MyBatis 的基礎上只做增強不做改變。Mybatis-plus官網地址 注意&#xff0c;在引入了mybatis-plus之后&#xff0c;不要再額外引入mybatis和mybatis-spring&#xff0c;避免因為版本…

管理100個小程序-很難嗎

20公里的徒步-真難 群里的伙伴發起了一場天目山20公里徒步的活動&#xff0c;想著14公里都輕松拿捏了&#xff0c;思考了30秒后&#xff0c;就借著春風帶著老婆孩子就出發了。一開始溪流清澈見底&#xff0c;小橋流水沒有人家&#xff1b;青山郁郁蔥蔥&#xff0c;枯藤老樹沒有…

大模型工業化元年:GPT-5開啟通用AI新紀元,中國技術如何破局?

過去一周&#xff0c;AI領域的焦點無疑是OpenAI發布的GPT-5預覽版&#xff0c;以及全球大模型技術從實驗室邁向工業化的關鍵轉折。這場變革不僅標志著通用人工智能&#xff08;AGI&#xff09;的進一步逼近&#xff0c;更掀起了全球產業鏈的競爭與反思。本文將從技術突破、產業…

軟考【網絡工程師】2023年5月上午題答案解析

1、固態硬盤的存儲介質是()。 A 光盤 B 閃存 C 軟盤 D 磁盤 答案是 B。 固態硬盤(Solid State Drive),簡稱 SSD,是用固態電子存儲芯片陣列制成的硬盤,其存儲介質是閃存(Flash Memory)。閃存具有非易失性,即在斷電后仍能保留存儲的數據,且讀寫速度快、抗震性強、能…

【速寫】鉤子與計算圖

文章目錄 前向鉤子反向鉤子的輸入反向鉤子的輸出 前向鉤子 下面是一個測試用的計算圖的網絡&#xff0c;這里因為模型是自定義的緣故&#xff0c;可以直接把前向鉤子注冊在模型類里面&#xff0c;這樣會更加方便一些。其實像以前BERT之類的last_hidden_state以及pool_output之…

高級電影感戶外街拍人像攝影后期Lr調色教程,手機濾鏡PS+Lightroom預設下載!

調色介紹 高級電影感戶外街拍人像攝影后期 Lr 調色&#xff0c;是運用 Adobe Lightroom 軟件&#xff0c;對戶外街拍的人像照片進行后期處理&#xff0c;以塑造出具有電影質感的獨特視覺效果。此調色過程借助 Lr 豐富的工具與功能&#xff0c;從色彩、光影、對比度等多維度著手…

16.QT-Qt窗口-菜單欄|創建菜單欄|添加菜單|創建菜單項|添加分割線|添加快捷鍵|子菜單|圖標|內存泄漏(C++)

Qt窗?是通過QMainWindow類來實現的。 QMainWindow是?個為??提供主窗?程序的類&#xff0c;繼承?QWidget類&#xff0c;并且提供了?個預定義的布局。QMainWindow包含?個菜單欄&#xff08;menu bar&#xff09;、多個?具欄(tool bars)、多個浮動窗?&#xff08;鉚接部…

【kafka初學】啟動執行命令

接上篇&#xff0c;啟動&#xff1a;開兩個cdm窗口 注意放的文件不要太深或者中文&#xff0c;會報命令行太長的錯誤 啟動zookeeper bin\windows\zookeeper-server-start.bat config\zookeeper.properties2. 啟動kafka-serve bin\windows\kafka-server-start.bat config\serv…

利用 Claw Cloud Run 免費應用部署前端網頁

一、注冊 使用注冊180天的github賬戶注冊Claw Cloud賬戶&#xff0c;可獲得每月5$的免費配額官網鏈接 - https://run.claw.cloud/ &#xff08;ps&#xff1a;直接github賬號登錄應該就不用寫了吧&#xff09; 二、創建應用 打開App Launchpad 點擊Create AppCPU選0.1即可&a…

豆瓣圖書數據采集與可視化分析(三)- 豆瓣圖書數據統計分析

文章目錄 前言一、數據讀取與保存1. 讀取清洗后數據2. 保存數據到CSV文件3. 保存數據到MySQL數據庫 二、不同分類統計分析1. 不同分類的圖書數量統計分析2. 不同分類的平均評分統計分析3. 不同分類的平均評價人數統計分析4. 不同分類的平均價格統計分析5. 分類綜合分析 三、不同…

網絡原理 - 3(UDP 協議)

目錄 協議 應用層 xml json protobuffer 傳輸層 端口號&#xff08;Port&#xff09; UDP 協議 UDP 協議端格式 完&#xff01; 協議 網絡通信中&#xff0c;協議是一個非常重要的概念。我們前面在網絡原理中&#xff0c;就已經介紹了&#xff0c;為了統一各方網絡&…

Java Agent 注入 WebSocket 篇

Agent 如果要對其進行Agent注入的編寫&#xff0c;需要先理解三個名字premain&#xff0c;agentmain&#xff0c;Instrumentation premain方法在 JVM 啟動階段調用&#xff0c;一般維持權限的時候不會使用 agentmain方法在 JVM 運行時調用 常用的 Instrumentation實例為代理…