zoukankan      html  css  js  c++  java
  • nginx与keepalived实现高可用

    准备四台虚拟机,一台master主服务器(安装nginx、keepalived),一台backup从服务器(安装nginx、keepalived),两台Web测试机(安装apache)

    对所有虚拟机关闭防火墙和安全机制

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# iptables -F
    [root@localhost ~]# setenforce 0

    一、master主机

    1、安装keepalived

    [root@localhost ~]# yum -y install keepalived

    2、安装nginx

    [root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel
    [root@localhost ~]# yum -y install gcc gcc-c++ make
    [root@localhost ~]# useradd -M -s /sbin/nologin nginx
    [root@localhost ~]# tar -xf nginx-1.15.9.tar.gz -C /usr/src/
    [root@localhost ~]# cd /usr/src/nginx-1.15.9/
    [root@localhost ~]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
    [root@localhost ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    [root@localhost ~]# nginx
    [root@localhost ~]# netstat -lnpt | grep :80
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      13144/nginx: master

    3、修改nginx的配置文件(实现轮询效果)

    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
    。。。。。。。。。
    upstream httpd1 { server
    192.168.200.113:80 weight=1; server 192.168.200.114:80 weight=1; } server { listen 80; server_name localhost; charset utf-8; location / { root html; index index.html index.htm; proxy_pass http://httpd1; proxy_set_header Host $host; } 。。。。。。。。。。

    4、修改keepalived配置文件(实现VIP的转让功能)

    [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 check_nginx { script
    "/shell/nginx_check.sh" interval 2 //等待时间 weight -20 //权重 ,如果机器出现故障,那么主服务器的优先级会低于从服务器20,那么VIP会自动跳转到副机上 } vrrp_instance VI_1 { state MASTER //主 interface eno16777728 //心跳网卡 virtual_router_id 51 priority 100 //优先级 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.200.201 } track_script { check_nginx //引用脚本 } }

    [root@localhost ~]# systemctl restart keepalived

    5、编写脚本(配置周期性任务)

    [root@localhost ~]# mkdir /shell
    [root@localhost ~]# vim /shell/nginx_check.sh
    #!/bin/bash
    count="$(ps -C nginx --no-header | wc -l)"    //查看nginx运行的进程,去除头部并统计行数
    if [ $count -eq 0 ]
    then
            /usr/local/nginx/sbin/nginx    //开启nginx
            if [ $count -eq 0]
            then
                    systemctl stop keepalived
            fi
    fi

    6、查看VIP

    [root@localhost ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:9b:5c:f0 brd ff:ff:ff:ff:ff:ff
        inet 192.168.200.111/24 brd 192.168.200.255 scope global eno16777728
           valid_lft forever preferred_lft forever
        inet 192.168.200.201/32 scope global eno16777728
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe9b:5cf0/64 scope link 
           valid_lft forever preferred_lft forever

    二、backup主机

    1、2、3、5省略,与master的配置相同

    4、修改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 check_nginx {
        script "/shell/nginx_check.sh"
        interval 2
        weight -20
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface eno16777728
        virtual_router_id 51
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.200.201
        }
        track_script {
        check_nginx
        }
    }
    
    [root@localhost ~]# systemctl restart keepalived

    三、两台测试机安装apache,并编写测试文件

    [root@localhost ~]# yum -y install httpd
    [root@localhost ~]# systemctl start httpd
    [root@localhost ~]# echo "111111" > /var/www/html/index.html  

    第二台服务器上编写22222222

    四、测试

     如果主服务器的keepalived服务出现故障,VIP会自动跳转到从服务器,如下所示:

    ####主服务器上######
    [root@localhost ~]# systemctl stop keepalived
    [root@localhost ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:9b:5c:f0 brd ff:ff:ff:ff:ff:ff
        inet 192.168.200.111/24 brd 192.168.200.255 scope global eno16777728
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe9b:5cf0/64 scope link 
           valid_lft forever preferred_lft forever
    
    #####从服务器#######
    [root@localhost ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:ec:88:30 brd ff:ff:ff:ff:ff:ff
        inet 192.168.200.112/24 brd 192.168.200.255 scope global eno16777728
           valid_lft forever preferred_lft forever
        inet 192.168.200.201/32 scope global eno16777728
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:feec:8830/64 scope link 
           valid_lft forever preferred_lft forever

    将主服务器的keepalived重新打开之后,VIP回到主服务器上

    #####主服务器#####
    [root@localhost ~]# systemctl start keepalived
    [root@localhost ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:9b:5c:f0 brd ff:ff:ff:ff:ff:ff
        inet 192.168.200.111/24 brd 192.168.200.255 scope global eno16777728
           valid_lft forever preferred_lft forever
        inet 192.168.200.201/32 scope global eno16777728
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe9b:5cf0/64 scope link 
           valid_lft forever preferred_lft forever
    
    #####从服务器#######
    [root@localhost ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:ec:88:30 brd ff:ff:ff:ff:ff:ff
        inet 192.168.200.112/24 brd 192.168.200.255 scope global eno16777728
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:feec:8830/64 scope link 
           valid_lft forever preferred_lft forever
  • 相关阅读:
    [android]Xutils具体介绍
    2015:WPS笔试-Android开发岗位
    BZOJ1355: [Baltic2009]Radio Transmission
    HDU 1421 搬寝室 (线性dp 贪心预处理)
    【独立开发人员er Cocos2d-x实战 009】Cocos2dx 菜单项CCMenu使用
    Error configuring application listener of
    SVN分支/合并原理及最佳实践
    SVN创建分支/合并分支/切换分支
    如何转载别人的文章
    让div自适应浏览器窗口居中显示
  • 原文地址:https://www.cnblogs.com/tanxiaojuncom/p/11635187.html
Copyright © 2011-2022 走看看