Nginx + Keepalived高可用

1、环境准备

角色IP
nginx-master10.10.10.98
nginx-backup10.10.10.99
apache10.10.10.66
apache10.10.10.67
vip10.10.10.55

2、nginx-master & nginx-backup主机安装nginx

]# yum -y install gcc pcre-devel openssl-devel
]# tar -xvf nginx-1.12.2.tar.gz 
]# cd nginx-1.12.2
]# ./configure 
]# make && make install

3、apache主机安装httpd

~]# yum -y install httpd
~]# systemctl start httpd
~]# echo "this is apache-66" > /var/www/html/index.html
~]# echo "this is apache-67" > /var/www/html/index.html
~]# curl 10.10.10.66
this is apache-66
~]# curl 10.10.10.67
this is apache-67

4、nginx-master修改nginx配置文件

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    upstream webserver{
        server 10.10.10.66:80;
        server 10.10.10.67:80;
        }

    server {
        listen       80;
        server_name  www.webserver.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://webserver;
            root   html;
            index  index.html index.htm;
        }

5、启动nginx

]# /usr/local/nginx/sbin/nginx
]# scp /usr/local/nginx/conf/nginx.conf root@10.10.10.99:/usr/local/nginx/conf/
]# /usr/local/nginx/sbin/nginx      # nginx-backup执行
]# curl 10.10.10.98
this is apache-66
]# curl 10.10.10.98
this is apache-67
]# curl 10.10.10.99
this is apache-66
]# curl 10.10.10.99
this is apache-67

6、nginx-master & nginx-backup主机安装keepalived

]# yum -y install keepalived
]# systemctl start keepalived

nginx-master修改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 lb01
   vrrp_iptables
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
   vrrp_script check_nginx_port{       # 定义监控脚本
   script "/etc/keepalived/nginx.sh"
   interval 2
   weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.55
    }
    track_script {
    check_nginx_port   # 执行 nginx 监控的服务,要与上面名称相同
    }
}
virtual_server 10.10.10.55 80 {   # 虚拟ip和nginx访问端口
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 5
    protocol TCP


    real_server 10.10.10.98 80 {   # 物理机ip端口
        weight 1
        notify_down /etc/keepalived/nginx.sh
TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80    #监测的nginx的访问的TCP端口
        }
    }
}

7、nginx-backup修改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 lb02
   vrrp_iptables
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
   vrrp_script check_nginx_port{
   script "/etc/keepalived/nginx.sh"
   interval 2
   weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.55
    }
    track_script {
    check_nginx_port
 }
}
virtual_server 10.10.10.55 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 5
    protocol TCP


    real_server 10.10.10.99 80 {
        weight 1
        notify_down /etc/keepalived/nginx.sh
TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

监控脚本

 ]# more /etc/keepalived/nginx.sh  
#/bin/bash
d=`date +%Y%m%d_%H:%M:%S`
while true
do
code=`netstat -ntulp | grep nginx | wc -l`
if [ $code -eq 0 ];then
echo "$d nginx down!" >> /var/log/check_nginx.log
systemctl stop keepalived
fi
sleep 5
done 

8、 重启keepalived,98主机占有vip

]# systemctl restart keepalived  
]# ip a s
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:26:fa:3d brd ff:ff:ff:ff:ff:ff
   inet 10.10.10.98/24 brd 10.10.10.255 scope global noprefixroute ens33
      valid_lft forever preferred_lft forever
   inet 10.10.10.55/32 scope global ens33
      valid_lft forever preferred_lft forever
   inet6 fe80::831f:123b:cf85:b731/64 scope link noprefixroute 
      valid_lft forever preferred_lft forever
      
]# curl 10.10.10.55
this is apache-66
]# curl 10.10.10.55
this is apache-67

9、测试,停止98主机nginx服务模拟故障,99主机查看ip发现vip已经飘到99了

]# /usr/local/nginx/sbin/nginx -s stop
]# ip a s
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:6d:94:5b brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.99/24 brd 10.10.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 10.10.10.55/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::87c1:4925:5c0c:9085/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值