雙節點(nginx+keepalived)為兩台apache伺服器提供負載平衡

來源:互聯網
上載者:User

標籤:

說明:本實驗為雙節點nginx為兩台apache伺服器提供負載平衡,本文不是做lvs,所以realserver不是配置在keepalived.conf而是在nginx的設定檔中upstream。
此架構需考慮的問題:
1)Master沒掛,則Master佔有vip且nginx運行在Master上
2)Master掛了,則backup搶佔vip且在backup上運行nginx服務
3)如果master伺服器上的nginx服務掛了,則vip資源轉移到backup伺服器上
4)檢測後端伺服器的健康狀態
Master和Backup兩邊都開啟nginx服務,無論Master還是Backup,當其中的一個keepalived服務停止後,vip都會漂移到keepalived服務還在的節點上,如果要想使nginx服務掛了,vip也漂移到另一個節點,則必須用指令碼或者在設定檔裡面用shell命令來控制。

配置步驟如下
1.初始化4台測試server,該關的關了

[[email protected] ~]# vim /etc/hosts192.168.1.200   ng-vip192.168.1.101   ng-master192.168.1.102   ng-slave192.168.1.161   web1192.168.1.162   web2[[email protected] ~]# yum clean all[[email protected] ~]# systemctl stop firewalld.service[[email protected] ~]# systemctl disable firewalld.service[[email protected] ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

2.配置web1,web2的apache服務,兩台一樣的方法

[[email protected] ~]# yum -y install httpd[[email protected] ~]# systemctl start httpd[[email protected] ~]# systemctl enable httpdln -s ‘/usr/lib/systemd/system/httpd.service‘ ‘/etc/systemd/system/multiuser.target.wants/httpd.service‘[[email protected] ~]# cat /var/www/html/index.htmlhello this lvs-web1[[email protected] ~]# yum -y install httpd[[email protected] ~]# systemctl start httpd[[email protected] ~]# systemctl enable httpdln -s ‘/usr/lib/systemd/system/httpd.service‘ ‘/etc/systemd/system/multiuser.target.wants/httpd.service‘[[email protected] ~]# cat /var/www/html/index.htmlhello this lvs-web2

3.通過yum安裝配置nginx節點,兩台一樣的方法

[[email protected] ~]# vim /etc/yum.repos.d/nginx.repo[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/7/x86_64/gpgcheck=0enabled=1[[email protected] ~]# yum clean all[[email protected] ~]# yum -y install nginx[[email protected] ~]# vim /usr/share/nginx/html/index.html<h1>Welcome to ng-master!</h1>[[email protected] ~]# cd /etc/nginx/conf.d/[[email protected] conf.d]# mv default.conf default.conf.1[[email protected] ~]# vim /etc/nginx/conf.d/web.conf    upstream myapp1 {        server web1;        server web2;    }    server {        listen 80;        location / {            proxy_pass http://myapp1;        }    }[[email protected] ~]# systemctl restart nginx.service[[email protected] ~]# vim /etc/yum.repos.d/nginx.repo[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/7/x86_64/gpgcheck=0enabled=1[[email protected] ~]# yum clean all[[email protected] ~]# yum -y install nginx[[email protected] ~]# vim /usr/share/nginx/html/index.html<h1>Welcome to ng-master!</h1>[[email protected] ~]# cd /etc/nginx/conf.d/[[email protected] conf.d]# mv default.conf default.conf.1[[email protected] ~]# vim /etc/nginx/conf.d/web.conf    upstream myapp1 {        server web1;        server web2;    }    server {        listen 80;        location / {            proxy_pass http://myapp1;        }    }[[email protected] ~]# systemctl restart nginx.service

4.在主nginx伺服器上安裝keepalived,並配置nginx服務健康檢測指令碼

[[email protected] conf.d]# yum -y install keepalived[[email protected] conf.d]# cd /etc/keepalived/[[email protected] keepalived]# cp keepalived.conf keepalived.conf.1[[email protected] keepalived]# vim keepalived.confglobal_defs {   notification_email {     [email protected]   }   notification_email_from [email protected]   smtp_server smtp.mail.com   smtp_connect_timeout 30   router_id HA_MASTER1  #表示運行keepalived伺服器的一個標識,發郵件時顯示在郵件主題中的資訊}vrrp_script chk_http_port {script "/usr/local/keepalived/nginx.sh" ####檢測nginx狀態的指令碼連結interval 2weight 2}vrrp_instance VI_2 {   #vrrp執行個體    state MASTER     #MASTER/BACKUP    interface eno16777736    ####HA 監測網路介面    virtual_router_id 51  #虛擬路由辨別碼,是一個數字,同一個VRRP執行個體使用唯一的標識,master和backup要一樣    priority 100          #用於主從模式,優先順序主高於100,從低於100    advert_int 1           #主備之間的通告間隔秒數    authentication {        #認證用於主從模式,mater和backup配置一樣        auth_type PASS          ###主備切換時的驗證        auth_pass 1111          #密碼    }track_script {chk_http_port ### 執行監控的服務}    virtual_ipaddress { 192.168.1.200/24 dev eno16777736 label eno16777736:1   ###########虛擬ip    }}[[email protected] keepalived]# mkdir -p /usr/local/keepalived[[email protected] keepalived]# vim /usr/local/keepalived/nginx.sh#!/bin/bashif [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfi[[email protected] keepalived]# chmod 755 /usr/local/keepalived/nginx.sh[[email protected] keepalived]# systemctl start keepalived[[email protected] keepalived]# ifconfig -aeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.1.101  netmask 255.255.255.0  broadcast 192.168.1.255        inet6 fe80::20c:29ff:fefe:6f3  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:fe:06:f3  txqueuelen 1000  (Ethernet)eno16777736:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.1.200  netmask 255.255.255.0  broadcast 0.0.0.0        ether 00:0c:29:fe:06:f3  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 0  (Local Loopback)

5.在備nginx伺服器上安裝keepalived,並配置nginx服務健康檢測指令碼,與主略有不同

[[email protected] conf.d]# yum -y install keepalived[[email protected] conf.d]# cd /etc/keepalived/[[email protected] keepalived]# cp keepalived.conf keepalived.conf.1[[email protected] keepalived]# vim keepalived.confglobal_defs {   notification_email {     [email protected]   }   notification_email_from [email protected]   smtp_server smtp.mail.com   smtp_connect_timeout 30   router_id HA_MASTER1  #表示運行keepalived伺服器的一個標識,發郵件時顯示在郵件主題中的資訊}vrrp_script chk_http_port {script "/usr/local/keepalived/nginx.sh" ####檢測nginx狀態的指令碼連結interval 2weight 2}vrrp_instance VI_2 {   #vrrp執行個體    state BACKUP     #MASTER/BACKUP    interface eno16777736    ####HA 監測網路介面    virtual_router_id 51  #虛擬路由辨別碼,是一個數字,同一個VRRP執行個體使用唯一的標識,master和backup要一樣    priority 80          #用於主從模式,優先順序主高於100,從低於100    advert_int 1           #主備之間的通告間隔秒數    authentication {        #認證用於主從模式,mater和backup配置一樣        auth_type PASS          ###主備切換時的驗證        auth_pass 1111          #密碼    }track_script {chk_http_port ### 執行監控的服務}    virtual_ipaddress { 192.168.1.200/24 dev eno16777736 label eno16777736:1   ###########虛擬ip    }}[[email protected] keepalived]# mkdir -p /usr/local/keepalived[[email protected] keepalived]# vim /usr/local/keepalived/nginx.sh#!/bin/bashif [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfi[[email protected] keepalived]# chmod 755 /usr/local/keepalived/nginx.sh[[email protected] keepalived]# systemctl start keepalived[[email protected] keepalived]# ifconfig -aeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.1.102  netmask 255.255.255.0  broadcast 192.168.1.255        inet6 fe80::20c:29ff:fe87:fd0e  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:87:fd:0e  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 0  (Local Loopback)

6.測試:通過瀏覽器訪問測試http://192.168.1.200/,可發現流量在web1和web2之間跳轉.

6.1測試關閉主nginx節點上的keepalived伺服器,發綁定的vip在主節點消失

[[email protected] keepalived]# systemctl stop keepalived.service [[email protected] keepalived]# ifconfig -aeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.1.101  netmask 255.255.255.0  broadcast 192.168.1.255        inet6 fe80::20c:29ff:fefe:6f3  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:fe:06:f3  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 0  (Local Loopback)vip在卻在備節點上出現[[email protected] keepalived]# ifconfig -aeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.1.102  netmask 255.255.255.0  broadcast 192.168.1.255        inet6 fe80::20c:29ff:fe87:fd0e  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:87:fd:0e  txqueuelen 1000  (Ethernet)eno16777736:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.1.200  netmask 255.255.255.0  broadcast 0.0.0.0        ether 00:0c:29:87:fd:0e  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 0  (Local Loopback)通過瀏覽器訪問測試http://192.168.1.200/,可發現流量依然在web1和web2之間跳轉。

6.2再次啟動主節點的keepalived服務,發現vip又重新漂移會主節點

[[email protected] keepalived]# systemctl start keepalived.service   [[email protected] keepalived]# ifconfig -aeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.1.101  netmask 255.255.255.0  broadcast 192.168.1.255        inet6 fe80::20c:29ff:fefe:6f3  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:fe:06:f3  txqueuelen 1000  (Ethernet)eno16777736:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.1.200  netmask 255.255.255.0  broadcast 0.0.0.0        ether 00:0c:29:fe:06:f3  txqueuelen 1000  (Ethernet)通過瀏覽器訪問測試http://192.168.1.200/,可發現流量依然在web1和web2之間跳轉。

6.3關閉nginx主節點上的nginx服務,發現vip從主節點消失,keepalived服務關閉,vip在備節點上出現。

[[email protected] keepalived]# systemctl stop nginx.service [[email protected] keepalived]# ifconfig -aeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.1.101  netmask 255.255.255.0  broadcast 192.168.1.255        inet6 fe80::20c:29ff:fefe:6f3  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:fe:06:f3  txqueuelen 1000  (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 0  (Local Loopback)[[email protected] keepalived]# systemctl status keepalived keepalived.service - LVS and VRRP High Availability Monitor   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled)   Active: inactive (dead)通過瀏覽器訪問測試http://192.168.1.200/,可發現流量依然在web1和web2之間跳轉。

 6.4再次啟動主節點的nginx和keepalived服務後,VIP又漂回主節點。

[[email protected] keepalived]# systemctl start nginx.service [[email protected] keepalived]# systemctl start keepalived通過瀏覽器訪問測試http://192.168.1.200/,可發現流量依然在web1和web2之間跳轉。

參考:

http://www.linuxdiyf.com/linux/12955.html
http://nginx.org/en/linux_packages.html
http://blog.csdn.net/e421083458/article/details/30086413
http://my.oschina.net/u/1458120/blog/208740

雙節點(nginx+keepalived)為兩台apache伺服器提供負載平衡

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.