Nginx高可用负载均衡集群实例架设 一、 Nginx高可用集群拓扑架构

node1:17216.100.67 node2:170.16.100.68 VIP:172.16.100.89 RS1:172.16.100.6 RS2:172.16.100.69

注意:nginx的高可用集群架构的所有RS的内核参数arp_ignore和arp_announce都为0。

二、 Nginx的高可用集群架设步骤 1、 在所有node节点(172.16.100.67,172.16.100.68)上安装nginx服务。 root@node1 ~] yum install nginx root@node2 ~] yum install nginx

2、 配置nginx成为反向代理,并且能够让用户的请求RS代理至node节点上。 在node节点上,编辑node节点的配置文件。 root@node1 ~] cd /etc/nginx root@node1 ~] vim nginx.conf 以下是新添加的upstream和location /代码。 upstream websrvs { server 172.16.100.6:80 weight=1; server 172.16.100.69:80 weight=1; }

server {

location / { Proxy_pass http://websrbs/; }

}

3、 编辑完nginx配置文件后,检查nginx配置文件有没有语法错误。 root@node1 ~] nginx -t

此时检查出nginx没有语法错误。 4、 启动node1上的nginx服务。 root@node1 ~] systemctl start nginx.service

5、 查看node1(172.16.100.6)上的nginx是否监听在80端口上。 root@node1 ~] netstat –tnlp

注意:启动nginx时,需要停掉httpd服务。同时防止httpd服务开启自启动。可以使用systemctl disabled httpd.service root@node1 ~] systemctl disabled httpd.service

6、 利用浏览器查看node1(172.16.100.67)看是否完成负载均衡。

此时刷新RS1和RS2就可以来回切换。

7、 配置node2节点的nginx配置文件。 重复上述1~6步骤。 配置文件可以直接从node1上复制到node2上。 root@node1 ~] scp nginx.conf node2:/etc/nginx/

8、 在node1节点上安装keepalived服务。 在node1(172.16.100.67)节点上修改keepalived.conf配置文件。 ! Configuration File for keepalived

global_defs {
notification_email {
linuxedu@foxmail.com mageedu@126.com
}
notification_email_from kanotify@magedu.com smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}

vrrp_script chk_nginx { #检查nginx服务是否在线 script “killall -0 nginx &> /dev/null” interval 1 wetght -20 }

vrrp_instance VI_1 {
interface eno16777736
state MASTER # BACKUP for slave routers priority 100 # 99 for BACKUP virtual_router_id 51 garp_master_delay 1 advert_int 1 authentication {
auth_type PASS
auth_pass 2231da37af98 #openssl rand –hex 6命令生成随机数 }
virtual_ipaddress {
172.16.100.89/16 dev eno16777736 label eno16777736:1 }
track_script {
chk_nginx }

notify_master "/etc/keepalived/notify.sh master"  
notify_backup "/etc/keepalived/notify.sh backup"  
notify_fault "/etc/keepalived/notify.sh fault"  

}

9、 在node2节点上安装keepalived服务。 在node2(172.16.100.68)节点上修改keepalived.conf配置文件。 ! Configuration File for keepalived

global_defs {
notification_email {
linuxedu@foxmail.com mageedu@126.com
}
notification_email_from kanotify@magedu.com smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}

vrrp_script chk_nginx { #检查nginx服务是否在线 script “killall -0 nginx &> /dev/null” interval 1 wetght -20 }

vrrp_instance VI_1 {
interface eno16777736
state MASTER # BACKUP for slave routers priority 99 # 100 for MASTER virtual_router_id 51 garp_master_delay 1 advert_int 1 authentication {
auth_type PASS
auth_pass 2231da37af98 #openssl rand –hex 6命令生成随机数 }
virtual_ipaddress {
172.16.100.89/16 dev eno16777736 label eno16777736:1 }
track_script {
chk_nginx }

notify_master "/etc/keepalived/notify.sh master"  
notify_backup "/etc/keepalived/notify.sh backup"  
notify_fault "/etc/keepalived/notify.sh fault"  

}

10、 编辑两个node节点的notify脚本。 #!/bin/bash

vip=172.16.100.179 contact='root@localhost'

notify() { mailsubject="hostname to be $1: $vip floating" mailbody="date '+%F %H:%M:%S': vrrp transition, hostname changed to be $1" echo $mailbody | mail -s "$mailsubject" $contact }

case "$1" in master) notify master systemctl restart nginx.service exit 0 ;; backup) notify backup systemctl restart nginx.service exit 0 ;; fault) notify fault exit ;; *) echo 'Usage: basename $0 {master|backup|fault}' exit 1 ;; esac

启动两个节点上的nginx服务。 root@node1 ~] systemctl start keepalived.service; ssh node2 ‘systemctl start keepalived.service’

11、 利用systemctl status keepalived.service查看keepalived是否正常。 root@node1 ~] systemctl status keepalived.service

12、 停掉一个node1(MASTER)的nginx服务查看高可用是否可行。 可以利用浏览器查看vip(172.16.100.179)看能否访问到RS1和RS2。

三、 Nginx的双主模型。 1、 拓扑图

node1(DIP):17216.100.67 node2(DIP):170.16.100.68 VIP1:172.16.100.179 VIP2:172.16.100.180 RS1:172.16.100.6 RS2:172.16.100.69

2、 步骤与二里面的步骤相同,不同的是keepalived.conf文件和notify.sh脚本。 在node1(172.16.100.67)节点上修改keepalived.conf配置文件。 ! Configuration File for keepalived

global_defs {
notification_email {
linuxedu@foxmail.com mageedu@126.com
}
notification_email_from kanotify@magedu.com smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}

vrrp_script chk_nginx { #检查nginx服务是否在线 script “killall -0 nginx &> /dev/null” interval 1 wetght -20 }

vrrp_instance VI_1 {
interface eno16777736
state MASTER # BACKUP for slave routers priority 100 # 99 for BACKUP virtual_router_id 51 garp_master_delay 1 advert_int 1 authentication {
auth_type PASS
auth_pass 2231da37af98 #openssl rand –hex 6命令生成随机数 }
virtual_ipaddress {
172.16.100.179/16 dev eno16777736 label eno16777736:1 }
track_script {
chk_nginx }

vrrp_instance VI_2 {
interface eno16777736
state BACKUP
priority 99
virtual_router_id 61 garp_master_delay 1 advert_int 1 authentication {
auth_type PASS
auth_pass qaz1da37af98 #openssl rand –hex 6命令生成随机数 }
virtual_ipaddress {
172.16.100.180/16 dev eno16777736 label eno16777736:2 }
track_script {
chk_nginx } notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}

node1的notify脚本 #!/bin/bash

vip=172.16.100.88 contact='root@localhost'

notify() { mailsubject="hostname to be $1: $vip floating" mailbody="date '+%F %H:%M:%S': vrrp transition, hostname changed to be $1" echo $mailbody | mail -s "$mailsubject" $contact }

case "$1" in master) notify master exit 0 ;; backup) notify backup exit 0 ;; fault) notify fault exit ;; *) echo 'Usage: basename $0 {master|backup|fault}' exit 1 ;; esac

3、 在node2上修改keepalived.conf配置文件和notify.sh脚本。 在node2(172.16.100.68)节点上修改keepalived.conf配置文件。 ! Configuration File for keepalived

global_defs {
notification_email {
linuxedu@foxmail.com mageedu@126.com
}
notification_email_from kanotify@magedu.com smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}

vrrp_script chk_nginx { #检查nginx服务是否在线 script “killall -0 nginx &> /dev/null” interval 1 wetght -20 }

vrrp_instance VI_1 {
interface eno16777736
state BACKUP
priority 99 virtual_router_id 51 garp_master_delay 1 advert_int 1 authentication {
auth_type PASS
auth_pass 2231da37af98 #openssl rand –hex 6命令生成随机数 }
virtual_ipaddress {
172.16.100.179/16 dev eno16777736 label eno16777736:1 }
track_script {
chk_nginx }

vrrp_instance VI_2 {
interface eno16777736
state MASTER
priority 100
virtual_router_id 61 garp_master_delay 1 advert_int 1 authentication {
auth_type PASS
auth_pass qaz1da37af98 #openssl rand –hex 6命令生成随机数 }
virtual_ipaddress {
172.16.100.180/16 dev eno16777736 label eno16777736:2 }
track_script {
chk_nginx } notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}

node1的notify脚本 #!/bin/bash

vip=172.16.100.88 contact='root@localhost'

notify() { mailsubject="hostname to be $1: $vip floating" mailbody="date '+%F %H:%M:%S': vrrp transition, hostname changed to be $1" echo $mailbody | mail -s "$mailsubject" $contact }

case "$1" in master) notify master exit 0 ;; backup) notify backup exit 0 ;; fault) notify fault exit ;; *) echo 'Usage: basename $0 {master|backup|fault}' exit 1 ;; esac