Nginx的負載均衡和高可用


一、Nginx的理解

Nginx是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務。Nginx是一款輕量級的web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like協議下發行。特點:占有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁服務器中表現最好。

   Nginx常用負載均衡算法:

    輪詢(默認算法) ——    每個請求會依次分配給后端不同的應用程序服務器,不理會后端服務器的實際壓力

    加權輪詢        ——    權重越大的服務器,被分配到的次數就會越多,通常用於后端服務器性能不一致的情況

    IP HASH        ——    當同IP進行重復訪問時會被指定到上次訪問到的服務器,可以解決動態網站SESSION共享問題 

二、nginx的配置

      實驗步驟:由於之前在源碼包的編譯過程使用了nginx,在此就不再敘述了,我們對nginx的配置進行如下修改。

      1) 檢測是否安裝成功

      ---> /usr/local/nginx/sbin/nginx         # 開啟ngnix服務

      注意:當服務啟動出現錯誤:error while loading shared  libraries:libpcre.so.1:cannot open shared object file:No such file or directory    

   解決方法1、使用命令where  libpcre.so.1找到它所在的位置

           2、ln  -s  /usr/local/lib/libpcre.so.1  /lib64 命令做個軟鏈接

           3、再重新啟動即可(ps  -axu| grep  nginx來查看nginx服務進程)

       ---> ln -s /usr/local/nginx/sbin/nginx  /sbin/   # 進行nginx的鏈接操作

   2)去掉nginx服務的版本號

   --->  vim  /root/nginx-1.15.3/src/core/nginx.h                # 只修改一行

   

   # 此時,在真機中使用 curl -I 172.25.2.1 查看,則不會顯示nginx的版本號。 

   3)注釋/root/nginx-1.15.3/auto/cc/gcc中debug的下一行

  

      4)在瀏覽器中輸入server1的ip,可以訪問nginx的默認文件

  

       5)添加發布文件

       --->  vim /usr/local/nginx/html/index1.html

        <h1>server1 --- nginx</h1>

       # 在瀏覽器中的結果:

  

       6)nginx的基本操作

       --->  /usr/local/nginx/sbin/nginx # 啟動服務

       --->  /usr/local/nginx/sbin/nginx -s stop(reload、quit)  #停停止、重啟服務

       --->  /usr/local/nginx/sbin/nginx -h|-t                            # h命令幫助;t驗證配置文件

三、Nginx實現負載均衡

      1)修改主配置文件

      --->  vim /usr/local/nginx/conf/nginx.conf

      worker_processes  1;

      events {

      worker_connections  65535;

      }

      http {

              upstream xniu{

              # ip_hash       # 負載均衡算法,不寫默認為rr(輪詢)

              server 172.25.2.2:80;   # 后端服務器

              server 172.25.2.3:80;

              server 127.0.0.1:8080 backup;     # 當后端服務器均有問題時,使用本地的服務

              }

              include mime.types;

             default_type  application/octet-stream;

             server {

                      listen 80;      # nginx監聽80端口

                      server_name www.xniu.com;       # 訪問域名

                      location / {

                      proxy_pass http://xniu;         # 訪問上邊的虛擬主機

                     }

             }

      }

     2)查看系統支持的最大文件數,並編輯限制文件

     --->  sysctl -a | grep file

  

     --->  vim /etc/security/limits.conf

      Nginx - nofile 65535 # 使nginx工作再nginx用戶的工作空間

     3)創建nginx用戶

     --->  useradd -M -d /usr/local/ngnix  ngnix  #指定用戶加目錄

     4)重新加載nginx:(加載之后需要打開server2和server3的httpd服務)

     --->  nginx  -s  reload

   5)啟動server2和server3的httpd服務;server1的httpd訪問端口為8080添加默認發布文件

 

     6)在真機中測試負載均衡,方式是輪詢

  

   # 當server2和server3都壞掉的時候,會調用server1的httpd服務

  

   #  也可以給后端服務器設置權重;編輯nginx.conf文件;在虛擬主機172.25.2.2后添加weight=2.則在真機中會出現兩次server2,一此server3。結果如下:
  

   # 若負載均衡算法為ip_hash,結果如下(同一個ip訪問時,后端服務器不會改變):算法為hash時,不能有后備服務主機。

  

四、在nginx中靜態模塊sticky

   sticky時nginx的一個模塊,它是基於cookie的一種nginx的負載均衡解決方案,通過分發和時別cookie,來使同一客戶端的請求羅在同一台服務器上。默認標識為route。功能相當於算法ip_bash。

   具體數據的處理過程為:客戶算首次發送訪問請求,nginx接收后,發現請求頭沒有cookie,則以輪詢方式將請求分發給后端服務器;后端服務器請求完成后,將響應數據返回給客戶端;(此時,nginx生成帶有route的cookie,返回給客戶端,route的值與后端服務器想對應,可能是明文、md5、sha1等hash值;客戶端保存帶route的cookie )下一次客戶端再發送請求時,會帶上route,nginx接收到cookie中route值,隨即就轉發給對應的后端服務器。

五、使用corosync和pacemaker實現nginx的高可用

   由於之前配置過corosync和pacemaker的實驗環境,再這里就直接使用。若時有問題的話,可以查看之前的博客。

   1)首先我們把server1和server4上都安裝上nginx服務。這是只需要把server1中安裝好的目錄拷貝過去即可使用。

   --->  scp -r  /usr/local/nginx  server4:/usr/local

       2)我們在server4中做一個軟鏈接,並啟動

   --->  ln - s  /usr/local/nginx/sbin/nginx   /sbin/

   --->  nginx                              # 啟動服務(沒報錯說明正常)

   --->  nginx  -s  stop                    # 關閉服務

   3)編寫nginx的執行腳本(在網上搜即可),放在/etc/init.d/目錄下,並給一個可執行權限

   4)此時我們啟動server1和server4的corosync服務

   --->  /etc/init.d/corosync  start

   5) 在corosync中添加ip和nginx服務(ip為之前添加進去的)

   

   

   # 建立一個資源組,使ip和nginx運行在同一個節點上

   

   

   6)完成之后,我們對節點進行測試。(添加進去的服務可以自啟動)

    # 在關閉節點4的corosync服務時,資源的調度會自動轉換在server1上。(若兩個節點都有問題,則不可以訪問后端)

   

   

   # 當server1主機崩了之后(echo c> /proc/sysrq-trigger),由於有fence機制,會自動啟動,完成后又添加在在線節點中。

   注意:當我掛掉一個節點后,再啟動的時候,該節點會自動進行資源的搶奪。為了防止出現這樣的現象,我們可以設置corosync的當前節點的粘滯性即可 。

   

   

   



 




 



 


 


 



 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM