ubuntu16.04 nginx+keepalived主从搭建

nginx+keepalived配置

<!--PS:主从都需要安装-->

主ip:192.168.125.129

从ip:192.168.125.128

vip ip(虚拟ip):192.168.125.99

安装keepalived

sudo apt-get install keepalived -y

安装nginx

安装nginx依赖

sudo apt-get -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

安装nginx

sudo apt-get install nginx -y

配置keepalived

查看主从机的ip等信息

ip addr
  • 查看ip地址

  • 查看ens

主机配置文件:

文件路径:/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_skip_check_adv_addr
 #  vrrp_strict
 #  vrrp_garp_interval 0
 #  vrrp_gna_interval 0
#}
vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
        weight -20
}
vrrp_instance VI_1 {
    state MASTER # 标识为主服务
    interface ens33 #绑定虚拟机的IP  与主机的ens相同
    virtual_router_id 51 # 虚拟路由id,和从机保持一致
    #mcast_src_ip 192.168.125.129 #本机ip
    priority 100 #权重,需要高于从机
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
   track_script {
                chk_nginx ## 执行 Nginx 监控的服务
        }
    virtual_ipaddress {
        192.168.125.99 #/32 brd 255.255.255.0 dev ens33 label ens33:vip #虚拟IP地址
    }
}

从机配置文件

文件路径:/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 dreamer1
#   vrrp_skip_check_adv_addr
#   vrrp_strict
#   vrrp_garp_interval 0
#   vrrp_gna_interval 0
#}
vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
        interval 2 ## 检测时间间隔
        weight -20 ## 如果条件成立,权重-20
}
​
vrrp_instance VI_1 {
    state BACKUP
    interface ens33  # 与本地的ens相同
    virtual_router_id 51
    #mcast_src_ip 192.168.125.128 ## 本机 IP 地址 
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
        track_script {
                chk_nginx ## 执行 Nginx 监控的服务
        }
    virtual_ipaddress {
        192.168.125.99
    }
}

 

主从机配置nginx_check.sh文件(检测心跳文件)

文件地址:/etc/keepalived/keepalived.conf

查看nginx是否启动,如果没启动则启动,如果启动不起来,停掉keepalived服务,此时心跳断掉,服务转向另一个nginx。

#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    /usr/sbin/nginx     # nginx启动文件
    sleep 2     # 两秒检测一次
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
        /etc/init.d/keepalived stop
    fi
fi

为脚本添加可执行权限

chmod +x /etc/keepalived/nginx_check.sh

启动服务

启动nginx

systemctl start nginx   # 启动Nginx服务
systemctl stop nginx    # 停止Nginx服务
systemctl restart nginx # 重启Nginx服务
systemctl enable nginx  # 开机自启Nginx服务
nginx -t                # 检查配置文件正确性
nginx -s reload         # 平滑重载配置

 

启动keepalived

service keepalived start    # 启动keepalived
service keepalived stop     # 停止keepalived
service keepalived restart  # 重新启动keepalived

 

PS:建议将nginx和keepalived添加自启动

检验

查看虚拟ip是否配置成功

ip addr

 

配置成功后,在主机上面可以看到虚拟ip,从机上面不会看到。

例如:

主:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:fe:3f:34 brd ff:ff:ff:ff:ff:ff
    inet 192.168.125.129/24 brd 192.168.125.255 scope global dynamic ens33
       valid_lft 1612sec preferred_lft 1612sec
    inet 192.168.125.99/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::82a3:5040:11c4:1748/64 scope link 
       valid_lft forever preferred_lft forever

 

从:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:3f:08:b5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.125.128/24 brd 192.168.125.255 scope global dynamic ens33
       valid_lft 1602sec preferred_lft 1602sec
    inet6 fe80::4f2:3faf:5202:4265/64 scope link 
       valid_lft forever preferred_lft forever

 

检验

修改主从机的网页

文件路径:/var/www/html/index.nginx-debian.html

在主机上面加上主机字样,从机上面机上从机字样,以便区分

检验是否配置成功

  1. 查看192.168.125.99(虚拟ip),看一下网页是否与192.168.125.129(主机ip)的网页相同

  2. 关闭主机的keepalived

    1. service keepalived stop

  3. 查看192.168.125.99(虚拟ip),看一下网页是否为192.168.125.128(从机ip)的网页

  4. 如果关闭后切换成了从机的网页,那么说明配置成功!!!

posted @ 2019-10-17 16:03  xiaoxia0722  阅读(343)  评论(0)    收藏  举报