一直觉得nginx做负载不错了,可发现居然这玩意这么好,特别keepalived热备。
准备工作
本实验基于VMware+centos,以下是环境信息:
假如有4台服务器
master:192.168.153.132
backup:192.168.153.133
vip(virtual ip 虚拟ip):192.168.153.100 (实际浏览器访问的地址)
realserver 1: 192.168.153.128
realserver 2: 192.168.153.129
热备的意思就是master坏了,backup能补上去,由于都是使用vip,所以外面浏览器访问没有影响
realserver1和2是用来做负载均衡,按照权重来调到相应的服务器来处理请求。
lvs和keepalived都要装到master和backup上
下载keepalived和lvs的admin程序
1 | $ wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz |
1 | $ wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz |
安装依赖
1 | $ yum -y install libnl* openssl* popt* kernel-devel |
解压安装
1 | $ tar -zxvf keepalived-1.2.13.tar.gz |
1 | $ cd keepalived-1.2.13 |
1 | $ cd ipvsadm-1.26 |
验证lvs
1 | $ ipvsadm ln |
验证keepalived
1 | $ service keepalived start |
如果显示无误就代表安装成功了。
配置
配置master
1 | $ vi /etc/keepalived/keepalived.conf |
1 | global_defs { |
配置backup
基本跟master一致,只是在上面红色的第一处改成BACKUP,第二处改成比master小的值,例如90
重启keepalived
1 | $ service keepalived restart |
配置realserver
在real server 1和2上,把以下脚本放在/etc/rc.d/init.d/下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
# description: Config realserver lo and apply noarp
SNS_VIP=192.168.153.100
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
命名成realserver,然后可以用以下命令启动:1
$ service realserver start
关闭iptable
如果不想关掉的话
在master 加上以下规则1
-A INPUT -i eth1 -p vrrp -s 192.168.153.133 -j ACCEPT
在backup加上以下规则1
-A INPUT -i eth1 -p vrrp -s 192.168.153.132 -j ACCEPT
其实就是让热备之间可以通讯,注意eth1是你的网络接口,如果是eth0就要换成eth0
realserver就只要开启80端口就可以了。
验证
- 开启realserver的web应用程序
- 执行realserver脚本
- 开启master和backup的keepalived
- 用
watch ipvsadm -ln
在master和backup上可以查看状态
如果有两条记录分别指向realserver的ip就代表运行正确了。 - 浏览器访问
vip
,看能否正确访问web应用程序。 - 关掉master 的keepalived,如果还能访问的话,就代表backup接管了。
可以在backup的日志上面看到,tail -f /var/log/message
如果有transition MASTER
的,就代表接管了。 - 再启动master的keepalived,再到backup的日志上面看到
transition BACKUP
的,就代表已经交回master了。 - 关掉其中一个realserver,用
watch ipvsadm -ln
可以看到该realserver的ip被剔除了。