基于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 的冗余功能

二、主从之间能够互相读写

缺点:

一、尽能够一主一从,单对单

相关文章
相关标签/搜索