本文是根据其他博客+自己实践得来,不是纯粹的粘贴复制。大部分都是自己内容,如发现侵权请告知
keepalived+nginx双机热备
1 配置VIP
2 安装keepalived
3 配置keepalived
4 测试
服务器准备
172.16.0.91 主
172.16.0.93 备
VIP:172.16.0.16
1.1 配置VIP
1.1.1方法1
此配置在服务器或者网络重启后会失效
增加:ifconfig eth0:0 192.168.0.99 netmask 255.255.255.0
移除:ip addr del 192.168.0.99 dev eth0:0
1.1.2 方法2
修改配置文件,使配置在主机重启后自动生效
vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
E=eth0:0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
DNS1=192.168.0.255
IPADDR=192.168.0.99
NETMASK=255.255.255.0
GETWAY=192.168.0.255
配置后重启网络服务后生效
service network restart
1.2 配置VIP后
ifconfig 查看
结果
eth0 Link encap:Ethernet HWaddr 52:54:00:07:52:0A
inet addr:172.16.0.91 Bcast:172.16.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21108603 errors:0 dropped:0 overruns:0 frame:0
TX packets:19325869 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5067698587 (4.7 GiB) TX bytes:3457653139 (3.2 GiB)
eth0:1 Link encap:Ethernet HWaddr 52:54:00:07:52:0A
inet addr:172.16.0.16 Bcast:172.16.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:722997 errors:0 dropped:0 overruns:0 frame:0
TX packets:722997 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:352078592 (335.7 MiB) TX bytes:352078592 (335.7 MiB)
配置成功
/我是分割线*/
2.1 安装keepalived
本项目使用 keepalived-1.2.21.tar.gz
2.2 解压 keepalived-1.2.21.tar.gz
2.3 ./configure
2.4 make & make install
2.5 复制与创建
cp /usr/local/sbin/keepalived /usr/sbin/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
/我是分割线*/
3.1 172.16.0.91 keepalived 主配置文件
! 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_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port {
script "/usr/local/nginx/sbin/check_nginx.sh" #所要监测的script
interval 1 #每隔一秒执行一次脚本
weight -20 #权重减20
}
vrrp_instance VI_1 {
state MASTER #主机
interface eth0 #vip配置所在的网卡
virtual_router_id 51 #默认
priority 100 #权重
advert_int 1 #默认
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.0.16 #很重要VIP
}
track_script {
chk_http_port
}
}
百度拿来用
state 指定实例初始化的状态,如果都是backup,那么就按照priority的值来确定谁是master。Priority最好相差50
interface 就是实例绑定的网卡,对外提供服务的网口
track_interface 设置额外的监控,里面的任意一个网卡出错,都会进入FAULT状态。
mcast_src_ip 发送多播包的地址,如果不设置,默认使用绑定的网卡的primary IP。
virtual_router_id VRID标记(0-255)
priority 高优先级的为master,最好相差大于50
advert_int 检查间隔时间,默认1s
virtual_ipaddress 里面指定VIP,也就是切换到master时,这些IP会被添加,切换到backup时,就删除这些VIP。通过ip addr show 可以看到这些VIP。
lvs_sync_daemon_interface lvs syncd绑定的网卡,类似发送心跳
authentication 这一段设置认证
auth_type 认证方式,支持PASS和HA(据说HA有问题)
auth_pass 认证密码
nopreempt 设置不抢占,注意这个设置只能设置在backup状态主机上,而且这个主机的priority必须比另外的主机高
reempt_delay 抢占延迟,默认5分钟
3.2 172.16.0.93 备配置文件不解释
! 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_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_http_port {
script "/usr/local/nginx/sbin/check_nginx.sh"
interval 1
weight -2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
172.16.0.16
}
}
3.3 check_nginx.sh 脚本内容
监测nginx是否正常,nginx没有进程则keepalived服务关闭
#!/bin/bash
nginxpid=`ps -C nginx --no-header | wc -l`
if [ $nginxpid -eq 0 ]; then
service keepalived stop
echo "nginxpid is ${nginxpid}"
fi
3.4 启动
主备启动
service keepalived start
/我是分割线*/
4.1 查看keepalived日志
172.16.0.92 主
Jun 21 10:33:27 cloud0 Keepalived_vrrp[27866]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 10:33:32 cloud0 Keepalived_vrrp[27866]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 10:33:32 cloud0 Keepalived_vrrp[27866]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 172.16.0.16
Jun 21 10:33:32 cloud0 Keepalived_vrrp[27866]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 10:33:32 cloud0 Keepalived_vrrp[27866]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 10:33:32 cloud0 Keepalived_vrrp[27866]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 10:33:32 cloud0 Keepalived_vrrp[27866]: Sending gratuitous ARP on eth0 for 172.16.0.16
4.2 访问 nginx http://172.16.0.16 显示91 地址
4.3 执行操作 ./nginx -s stop
主备切换
172.16.0.93 备 keepalived日志
Jun 21 17:41:20 cloud2 Keepalived_vrrp[5502]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jun 21 17:41:21 cloud2 Keepalived_vrrp[5502]: VRRP_Instance(VI_1) Entering MASTER STATE
Jun 21 17:41:21 cloud2 Keepalived_vrrp[5502]: VRRP_Instance(VI_1) setting protocol VIPs.
Jun 21 17:41:21 cloud2 Keepalived_vrrp[5502]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 17:41:21 cloud2 Keepalived_vrrp[5502]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 172.16.0.16
Jun 21 17:41:21 cloud2 Keepalived_vrrp[5502]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 17:41:21 cloud2 Keepalived_vrrp[5502]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 17:41:21 cloud2 Keepalived_vrrp[5502]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 17:41:21 cloud2 Keepalived_vrrp[5502]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 17:41:21 cloud2 Keepalived_healthcheckers[5501]: Netlink reflector reports IP 172.16.0.16 added
Jun 21 17:41:26 cloud2 Keepalived_vrrp[5502]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 17:41:26 cloud2 Keepalived_vrrp[5502]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 172.16.0.16
Jun 21 17:41:26 cloud2 Keepalived_vrrp[5502]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 17:41:26 cloud2 Keepalived_vrrp[5502]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 17:41:26 cloud2 Keepalived_vrrp[5502]: Sending gratuitous ARP on eth0 for 172.16.0.16
Jun 21 17:41:26 cloud2 Keepalived_vrrp[5502]: Sending gratuitous ARP on eth0 for 172.16.0.1