一、Nginx的理解
Nginx是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務。Nginx是一款輕量級的web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like協議下發行。特點:占有內存少,並發能力強,事實上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的當前節點的粘滯性即可 。
