基于keepalive高可用的nginx反向代理httpd服务的实例

nginx高可用模型

后端rs服务器设置三个ip对应三个虚拟主机

rs配置:

[root@rs1 httpd]# vim conf.d/vhosts.conf#配置三个httpd虚拟主机


    ServerName 192.168.1.11
    DocumentRoot "/data/web/vhost1"
    
      options FollowSymLinks
      AllowOverride None
      Require all granted
     


    ServerName 192.168.1.12
    DocumentRoot "/data/web/vhost2"
    
      options FollowSymLinks
      AllowOverride None
      Require all granted
     


    ServerName 192.168.1.13
    DocumentRoot "/data/web/vhost3"
    
      options FollowSymLinks
      AllowOverride None
      Require all granted
     

[root@rs1 httpd]# mkdir -pv /data/web/vhost{1,2,3} #创建网页资源目录
mkdir: 已创建目录 "/data/web"
mkdir: 已创建目录 "/data/web/vhost1"
mkdir: 已创建目录 "/data/web/vhost2"
mkdir: 已创建目录 "/data/web/vhost3"
[root@rs1 httpd]# echo "

Vhost1

" > /data/web/vhost1/index.html [root@rs1 httpd]# echo "

Vhost2

" > /data/web/vhost2/index.html [root@rs1 httpd]# echo "

Vhost3

" > /data/web/vhost3/index.html

节点1主机设置:

[root@keepalive21 ~]# cd /etc/keepalived/
[root@keepalive21 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.service
notify master
;;
backup)
systemctl start nginx.service
notify backup
;;
fault)
systemctl stop nginx.service
notify fault
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit 1
;;
esac
[root@keepalive21 ~]# yum -y install nginx #安装nginx
[root@keepalive21 ~]# vim /etc/nginx/nginx.conf#配置nginx
.....
 upstream websrvs {       #后端服务器组
            server 192.168.1.11:80;
            server 192.168.1.12:80;
            server 192.168.1.13:80;
             }
    # Load modular configuration files from the /etc/nginx/conf.d directory.

.....
  # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
               proxy_pass http://websrvs;
        }
[root@keepalive21 ~]# vim /etc/keepalived/keepalived.conf#配置keepalived  

! 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 keepalive130
   vrrp_mcast_group4 224.1.101.33
}
vrrp_script chk_down{
     script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
     interval 1
     weight -10
     fall 1
     rise 1
}

vrrp_script chk_ngx {
     script "killall -0 nginx && exit 0 || exit 1"
     weight -10
     interval 2
     fall 3
     rise 3
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 33
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass a1b2c3d4
    }
 virtual_ipaddress {
        192.168.1.99/24 dev ens33 label ens33:0
    }
  track_script {
             chk_dow
             chk_ngx
         }
   track_interface {
           ens33
           ens37
         }
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 BACKUP
    interface ens33
    virtual_router_id 34
    priority 96
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass a6b7c8d9
    }
    virtual_ipaddress {
   192.168.1.99/24 dev ens33 label ens33:1
 }
  track_script {
             chk_dow
             chk_ngx
         }
   track_interface {
           ens33
           ens37
         }
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault“

}
[root@keepalive21 ~]# systemctl start nginx
[root@keepalive21 ~]# systemctl start keepalived

节点2主机设置:

[root@keepalive22 ~]# cd /etc/keepalived/
[root@keepalive22 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.service
notify master
;;
backup)
systemctl start nginx.service
notify backup
;;
fault)
systemctl stop nginx.service
notify fault
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit 1
;;
esac
[root@keepalive22 ~]# yum -y install nginx
[root@keepalive22 ~]# vim /etc/nginx/nginx.conf
.....
 upstream websrvs {
            server 192.168.1.11:80;
            server 192.168.1.12:80;
            server 192.168.1.13:80;
             }
    # Load modular configuration files from the /etc/nginx/conf.d directory.

.....
  # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
               proxy_pass http://websrvs;
        }
[root@keepalive22 ~]# vim /etc/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 keepalive130
   vrrp_mcast_group4 224.1.101.33
}
vrrp_script chk_down{
     script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
     interval 1
     weight -10
     fall 1
     rise 1
}

vrrp_script chk_ngx {
     script "killall -0 nginx && exit 0 || exit 1"
     weight -10
     interval 2
     fall 3
     rise 3
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 33
    priority 96
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass a1b2c3d4
    }
 virtual_ipaddress {
        192.168.1.99/24 dev ens33 label ens33:0
    }
  track_script {
             chk_dow
             chk_ngx
         }
   track_interface {
           ens33
           ens37
         }
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
    interface ens33
    virtual_router_id 34
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass a6b7c8d9
    }
    virtual_ipaddress {
   192.168.1.99/24 dev ens33 label ens33:1
 }
  track_script {
             chk_dow
             chk_ngx
         }
   track_interface {
           ens33
           ens37
         }
notify_master “/etc/keepalived/notify.sh master”
notify_backup “/etc/keepalived/notify.sh backup”
notify_fault “/etc/keepalived/notify.sh fault“

}
[root@keepalive22 ~]# systemctl start nginx
[root@keepalive22 ~]# systemctl start keepalived

客户端测试:

访问节点1:
[root@vs ~]# curl http://172.16.1.21

Vhost1

[root@vs ~]# curl http://172.16.1.21

Vhost2

[root@vs ~]# curl http://172.16.1.21

Vhost3

访问节点2 [root@vs ~]# curl http://172.16.1.22

Vhost1

[root@vs ~]# curl http://172.16.1.22

Vhost2

[root@vs ~]# curl http://172.16.1.22

Vhost3

你可能感兴趣的:(基于keepalive高可用的nginx反向代理httpd服务的实例)