Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
192.168.28.135服务器
[root@localhost ~]# yum -y install keepalived
[root@localhost ~]# yum -y install ipvsadm
解决nginx依赖关系
[root@localhost ~]# yum -y install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
下载nginx
Wegt http://nginx.org/download/nginx-1.6.0.tar.gz
[root@localhost ~]# tar xf nginx-1.6.0.tar.gz
编译安装nginx
[root@localhost ~]# cd nginx-1.6.0
[root@localhost nginx-1.6.0]# ./configure --prefix=/usr/local/nginx && make && make install
配置Nginx
[root@localhost ~]# vim /usr/local/nginx/html/index.html
Welcome to nginx! 1
测试nginx是否安装成功
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx
重启nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
设置nginx开机启动
[root@localhost ~]# vim /etc/rc.local
加入
/usr/local/nginx/sbin/nginx
Keepalived配置
[root@localhost ~]# chkconfig keepalived on
Keepalived配置文件
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.28.130
}
}
}
编写nginx状态检测脚本
编写 Nginx 状态检测脚本 /etc/keepalived/nginx_check.sh (已在 keepalived.conf 中配置)脚本要求:如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程, keepalied将虚拟 ip 绑定到 BACKUP 机器上。
[root@localhost ~]# vim /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
脚本加权限
[root@localhost ~]# chmod +x /etc/keepalived/nginx_check.sh
启动keepalived服务
[root@localhost ~]# service keepalived start
正在启动 keepalived: [确定]
[root@localhost ~]# ip a
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:32:c1:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.28.135/24 brd 192.168.28.255 scope global eth0
inet 192.168.28.130/32 scope global eth0
inet6 fe80::20c:29ff:fe32:c19e/64 scope link
valid_lft forever preferred_lft forever
3: pan0: mtu 1500 qdisc noop state DOWN
link/ether 96:04:a4:58:4f:72 brd ff:ff:ff:ff:ff:ff
192.168.28.129服务器
[root@localhost ~]# yum -y install nginx keepalived
[root@localhost ~]# yum -y install ipvsadm
解决nginx依赖关系
[root@localhost ~]# yum -y install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
下载nginx
Wegt http://nginx.org/download/nginx-1.6.0.tar.gz
[root@localhost ~]# tar xf nginx-1.6.0.tar.gz
编译安装nginx
[root@localhost ~]# cd nginx-1.6.0
[root@localhost nginx-1.6.0]# ./configure --prefix=/usr/local/nginx && make && make install
配置Nginx
[root@localhost ~]# vim /usr/local/nginx/html/index.html
Welcome to nginx! 1
测试nginx是否安装成功
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx
重启nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
设置nginx开机启动
[root@localhost ~]# vim /etc/rc.local
加入
/usr/local/nginx/sbin/nginx
Keepalived配置
[root@localhost ~]# chkconfig keepalived on
Keepalived配置文件
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
mcast_src_ip 192.168.28.129
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.28.130
}
}
}
编写nginx状态检测脚本
编写 Nginx 状态检测脚本 /etc/keepalived/nginx_check.sh (已在 keepalived.conf 中配置)脚本要求:如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程, keepalied将虚拟 ip 绑定到 BACKUP 机器上。
[root@localhost ~]# vim /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
脚本加权限
[root@localhost ~]# chmod +x /etc/keepalived/nginx_check.sh
启动keepalived服务
[root@localhost ~]# service keepalived start
正在启动 keepalived: [确定]
[root@localhost ~]# ip a
1: lo: mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:6a:b8:4b brd ff:ff:ff:ff:ff:ff
inet 192.168.28.129/24 brd 192.168.28.255 scope global eth0
inet 192.168.28.130/32 scope global eth0
inet6 fe80::20c:29ff:fe6a:b84b/64 scope link
valid_lft forever preferred_lft forever
3: pan0: mtu 1500 qdisc noop state DOWN
link/ether b2:95:84:54:6f:36 brd ff:ff:ff:ff:ff:ff
测试nginx页面
Keepalived+Nginx 的高可用测试
关闭192.168.28.135服务keepalived
[root@localhost ~]# service keepalived stop
停止 keepalived: [确定]
在浏览器中输入VIP地址
在开启192.168.28.135服务keepalived
[root@localhost ~]# service keepalived start
正在启动 keepalived: [确定]
关闭192.168.28.129服务keepalived
[root@localhost ~]# service keepalived stop
停止 keepalived: [确定]
在浏览器中输入VIP地址