nginx+keepalived双机热备

本文是根据其他博客+自己实践得来,不是纯粹的粘贴复制。大部分都是自己内容,如发现侵权请告知

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

4.3 访问 nginx http://172.16.0.16 显示93 地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值