这篇文档只讨论keepalived的基本应用,不深入讨论结合lvs的应用
OS:centos 5.10
主机A:
eth0: 192.168.1.204
vip: 192.168.1.207
tomcat+nginx
主机B
eth0: 192.168.1.206
vip: 192.168.1.207
tomcat+nginx
实现目标:平时主机A提供服务,B待命,当A主机当机或者nginx或者tomcat故障的时候,由主机B来充当web服务。当A主机恢复的时候,B的承担服务的责任再次交还给主机A。
这个方案虽然主机B提供服务器的概率不高,但实际效果还是很有效的,也不失为一个初级的热备方案
1:首相A,B俩主机时间同步
2:安装keepalived
yum -y install gcc make openssl openssl-devel wget kernel-devel |
wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz |
编译安装
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-371.8.1.el5-x86_64/ --disable-lvs |
或者(1.2.13版本)
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-371.8.1.el5-x86_64/ --disable-fwmark --disable-lvs make make install |
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ cp keepalived/etc/init.d/keepalived.rh.init /etc/init.d/keepalived cp keepalived/etc/init.d/keepalived.sysconfig /etc/sysconfig/keepalived |
chmod +x /etc/init.d/keepalived chkconfig --add keepalived chkconfig --level 3 keepalived on |
主机A配置:
vim /etc/keepalived/keepalived.conf |
global_defs { notification_email { username@email.com } notification_email_from username@email.com smtp_server 127.0.0.1 stmp_connect_timeout 30 router_id c3_204 #这个名字根据自己需要随便取 } vrrp_script chk_nginx { script "killall -0 nginx" #检查nginx进程 interval 1 #检查频率 1秒 weight -2 #如果发现nginx进程不在,优先级降低2 } vrrp_script chk_tomcat { script "killall -0 java" #检查tomcat进程 interval 1 #检查频率 1秒 weight -2 #如果发现tomcat进程不在,优先级降低2 } vrrp_instance shengzc { state BACKUP interface eth0 virtual_router_id 100 #这个ID A B主机必须保持一致 priority 151 #优先级,越大优先级越大 advert_int 1 track_interface { eth0 } authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.1.207 #192.168.1.207 dev eth0 label eth0:1 #如果想直接通过ifconfig显示eth0:1信息,用这个语法 } track_script { chk_nginx chk_tomcat } } |
主机B配置:
vim /etc/keepalived/keepalived.conf |
global_defs { notification_email { username@email.com } notification_email_from username@email.com smtp_server 127.0.0.1 stmp_connect_timeout 30 router_id c5_206 #这个名字根据自己需要随便取 } vrrp_script chk_nginx { script "killall -0 nginx" #检查nginx进程 interval 1 #检查频率 1秒 weight -2 #如果发现nginx进程不在,优先级降低2 } vrrp_script chk_tomcat { script "killall -0 java" #检查tomcat进程 interval 1 #检查频率 1秒 weight -2 #如果发现tomcat进程不在,优先级降低2 } vrrp_instance shengzc { state BACKUP interface eth0 virtual_router_id 100 #这个ID A B主机必须保持一致 priority 150 #优先级,越大优先级越大 advert_int 1 track_interface { eth0 } authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.1.207 #192.168.1.207 dev eth0 label eth0:1 #如果想直接通过ifconfig显示eth0:1信息,用这个语法 } track_script { chk_nginx chk_tomcat } } |
iptables设置:
vim /etc/sysconfig/iptables |
注意添加
-A RH-Firewall-1-INPUT -p vrrp -j ACCEPT |
否则会出现
May 14 11:16:37 s3 Keepalived_vrrp[7591]: VRRP_Instance(shengzc) Received lower prio advert, forcing new election
May 14 11:16:37 s3 Keepalived_vrrp[7591]: VRRP_Instance(shengzc) Sending gratuitous ARPs on eth0 for 192.168.1.207
类似这样的错误
好了,同时启动A B主机的keepalived
/etc/init.d/keepalived start |
可以测试关掉A机器的nginx进程 tomcat进程 或者断网 是否能切换到B机器那儿去