1. 程式人生 > >Memcached單點問題——實戰之複製----基於repcached的主從

Memcached單點問題——實戰之複製----基於repcached的主從

      由於 Memcached 自己沒有防止單點的措施,因為為了保障 Memcached 服務的高可用,我們需要藉助外部的工具來實現高可用的功能。本文引入 Repcached 這個工具,通過使用該工具我們可以完成 Memcached 服務的主從功能。

      Repcached 它是由日本人開發的,用來實現 Memcached 複製功能的一個工具。它所構建的主從方案是一個單主單從的方案,不支援多主多從。但是,它的特點是,主從兩個節點可以互相讀寫,從而可以達到互相同步的效果。

      假設主節點壞掉,從節點會很快偵測到連線斷開,然後它會自動切換到監聽狀態( listen)從而成為主節點,並且等待新的從節點加入。

      假設原來掛掉的主節點恢復之後,我們只能人工手動以從節點的方式去啟動。原來的主節點並不能搶佔成為新的主節點,除非新的主節點掛掉。這也就意味著,基於 Repcached 實現的 Memcached 主從,針對主節點並不具備搶佔功能。

      假設從節點壞掉,主節點也會很快偵測到連線斷開,然後它就會重新切換到監聽狀態(listen),並且等待新的從節點加入。

      假設主從節點都掛掉,則資料就丟失了!因此,這是 Repcached 的一個短板,不過後期我們可以通過結合其它的工具來彌補這個缺點。

      OK,簡單介紹到這裡。下面我們通過實驗來看,基於 Repcached 的 Memcached 主從架構是如何部署,以後如何測試和管理的。

環境:

  • CentOS 6.5 x86_64位 採用最小化安裝,系統經過了基本優化
  • selinux 為關閉狀態,iptables 為無限制模式
  • 主機名:nolinux
  • 原始碼包存放位置:/usr/local/src
  • libevent版本:2.0.21
  • memcached版本:1.4.20 

一、基礎環境準備

[[email protected] ~]# yum -y install gcc gcc-c++

二、Memcached安裝 

1、安裝libevent

[[email protected] ~]#cd /usr/local/src

[[email protected] src]# wget http://code.taobao.org/p/nolinux/src/memcached/src/libevent-2.0.21-stable.tar.gz?orig

[[email protected] src]# tar zxvf libevent-2.0.21-stable.tar.gz

[[email protected] src]# cd libevent-2.0.21-stable

[[email protected] libevent-2.0.21-stable]#  ./configure --prefix=/usr

[[email protected] libevent-2.0.21-stable]#  make

[[email protected] libevent-2.0.21-stable]#  make install

[[email protected] libevent-2.0.21-stable]# ll /usr/lib/libevent*  # libevent安裝完後,會在/usr/lib目錄下出現如下內容

lrwxrwxrwx 1 root root 21 Aug 11 13:49 /usr/lib/libevent-2.0.so.5 -> libevent-2.0.so.5.1.9

-rwxr-xr-x 1 root root 968690 Aug 11 13:49 /usr/lib/libevent-2.0.so.5.1.9

-rw-r--r-- 1 root root 1571802 Aug 11 13:49 /usr/lib/libevent.a

lrwxrwxrwx 1 root root 26 Aug 11 13:49 /usr/lib/libevent_core-2.0.so.5 -> libevent_core-2.0.so.5.1.9

-rwxr-xr-x 1 root root 585225 Aug 11 13:49 /usr/lib/libevent_core-2.0.so.5.1.9

-rw-r--r-- 1 root root 978482 Aug 11 13:49 /usr/lib/libevent_core.a

-rwxr-xr-x 1 root root 970 Aug 11 13:49 /usr/lib/libevent_core.la

lrwxrwxrwx 1 root root 26 Aug 11 13:49 /usr/lib/libevent_core.so -> libevent_core-2.0.so.5.1.9

lrwxrwxrwx 1 root root 27 Aug 11 13:49 /usr/lib/libevent_extra-2.0.so.5 -> libevent_extra-2.0.so.5.1.9

-rwxr-xr-x 1 root root 404852 Aug 11 13:49 /usr/lib/libevent_extra-2.0.so.5.1.9

-rw-r--r-- 1 root root 593392 Aug 11 13:49 /usr/lib/libevent_extra.a

-rwxr-xr-x 1 root root 977 Aug 11 13:49 /usr/lib/libevent_extra.la

lrwxrwxrwx 1 root root 27 Aug 11 13:49 /usr/lib/libevent_extra.so -> libevent_extra-2.0.so.5.1.9

-rwxr-xr-x 1 root root 935 Aug 11 13:49 /usr/lib/libevent.la

lrwxrwxrwx 1 root root 30 Aug 11 13:49 /usr/lib/libevent_pthreads-2.0.so.5 -> libevent_pthreads-2.0.so.5.1.9

-rwxr-xr-x 1 root root 18430 Aug 11 13:49 /usr/lib/libevent_pthreads-2.0.so.5.1.9

-rw-r--r-- 1 root root 18670 Aug 11 13:49 /usr/lib/libevent_pthreads.a

-rwxr-xr-x 1 root root 998 Aug 11 13:49 /usr/lib/libevent_pthreads.la

lrwxrwxrwx 1 root root 30 Aug 11 13:49 /usr/lib/libevent_pthreads.so -> libevent_pthreads-2.0.so.5.1.9

lrwxrwxrwx 1 root root 21 Aug 11 13:49 /usr/lib/libevent.so -> libevent-2.0.so.5.1.9

[[email protected] libevent-2.0.21-stable]# cd ..

2、安裝memcached

[[email protected] src]# tar zxvf memcached-1.4.20.tar.gz

[[email protected] src]# cd memcached-1.4.20

[[email protected] memcached-1.4.20]# ./configure --with-libevent=/usr

[[email protected] memcached-1.4.20]# wget http://code.taobao.org/p/nolinux/src/memcached/src/memcached-1.4.20.tar.gz?orig

[[email protected] memcached-1.4.20]# make

[[email protected] memcached-1.4.20]# make install

[[email protected] memcached-1.4.20]# cd ..

[[email protected] src]# ll /usr/local/bin/memcached    # 安裝完成後會把memcached 放到 /usr/local/bin/memcached

-rwxr-xr-x 1 root root 341907 Aug 11 13:52 /usr/local/bin/memcached

注意:如果中間出現報錯,請仔細檢查錯誤資訊,按照錯誤資訊來配置或者增加相應的庫或者路徑

三、repcached安裝

方式一:使用repcached版本

[[email protected] src]# wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz

[[email protected] src]# tar zxf memcached-1.2.8-repcached-2.2.tar.gz

[[email protected] src]# cd memcached-1.2.8-repcached-2.2

方式二:使用patch版本

[[email protected] memcached-1.2.8-repcached-2.2]# wget http://downloads.sourceforge.net/repcached/repcached-2.2-1.2.8.patch.gz

[[email protected] memcached-1.2.8-repcached-2.2]# gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1

[[email protected] memcached-1.2.8-repcached-2.2]# ./configure --enable-replication

[[email protected] memcached-1.2.8-repcached-2.2]#  make

[[email protected] memcached-1.2.8-repcached-2.2]#  make install

[[email protected] memcached-1.2.8-repcached-2.2]# cd ..


以上操作,我們需要針對主節點和備節點都操作!這裡我僅僅以主節點的部署為例!切記!

四、啟動配置

1、啟動master

[[email protected] ~]# memcached -v -d -p 11211 -l 192.168.0.102 -u root -P /tmp/memcached1.pid

[[email protected] ~]# replication: listen 

[[email protected] ~]# replication: accept


2、啟動salve

[[email protected] src]# memcached -v -d -p 11211 -l 192.168.0.103 -u root -x 192.168.0.102 -P /tmp/memcached1.pid

[[email protected] src]# replication: connect (peer=192.168.0.102:11212)

replication: marugoto copying

replication: start

[[email protected] src]#


3、回到master節點

[[email protected] ~]# replication: accept  # 啟動正常後,master 將 accept

五、測試

由於我們主節點和從節點的memcached服務都騎起來了,並且監聽也都正常,所以以下的測試操作全部放到master節點進行。

[[email protected] ~]# telnet 192.168.0.102 11211    # 連線到我們主節點,新增一個記錄

Trying 192.168.0.102...

Connected to 192.168.0.102.

Escape character is '^]'.

set key 0 0 6

sunsky

STORED

quit

Connection closed by foreign host.

[[email protected] ~]# telnet 192.168.0.103 11211    # 連線到我們的從節點,檢視主節點的記錄是否同步過來

Trying 192.168.0.103...

Connected to 192.168.0.103.

Escape character is '^]'.

get key

VALUE key 0 6

sunsky

END

quit

Connection closed by foreign host.

[[email protected] ~]# pkill memcached    # 現在,殺掉我們主節點的memcached程序

replication: cleanup start

replication: close

replication: cleanup complete

[[email protected] src]# replication: close  # 備節點此時變為監聽狀態,即變成了主節點

replication: listen

[[email protected] ~]# telnet 192.168.0.103 11211  # 檢視從節點上面的資料是否還存在

Trying 192.168.0.103...

Connected to 192.168.0.103.

Escape character is '^]'.

get key

VALUE key 0 6

sunsky

END

quit

Connection closed by foreign host.

[[email protected] ~]# memcached -v -d -p 11211 -l 192.168.0.102 -u root -x 192.168.0.103 -P /tmp/memcached.pid  #  由於memcached的主/從沒有搶佔功能,因此主恢復之後,只能作為現有主節點的從節點[[email protected] ~]# replication: connect (peer=192.168.0.103:11212)

replication: marugoto copying

replication: start

[[email protected] src]# replication: accept    # 在上面加入之後,下面之前的從節點就會蹦出如下輸入,表示開啟同步

replication: marugoto start

replication: marugoto 1

replication: marugoto owari

[[email protected] ~]# telnet 192.168.0.102 11211  # 我們連線到剛剛恢復的節點,可以看到資料又回來了

Trying 192.168.0.102...

Connected to 192.168.0.102.

Escape character is '^]'.

get key

VALUE key 0 6

sunsky

END

quit

Connection closed by foreign host.


      以上就是我們做的關於memcached基於repcached的主從複製實驗了。通過實驗,我們可以看出,通過他我們實現了主從中任何一個宕機,都不會影響另外一臺機器上的資料。

在文章最後,我們再來總結以下基於 Repcached 的 Memcached 主從的優缺點:

優點:

1、能夠實現 cache 的冗餘功能

2、主從之間可以互相讀寫

缺點:

1、儘可以一主一從,單對單


相關推薦

Memcached問題——實戰複製----基於repcached主從

      由於 Memcached 自己沒有防止單點的措施,因為為了保障 Memcached 服務的高可用,我們需要藉助外部的工具來實現高可用的功能。本文引入 Repcached 這個工具,通過使用該工具我們可以完成 Memcached 服務的主從功能。       Re

登入使用cas基於Oauth2整合第三方登入

為什麼要使用第三方登入呢? 小編也是一個使用者站在使用者角度來考慮,並不希望每次遇到一個需要註冊登入的應用總是不斷的註冊新的帳號,帳號多了越是麻煩而且由於多個帳號設定不同的密碼記憶也是很困難的,故而大多數帳號密碼會設定為相同的密碼,這樣可能 這就會造成 1

基於CAS的登入SSO[5]: 基於Springboot實現CAS客戶端的前後端分離

基於CAS的單點登入SSO[5]: 基於Springboot實現CAS客戶端的前後端分離 作者:家輝,日期:2017-08-24 CSDN部落格: http://blog.csdn.net/gobitan 摘要:現在大部分系統的開發都已經

Java架構-(十) 整合spring cloud雲架構 - SSO登入OAuth2.0登入認證(1)

之前寫了很多關於spring cloud的文章,今天我們對OAuth2.0的整合方式做一下筆記,首先我從網上找了一些關於OAuth2.0的一些基礎知識點,幫助大家回顧一下知識點: 一、oauth中的角色 client:呼叫資源伺服器API的應用 Oauth 2.0 Provide

Java架構-(十三) 整合spring cloud雲架構 - SSO登入OAuth2.0 根據token獲取使用者資訊(4)

上一篇我根據框架中OAuth2.0的使用總結,畫了SSO單點登入之OAuth2.0 登出流程,今天我們看一下根據使用者token獲取yoghurt資訊的流程: Java程式碼 我這裡只是簡單寫了一些登出的程式碼,我們會在後面的文章中詳細貼出所有程式碼供大家參考,而且會從建立

Java架構-(十二) 整合spring cloud雲架構 - SSO登入OAuth2.0 登出流程(3)

上一篇我根據框架中OAuth2.0的使用總結,畫了一個根據使用者名稱+密碼實現OAuth2.0的登入認證的流程圖,今天我們看一下logout的流程: Java程式碼 我這裡只是簡單寫了一些登出的程式碼,我們會在後面的文章中詳細貼出所有程式碼供大家參考,而且會從建立資料庫,到執

Java架構-(十一) 整合spring cloud雲架構 - SSO登入OAuth2.0登入流程(2)

上一篇是站在巨人的肩膀上去研究OAuth2.0,也是為了快速幫助大家認識OAuth2.0,閒話少說,我根據框架中OAuth2.0的使用總結,畫了一個簡單的流程圖(根據使用者名稱+密碼實現OAuth2.0的登入認證): 上面的圖很清楚的描述了當前登入login的流程,現在我們針對於log

登入服務端配置(一修改埠)

1.開源單點登入系統CAS入門 1.1 什麼是單點登入 單點登入(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。 我們目前的系統存在諸多子系統,而這些子

(十一)Java springcloud B2B2C o2o多使用者商城 springcloud架構- - SSO登入OAuth2.0登入流程(2)

上一篇是站在巨人的肩膀上去研究OAuth2.0,也是為了快速幫助大家認識OAuth2.0,閒話少說,我根據框架中OAuth2.0的使用總結,畫了一個簡單的流程圖(根據使用者名稱+密碼實現OAuth2.0的登入認證):        上面的圖很清楚的描述了當前登入

(十三)Java springcloud B2B2C o2o多使用者商城 springcloud架構 - SSO登入OAuth2.0 根據token獲取使用者資訊(4)

上一篇我根據框架中OAuth2.0的使用總結,畫了SSO單點登入之OAuth2.0 登出流程,今天我們看一下根據使用者token獲取yoghurt資訊的流程: /** * 根據token獲取使用者資訊 * @param accessToken * @return * @

(十二)Java springcloud B2B2C o2o多使用者商城 springcloud架構-- SSO登入OAuth2.0 登出流程(3)

上一篇我根據框架中OAuth2.0的使用總結,畫了一個根據使用者名稱+密碼實現OAuth2.0的登入認證的流程圖,今天我們看一下logout的流程: /** * 使用者登出 * @param accessToken * @return */ @R

(十二)Java B2B2C多使用者商城 springboot架構-SSO登入OAuth2.0 登出流程(3)

上一篇我根據框架中OAuth2.0的使用總結,畫了一個根據使用者名稱+密碼實現OAuth2.0的登入認證的流程圖,今天我們看一下logout的流程: /** * 使用者登出 * @param accessToken * @return */ @R

CAS登入HelloWorld

本章將介紹一下CAS如何部署一個CAS應用 系統要求: 開始 一 、使用模版構建 cas在github上提供了官網的模版,可以進行快速構建以及版本的切換升級。 github上克隆映象 預設情況下

CAS登入生成證書

建立證書 證書是單點登入認證系統中很重要的一把鑰匙,客戶端於伺服器的互動安全靠的就是證書;由於是個人學習測試所以就直接用JDK自帶的keytool工具生成證書;如果以後真正在產品環境中使用肯定要去證書提供商去購買,證書認證一般都是由VeriSign認證,中文官方網站:http://www.ver

(十三)java springboot b2b2c多使用者商城系統分析 - SSO登入OAuth2.0 根據token獲取使用者資訊(4)

上一篇我根據框架中OAuth2.0的使用總結,畫了SSO單點登入之OAuth2.0 登出流程,今天我們看一下根據使用者token獲取yoghurt資訊的流程: ​ /** * 根據token獲取使用者資訊 * @param accessToken * @return * @

CAS-SSO 登入伺服器搭建 (linux下編譯cas-overlay-template )

(一)安裝包和環境依賴 jdk-8u171-linux-x64.tar apache-tomcat-8.5.31.tar apache-maven-3.5.3-bin.tar cas-overlay-template-master.zip 需要自行下載最新版本,官網

(十二)java springboot b2b2c shop 多使用者商城系統原始碼- SSO登入OAuth2.0 登出流程(3)

上一篇我根據框架中OAuth2.0的使用總結,畫了一個根據使用者名稱+密碼實現OAuth2.0的登入認證的流程圖,今天我們看一下logout的流程: /** * 使用者登出 * @param accessToken * @return */

(十一)JAVA springboot ssm b2b2c多使用者商城系統 - SSO登入OAuth2.0登入流程(2)

上一篇是站在巨人的肩膀上去研究OAuth2.0,也是為了快速幫助大家認識OAuth2.0,閒話少說,我根據框架中OAuth2.0的使用總結,畫了一個簡單的流程圖(根據使用者名稱+密碼實現OAuth2.0的登入認證):        上面的圖很清

(十二)JAVA springcloud ssm b2b2c多使用者商城系統原始碼-SSO登入OAuth2.0 登出流程(3)

上一篇我根據框架中OAuth2.0的使用總結,畫了一個根據使用者名稱+密碼實現OAuth2.0的登入認證的流程圖,今天我們看一下logout的流程: /** * 使用者登出 * @param accessToken * @return */ @R

登入CAS原理和實現

1.開源單點登入系統CAS入門 1.1 什麼是單點登入 單點登入(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。 我們目