Memcached 服务器集群安装配置和高可用测试
1.在所有的节点上服务器上安装配置相应的软件包;
本文测试环境ip
10.0.0.2
10.0.0.4
一、安装步骤:
1、编译安装libevent:
tar zxvf libevent-1.4.11-stable.tar.gzble.tar.gz
cd libevent-1.4.11-stable.tar.gzble/
./configure --prefix=/usr/
make && make install
cd ../
2、编译安装Memcached:
tar zxvf memcached-1.2.8.tar.gzr.gz
cd memcached-1.2.6/
./configure --with-libevent=/usr
make && make install
cd ../
3、编译安装magent:
mkdir magent
cd magent/
tar zxvf magent-0.5.tar.gz
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make
cp magent /usr/bin/magent
cd ../
-----------------安装magent如果出现如下错误
gcc -Wall -O2 -g -c -o magent.o magent.c
magent.c: 在函数‘writev_list’中:
magent.c:623: 错误:‘SSIZE_MAX’未声明(在此函数内第一次使用)
magent.c:623: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
magent.c:623: 错误:所在的函数内也只报告一次。)
make: *** [magent.o] 错误 1
在ketama.h中加入
#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
一、打开防火墙端口
在所有安装memcache的节点服务器上
打开防火墙的对外端口11211
/sbin/iptables -I INPUT -p tcp --dport 11211 -j ACCEPT #开启8011端口
/etc/rc.d/init.d/iptables save #保存配置
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
/etc/rc.d/init.d/iptables restart #重启服务
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
查看端口是否已经开放
/etc/init.d/iptables status
结果如下
[root@root ~]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:11211
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
以上表示11211端口都已经开放,并可以被其他局域网服务访问。
二、启动memcache服务和magent代理服务
也就是说通过magent能够写入两个memcached。
在节点服务器10.0.0.2 的操作步骤是:
启动memcached
memcached -m 1 -u root -d -l 10.0.0.2 -p 11211
代理10.0.0.2 10.0.0.4 的memcached节点,并做互备;
magent -u root -n 51200 -l 10.0.0.2 -p 12000 -s 10.0.0.4:11211 -b 10.0.0.2:11211 -s 10.0.0.2:11211 -b 10.0.0.4:11211
在节点服务器10.0.0.4的操作步骤是:
启动memcached
memcached -m 1 -u root -d -l 10.0.0.4 -p 11211
代理10.0.0.2 10.0.0.4 的memcached节点,并做互备;
magent -u root -n 51200 -l 10.0.0.4 -p 12000 -s 10.0.0.4:11211 -b 10.0.0.2:11211 -s 10.0.0.2:11211 -b 10.0.0.4:11211
三、环境验证
在节点服务器10.0.0.2 的操作步骤是:
验证是否memcached启动成功
#telnet 10.0.0.2 11211
如显示如下信息:
Trying 10.0.0.2...
Connected to 10.0.0.2 (10.0.0.2).
Escape character is '^]'.;
说明连接10.0.0.2机器的memcached的11211成功,否则连接不成功。
验证是否代理是否启动成功
[root@root ~]# telnet 10.0.0.2 12000
Trying 10.0.0.2...
Connected to 10.0.0.2.
Escape character is '^]'.
用stats测试代理2个节点成功
stats
memcached agent v0.4
matrix 1 -> 10.0.0.4:11211, pool size 0
matrix 2 -> 10.0.0.2:11211, pool size 1
END
说明连接10.0.0.4magen代理成功,否则连接不成功。
#quit (退出telnet)
在节点服务器10.0.0.4的操作步骤是:
验证是否memcached启动成功
#telnet 10.0.0.4 11211
如显示如下信息:
Trying 10.0.0.4...
Connected to 10.0.0.4 (10.0.0.4).
Escape character is '^]'.;
说明连接10.0.0.4机器的memcached的11211成功,否则连接不成功。
验证是否代理是否启动成功
[root@root ~]# telnet 10.0.0.4 12000
Trying 10.0.0.4...
Connected to 10.0.0.4.
Escape character is '^]'.
用stats测试代理2个节点成功
stats
memcached agent v0.4
matrix 1 -> 10.0.0.4:11211, pool size 0
matrix 2 -> 10.0.0.2:11211, pool size 1
END
说明连接10.0.0.4magen代理成功,否则连接不成功。
#quit (退出telnet)
四、高可用验证
1. 集群读写测试
在节点服务器10.0.0.4 magent代理写入数据:
[root@root ~]# telnet 10.0.0.4 12000
Trying 10.0.0.4...
Connected to 10.0.0.4.
Escape character is '^]'.
set userId 0 0 5
zhang
STORED
成功写入数据
quit
退出
在节点服务器10.0.0.4 memcached读取数据:
[root@root ~]# telnet 10.0.0.4 11211
Trying 10.0.0.4...
Connected to 10.0.0.4.
Escape character is '^]'.
get userId
VALUE userId 0 5
zhang
END
以上信息证明10.0.0.4 memcache保存了正确的数据了
在节点服务器10.0.0.2 magent代理 读取数据:
[root@root ~]# telnet 10.0.0.2 12000
Trying 10.0.0.2...
Connected to 10.0.0.2.
Escape character is '^]'.
stats
memcached agent v0.4
matrix 1 -> 10.0.0.4:11211, pool size 0
matrix 2 -> 10.0.0.2:11211, pool size 1
END
get userId
VALUE userId 0 5
zhang
END
以上信息证明10.0.0.2中的magent可以得到10.0.0.4magent写入的争取数据了;
在节点服务器10.0.0.2 memcached读取数据:
[root@root ~]# telnet 10.0.0.2 11211
Trying 10.0.0.2...
Connected to 10.0.0.2.
Escape character is '^]'.
get userId
VALUE userId 0 5
zhang
END
以上信息证明10.0.0.4 memcache保存了正确的数据了
2. 集群读写测试
先把10.0.0.2的magent down掉;
[root@root ~]# ps aux|grep mag
root 2995 0.0 0.0 17360 576 ? Ss Jan14 0:00 magent -u root -n 51200 -l 10.0.0.2 -p 12000 -s 10 .0.4:11211 -b 10.0.0.2:11211 -s 10.0.0.2:11211 -b 10.0.0.4:11211
root 3219 0.0 0.0 6384 656 pts/1 S+ 00:14 0:00 grep mag
[root@root ~]# kill 2995
[root@root ~]# ps aux|grep mag
root 3221 0.0 0.0 6384 660 pts/1 S+ 00:15 0:00 grep mag
[root@root ~]#
在另一台节点服务器10.0.0.4上测试数据userId是否存在
[root@root ~]# telnet 10.0.0.4 11211
Trying 10.0.0.4...
Connected to 10.0.0.4.
Escape character is '^]'.
get userId
VALUE userId 0 5
zhang
END
以上信息表示信息没有丢,这样就保证了memcache的高可用性了;