美文网首页
三、架构02-Keepalived+Nginx+双主模型实现站点

三、架构02-Keepalived+Nginx+双主模型实现站点

作者: 无法成为野兽 | 来源:发表于2019-02-20 17:16 被阅读0次

    一、Nginx+Keepalived实现站点高可用、

    1、架构图
    image.png
    2、环境:

    node01:192.168.32.132 keepalived
    node02:192.168.32.128 keepalived
    node03:192.168.32.131 web01
    node03:192.168.32.134 web02
    node03:192.168.32.135 web03

    3、配置web服务
    [root@node03 conf.d]# vim /etc/hosts
    192.168.32.132 node01 node01.hehe.com
    192.168.32.128 node02 node02.hehe.com
    192.168.32.131 node03 node03.hehe.com
    192.168.32.134 node03 node03.hehe.com
    192.168.32.135 node03 node03.hehe.com
    192.168.32.133 node04 node04.hehe.com
    [root@node03 ~]# yum install -y httpd
    [root@node03 conf.d]# vim vhosts.conf
    <VirtualHost 192.168.32.131:80>
        ServerName 192.168.32.131
        DocumentRoot "/data/web/vhost1"
        <Directory "/data/web/vhost1">
            Options FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>
    </VirtualHost>
    <VirtualHost 192.168.32.134:80>
        ServerName 192.168.32.134
        DocumentRoot "/data/web/vhost2"
        <Directory "/data/web/vhost2">
            Options FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>
    </VirtualHost>
    <VirtualHost 192.168.32.135:80>
        ServerName 192.168.32.135
        DocumentRoot "/data/web/vhost3"
        <Directory "/data/web/vhost3">
            Options FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>
    </VirtualHost>
    [root@node03 conf.d]# mkdir -pv /data/web/vhost{1,2,3}
    [root@node03 conf.d]# vim /data/web/vhost1/index.html
    <h1>Vhost2</h1>
    [root@node03 conf.d]# vim /data/web/vhost2/index.html
    <h1>Vhost2</h1>
    [root@node03 conf.d]# vim /data/web/vhost3/index.html
    <h1>Vhost3</h1>
    [root@node03 conf.d]# systemctl start httpd
    
    4、配置node01keepalived服务
    [root@node01 ~]# yum install -y keepalived
    [root@node01 ~]# yum install -y nginx
    [root@node01 ~]# vim /etc/hosts
    192.168.32.132 node01 node01.hehe.com
    192.168.32.128 node02 node02.hehe.com
    192.168.32.131 node03 node03.hehe.com
    192.168.32.134 node03 node03.hehe.com
    192.168.32.135 node03 node03.hehe.com
    192.168.32.133 node04 node04.hehe.com
    [root@node01 keepalived]# ls
    keepalived.conf  keepalived.conf.bak  keep_down.sh  notify.sh
    [root@node01 keepalived]# keepalived.conf
    ! Configuration File for keepalived
    global_defs {
       notification_email {
            root@localhost
    }
       notification_email_from keepalived@localhost
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id node01
       vrrp_mcast_group4 224.1.101.33
    }
    vrrp_script chk_down {
        script "/etc/keepalived/keep_down.sh"
        weight -10
        interval 1
        fall 1
        rise 1
    }
    vrrp_instance VI_1 {
        state MASTER
        priority 100
        interface ens33
        virtual_router_id 51
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass IGsPtR1X3w
        }
        virtual_ipaddress {
            192.168.32.188/16 dev ens33 label ens33:0
        }
        track_script {
            chk_down
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
    }
    vrrp_instance VI_2 {
        state BACKUP
        priority 96
        interface ens33
        virtual_router_id 50
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass IGsPt3w
        }
        virtual_ipaddress {
            192.168.32.166/16 dev ens33 label ens33:1
        }
        track_script {
            chk_down
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
    }
    [root@node01 keepalived]# vim notify.sh
    #!/bin/bash
    #
    contact='root@localhost'
    notify() {
            local mailsubject="$(hostname) to be $1, vip floating"
            local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
            echo "$mailbody" | mail -s "$mailsubject"  $contact
    }
    case $1 in
    master)
            notify master
            systemctl start nginx
            ;;
    backup)
            systemctl start nginx
            notify backup
            ;;
    fault)
            systemctl stop nginx
            notify fault
            ;;
    *)
            echo "Usage: $(basename $0) {master|backup|fault}"
            exit 1
            ;;
    esac
    [root@node01 keepalived]# vim keep_down.sh
    #!/bin/bash
    if [ -f /etc/keepalived/down ];then
    exit 1
    else
    exit 0
    fi
    
    5、配置node02keepalived服务
    [root@node02 keepalived]# vim keepalived.conf
    ! Configuration File for keepalived
    global_defs {
       notification_email {
            root@localhost
    }
       notification_email_from keepalived@localhost
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id node02
       vrrp_mcast_group4 224.1.101.33
    }
    vrrp_script chk_down {
        script "/etc/keepalived/keep_down.sh"
        weight -10
        interval 1
        fall 1
        rise 1
    }
    vrrp_instance VI_1 {
        state BACKUP
        priority 96
        interface ens33
        virtual_router_id 51
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass IGsPtR1X3w
        }
        virtual_ipaddress {
            192.168.32.188/16 dev ens33 label ens33:0
        }
        track_script {
        chk_down
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault  "/etc/keepalived/notify.sh fault"
    }
    vrrp_instance VI_2 {
        state MASTER
        priority 100
        interface ens33
        virtual_router_id 50
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass IGsPt3w
        }
        virtual_ipaddress {
            192.168.32.166/16 dev ens33 label ens33:1
        }
        track_script {
            chk_down
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
    }
    [root@node02 keepalived]# vim notify.sh
    #!/bin/bash
    #
    contact='root@localhost'
    notify() {
            local mailsubject="$(hostname) to be $1, vip floating"
            local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
            echo "$mailbody" | mail -s "$mailsubject"  $contact
    }
    case $1 in
    master)
            systemctl start nginx
            notify master
            ;;
    backup)
            systemctl start nginx
            notify backup
            ;;
    fault)
            systemctl stop nginx
            notify fault
            ;;
    *)
            echo "Usage: $(basename $0) {master|backup|fault}"
            exit 1
            ;;
    esac
    [root@node02 keepalived]# vim keep_down.sh
    #!/bin/bash
    if [ -f /etc/keepalived/down ];then
    exit 1
    else
    exit 0
    fi
    
    6、配置node01、node02的nginx服务
    [root@node01 nginx]# vim nginx.conf
        upstream websrvs {
            server 192.168.32.131:80;
            server 192.168.32.134:80;
            server 192.168.32.135:80;
        }
        # Load modular configuration files from the /etc/nginx/conf.d directory.
        # See http://nginx.org/en/docs/ngx_core_module.html#include
        # for more information.
        include /etc/nginx/conf.d/*.conf;
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
            location / {
                    proxy_pass http://websrvs;
            }
     [root@node02 nginx]# vim nginx.conf
        upstream websrvs {
            server 192.168.32.131:80;
            server 192.168.32.134:80;
            server 192.168.32.135:80;
        }
        # Load modular configuration files from the /etc/nginx/conf.d directory.
        # See http://nginx.org/en/docs/ngx_core_module.html#include
        # for more information.
        include /etc/nginx/conf.d/*.conf;
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
            location / {
                    proxy_pass http://websrvs;
            }
    
    7、启动node01、node02的keepalived、nginx服务
    [root@node01 ~]# systemctl start keepalived
    [root@node02 ~]# systemctl start keepalived
    [root@node01 ~]# systemctl start nginx
    [root@node02 ~]# systemctl start nginx
    
    8、验证
    [40796.DESKTOP-Q4O3FV5] ➤ curl http://192.168.32.188
    <h1>Vhost1</h1>
    [40796.DESKTOP-Q4O3FV5] ➤ curl http://192.168.32.188
    <h1>Vhost2</h1>
    [40796.DESKTOP-Q4O3FV5] ➤ curl http://192.168.32.188
    <h1>Vhost1</h1>
    [40796.DESKTOP-Q4O3FV5] ➤ curl http://192.168.32.166
    <h1>Vhost1</h1>
    [40796.DESKTOP-Q4O3FV5] ➤ curl http://192.168.32.166
    <h1>Vhost2</h1>
    [40796.DESKTOP-Q4O3FV5] ➤ curl http://192.168.32.166
    <h1>Vhost3</h1>
    
    

    相关文章

      网友评论

          本文标题:三、架构02-Keepalived+Nginx+双主模型实现站点

          本文链接:https://www.haomeiwen.com/subject/bdohyqtx.html