基於repcached的主從的環境搭建

 

1linux

2c++

3memcached

4函數

5測試

6優化

7ui

環境:spa

CentOS 6.5 x86_64位 採用最小化安裝,系統通過了基本優化.net

selinux 爲關閉狀態,iptables 爲無限制模式code

主機名:nolinux

源碼包存放位置:/usr/local/src

libevent版本:2.0.21

memcached版本:1.4.20

 

1、基礎環境準備

這裏安裝以前須要下載兩個包libevent-2.0.22-stable.tar.gz,memcached-1.4.22.tar.gz

1

[root@master ~]# yum -y install gcc gcc-c++

 

2、Memcached安裝

一、安裝libevent

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

[root@master ~]#cd /usr/local/src

[root@master src]# tar zxvf libevent-2.0.22-stable.tar.gz

[root@master src]# cd libevent-2.0.22-stable

[root@master libevent-2.0.22-stable#  ./configure --prefix=/usr

[root@master libevent-2.0.22-stable]#  make

[root@master libevent-2.0.22-stable]#  make install

[root@master libevent-2.0.22-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

[root@master libevent-2.0.21-stable]# cd ..

 

二、安裝memcached

1

2

3

4

5

6

7

8

9

[root@master src]# tar zxvf memcached-1.4.22.tar.gz

[root@master src]# cd memcached-1.4.20

[root@master memcached-1.4.20]# ./configure --with-libevent=/usr

[root@master memcached-1.4.20]# make

[root@master memcached-1.4.20]# make install

[root@master memcached-1.4.20]# cd ..

[root@master 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

注意:若是中間出現報錯,請仔細檢查錯誤信息,按照錯誤信息來配置或者增長相應的庫或者路徑

 

3、repcached安裝

方式一:使用repcached版本

1

2

3

[root@master src]# wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz

[root@master src]# tar zxf memcached-1.2.8-repcached-2.2.tar.gz

[root@master src]# cd memcached-1.2.8-repcached-2.2

方式二:使用patch版本

1

2

3

4

5

6

[root@master memcached-1.2.8-repcached-2.2]# wget http://downloads.sourceforge.net/repcached/repcached-2.2-1.2.8.patch.gz

[root@master memcached-1.2.8-repcached-2.2]# gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1

[root@master memcached-1.2.8-repcached-2.2]# ./configure --enable-replication

[root@master memcached-1.2.8-repcached-2.2]#  make

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

[root@master memcached-1.2.8-repcached-2.2]# cd ..

以上操做,咱們須要針對主節點和備節點都操做!這裏我僅僅以主節點的部署爲例!切記!

 

注意:make的時候報錯

memcached.c: 在函數‘add_iov’中:

memcached.c:696:30: 錯誤: ‘IOV_MAX’未聲明(在此函數內第一次使用)

memcached.c:696:30: 附註: 每一個未聲明的標識符在其出現的函數內只報告一次

make[2]: *** [memcached-memcached.o] 錯誤 1

須要修改 memcached.c 文件:

複製代碼

/* FreeBSD 4.x doesn't have IOV_MAX exposed. */

#ifndef IOV_MAX

#if defined(__FreeBSD__) || defined(__APPLE__)

# define IOV_MAX 1024

#endif

#endif

 

改爲:

 

/* FreeBSD 4.x doesn't have IOV_MAX exposed. */

#ifndef IOV_MAX

# define IOV_MAX 1024

#endif

4、啓動配置

一、啓動master

1

2

3

4

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

[root@master ~]# replication: listen 

 

[root@master ~]# replication: accept

注意:memcached啓動的時候會去/usr/lib64/目錄下尋找libevent-2.0.so.5文件而該文件安裝後是存在/usr/lib/目錄的,因此啓動時候報錯:memcached: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory

這裏須要作一個軟鏈接:若是安裝目錄跟我不同請根據本身的目錄來

ln -s /usr/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

二、啓動salve

1

2

3

4

5

6

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

[root@slave src]# replication: connect (peer=192.168.0.102:11212) 

replication: marugoto copying 

replication: start 

 

[root@slave src]#

三、回到master節點

1

[root@master ~]# replication: accept  # 啓動正常後,master 將 accept

 

5、測試

       因爲咱們主節點和從節點的memcached服務都騎起來了,而且監聽也都正常,因此如下的測試操做所有放到master節點進行。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

[root@master ~]# 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. 

[root@master ~]# 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. 

[root@master ~]# pkill memcached     # 如今,殺掉咱們主節點的memcached進程

replication: cleanup start 

replication: close 

replication: cleanup complete

[root@slave src]# replication: close  # 備節點此時變爲監聽狀態,即變成了主節點

replication: listen

 

[root@master ~]# 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. 

[root@master ~]# memcached -v -d -p 11211 -l 192.168.0.102 -u root -x 192.168.0.103 -P /tmp/memcached.pid   #  因爲memcached的主/從沒有搶佔功能,所以主恢復以後,只能做爲現有主節點的從節點[root@master ~]# replication: connect (peer=192.168.0.103:11212) 

replication: marugoto copying 

replication: start 

 

[root@slave src]# replication: accept    # 在上面加入以後,下面以前的從節點就會蹦出以下輸入,表示開啓同步

replication: marugoto start 

replication: marugoto 1 

replication: marugoto owari

[root@master ~]# 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

2

3

4

5

優勢:

一、可以實現 cache 的冗餘功能

二、主從之間能夠互相讀寫

缺點:

一、盡能夠一主一從,單對單

相關文章
相關標籤/搜索