基于repcached的主从的环境搭建

十年热恋 提交于 2019-12-12 22:28:32

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

 

1

2

3

4

5

6

7

环境:

CentOS 6.5 x86_64位 采用最小化安装,系统经过了基本优化

selinux 为关闭状态,iptables 为无限制模式

主机名:nolinux

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

libevent版本:2.0.21

memcached版本:1.4.20

 

一、基础环境准备

这里安装之前需要下载两个包libevent-2.0.22-stable.tar.gz,memcached-1.4.22.tar.gz

1

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

 

二、Memcached安装

1、安装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 ..

 

2、安装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

注意:如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径

 

三、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

四、启动配置

1、启动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

2、启动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]#

3、回到master节点

1

[root@master ~]# replication: accept  # 启动正常后,master 将 accept

 

五、测试

       由于我们主节点和从节点的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

优点:

1、能够实现 cache 的冗余功能

2、主从之间可以互相读写

缺点:

1、尽可以一主一从,单对单

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!