# Nginx集群部署 # 當我們的用戶同時訪問量達到一定量的時候,一台服務器是不夠用的 # 這個時候我們需要解決這個問題肯定是要添加新的服務器去處理用戶訪問 # 多台服務器處理用戶訪問就需要我們集群部署 # 通過Nginx反向代理是實現服務器集群部署的一種方法 # 一台服務器不夠用的時候我們有很多方案可以去優化它 # 方案一:將不同的數據分布到不同的服務器上處理,通過反向代理將他們整合起來 # 方案二:多台服務器去處理同樣的業務,通過反向代理負載均衡去控制用戶訪問由哪個服務器去處理,這樣哪怕用戶再多,只要一直增加服務器就能保證用戶訪問速度在一定范圍。 # 方案三:將動態數據和靜態頁面分布到不同的服務器去處理。 # 不管哪種方案,你部署的時候一定要考慮部分服務器當機當機情況。 # Nginx高可用解決方案 # 也就是當Nginx代理服務器當機了,我們怎么去處理該問題 # Keepalived:Keepalived軟件由C編寫的,最初是專為LVS負載均衡設計的,Keepalived主要是通過VRRP協議實現高可用功能。 # VRRP介紹: # VRRP協議是將多台路由器虛擬成一台路由器,它會有自己的ip,當客戶訪問虛擬路由器IP的時候,再由虛擬路由器分發到一台路由器去處理, # 多台路由器具體由路由器設置的級別來決定用哪台路由器去處理,級別最高的為master主路由器,其他路由器都為backup備份路由器。 # 虛擬路由器只會將用戶訪問分發給master路由器去處理。 # 當master路由器當機后,多個backup路由器級別最高的那個成為master路由器。 # master路由器和backup路由器之間的關系:master路由器采用心跳機制發送狀態碼給Backup路由器以確保Backup路由器知道master路由器在正常運行;心跳機制停止后,Backup路由器就會競爭成為master路由器。 # Keepalived的安裝 # 1.下載Keepalived源碼包,官網地址:https://keepalived.org/ # 2.將壓縮包上傳到服務器 # 3.創建Keepalived目錄 # 4.解壓Keepalived-2.0.20.tar.gz tar -zxf Keepalived-2.0.20.tar.gz -c Keepalived/ # 5.對keepalived進行配置,編譯和安裝。sysconf配置文件存放路勁。prefix安裝路勁。 cd keepalived/keepalived-2.0.20 ./configure --sysconf=/etc --prefix=/usr/local make && make install # 安裝完成后會生成/etc/keepalived/keepalived.conf配置文件 # 和/usr/local/sbin/leepalived系統腳本文件用來啟動和關閉keepalived # Keepalived.conf配置文件介紹 # Keepalived配置分為三部分,第一部分是global全局配置、第二部分是VRRP相關配置、第三部分是LVS相關配置 # 現在主要是使用keepalived實現高可用部署,沒有用到LVS。 # global全局部分 global_defs { # 通知郵件,當keepalived發生切換時需要發送email給具體郵箱地址 notification_email { abc@abc.com 77325496***@qq.com } # 設置發件人的郵箱信息 notification_email_from zzz@abc.com # 指定smtp服務地址 smtp_server 192.168.1.1 # 指定smpt服務鏈接超時時間 smtp_connect_timeout 30 # 運行keepalived服務器的一個標識(填寫主機名就行),可以作用發送郵件的主題信息 router_id LVS_DEVEL # 檢查收到的VRRP通告中的所有地址可能會比較耗時,設置此命令的意思時,如果通告與接收的上一個通告來自相同的master路由器,則不執行檢查(跳過檢查)。默認不跳過檢查。 vrrp_skip_check_adv_addr # 嚴格遵守VRRP協議 vrrp_strict # 在一個接口發送的兩個免費ARP之間的延遲。可以精確到毫秒級。默認是0 vrrp_garp_interval 0 # 在一個網卡上每組na消息之間的延遲時間,默認為0 vrrp_gna_interval 0 } # vrrp實例部分VI_1是實例的名稱 vrrp_instance VI_1{ # 設置當前實例時master還是backup路由器 state MASTER # 用哪個網卡來發送消息包 interface eth0 # VI_1實例的唯一標識值 0-255之間任意值 virtual_router_id 51 # 優先級,數值越高級別越高 priority 100 # 定時向外發送arrp通告信息,主要用於心跳機制。1秒 advert_int 1 # 認證相關 authentication { # 認證類型 auth_type PASS # 認證密碼 auth_pass 1111 } # 配置虛擬IP地址,可以配置多個供用戶訪問 virtual_ipaddress { 192.168.1.1 192.168.1.2 } } # 如何配置Keepalived當機自動重啟 # 1.在Keepalived.conf全局位置增加配置 vrrp_script 腳本名稱 { script "腳本位置" interval 3 # 執行間隔 weight -20 # 動態調整vrrp_instance的優先級。master路由的優先級調低了也是優先master路由。所以要想master路由也參與該機制,就別設置master路由,只要將所有的路由都設置為backup路由就行。 } # 2.編寫腳本 ck_nginx.sh #!/bin/bash num =`ps -C nginx --no-header | wc -l` if [ $num -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then killall keepalived fi fi # ps指令中的參數 # -C(command):指定命令的所有進程 # --no-header 排除標題 # 例子: # 這里是加載聲明腳本 vrrp_script ck_nginx { script "/etc/keepalived/ck_nginx.sh" interval 2 weight -20 } vrrp_instance VI_1{ state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.1 192.168.1.2 } track_script{ # 這里可以指定多個腳本 ck_nginx ck_nginx } } # 配置兩個Keepalived # virtual_router_id、authentication、virtual_ipaddress要一樣 # 啟動服務 ./keepalived