Linux Nginx+keepalived負載+高可用
Linux Nginx+keepalived負載+高可用
【摘要】
Nginx+keepalived給企業實現廉價的,高可靠性的高可用軟負載均衡,可達萬級的高並發。
【正文】
一 前期準備
1.1 項目拓撲圖
初步規劃了nginx+keepalived的拓撲結構如下。
1.2 服務器準備
Redhat 6.4(nginx-A) CPU:單核 內存:2G 硬盤:50G 設置同網段靜態IP
Redhat 6.4(nginx-B) CPU:單核 內存:2G 硬盤:50G 設置同網段靜態IP
後端WEB應用服務器 自行搭建(可使用linux做最簡單的http服務器) 設置同網段靜態IP
1.3 軟件準備
1) 兩臺新服務器配置YUM安裝源。(此處省略YUM源配置過程,可參考網上的方法)
2) 下載nginx與keepalived源碼安裝包。具體型號如下,所實施的軟件請參考另外提供的軟件包文件夾
nginx-1.9.2.tar.gz
keepalived-1.2.19.tar.gz
二 Nginx服務器安裝與配置
2.1 Nginx-A/Nginx-B主/備服務器配置
2.1.1 基礎安裝
安裝nginx之前的需要的依賴包#yum install –y gcc pcre-devel zlib-devel
2.1.2 Nginx安裝
進入nginx安裝包所在位置#cd /tmp/
解壓nginx源碼包
#tar –xvf nginx-1.9.2.tar.gz
進入解壓後的文件夾#cd nginx-1.9.2
編譯並安裝#./config;make;make install
2.1.3 Nginx配置文件修改
Vim編輯/usr/local/nginx/conf/nginx.conf,編輯內容如下圖紅框所示:
2.1.4 創建負載規則
1) 創建文件夾路徑#mkdir /usr/local/nginx/vhost
2) 為每個域名創建負載規則#vim /usr/local/nginx/vhost/www.xxx.net
編輯的內容如下圖:
2.1.5 Nginx啟動
測試配置文件是否有誤#/usr/local/nginx/sbin/nginx -t
返回如下信息則配置正確
啟動nginx
#/usr/local/nginx/sbin/nginx
三 Keepalived服務器安裝與配置
3.1 Nginx-A主服務器keepalived安裝與配置
3.1.1 基礎安裝
安裝keepalived之前的需要的依賴包#yum install –y openssl-devel
3.1.2 Keepalived安裝
進入keepalived安裝包所在位置#cd /tmp/
解壓keepalived源碼包#tar –xvf keepalived-1.2.19.tar.gz
進入解壓後的文件夾#cd keepalived-1.2.19
編譯並安裝#./config;make;make install
3.1.3 Keepalived配置文件修改
1) 創建軟鏈接(啟動keepalived時需要配置文件,如未使用-f指定配置文件路徑,就創建軟鏈接到/etc目錄下)#mkdir /etc/keepalived
#ln –s /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
2) 修改keepalived配置文件
Vim修改/etc/keepalived/keepalived.conf如下圖所示:
3.1.4 修改iptables設置
Iptables防火墻放通虛擬路由協議設置,否則keepalived無法通過虛擬路由協議進行通信。
vim編輯/etc/sysconfig/iptables如下圖:
3.1.5 Keepalived啟動#/usr/local/sbin/keepalived
3.2 Nginx-B備服務器keepalived安裝與配置
安裝與配置過程請參考主服務器,主要不通點是keepalived.conf,請看下圖:
3.3 Nginx監控腳本
1) Nginx-A和Nginx-B分別編輯腳本#vim /usr/local/nginx/Monitor_Nginx.sh
腳本如下圖:
2) 增加可執行權限#chmod o+rx /usr/local/nginx/Monitor_Nginx.sh
3) 創建軟鏈接#ln –s /usr/local/nginx/Monitor_Nginx.sh /opt/
四 優化操作系統限制
4.1 優化操作系統使其支持高並發(主備服務器均設置)
vim編輯/etc/security/limits.conf,編輯內容如下圖:
4.2 操作系統內核參數優化(主備服務器均設置)
vim編輯/etc/sysctl.conf,編輯內容如下圖:
五 優化nginx及keepalived啟動
5.1 將nginx啟動制作成服務(主備服務器均設置)
5.1.1 編輯/etc/init.d/nginxd
編輯內容如下圖,腳本內容不一一解釋:
5.1.2 增加可執行權限
1)增加執行權限#chmod +x /etc/init.d/nginxd
2)增加軟鏈接,使其能作為命令使用#ln –s /etc/init.d/nginxd /sbin
5.1.3 設置開機啟動
設置開機啟動#chkconfig nginxd on
5.2 將keepalived制作成服務(主備服務器均設置)
5.2.1 編輯/etc/init.d/keepalivedd
編輯內容如下圖,腳本內容不一一解釋:
5.2.2 增加可執行權限
1)增加執行權限#chmod +x /etc/init.d/keepalivedd
2)增加軟鏈接,使其能作為命令使用#ln –s /etc/init.d/keepalivedd /sbin
5.2.3 設置開機啟動
設置開機啟動#chkconfig keepalivedd on
六 Nginx日誌自動截斷並備份(主備服務器均設置)
4) 編輯/usr/local/nginx/nginxlogbak.sh
腳本如下圖:
5) 增加可執行權限#chmod +x /usr/local/nginx/nginxlogbak.sh
6) 創建定時任務#crontab -e
七 優化主備服務器策略同步
由於策略不會自動進行同步,需要每次人工拷貝,故進行優化,達到每天定時檢測主服務器的配置,如有變更則自動備份備服務器策略,並拷貝主服務器策略。
7.1.1 使用公私鑰進行免密碼登錄服務器(主備服務器均設置)
1) 由於root賬號不允許直接ssh登錄故生成公私鑰時使用admin賬號登錄
生成公私密鑰$ssh-keygen -t rsa -P ""
2) 拷貝公鑰至另一臺服務器$scp /home/admin/.ssh/id_rsa.pub [email protected]:/home/admin/.ssh/authorized_keys
同理,另一臺服務器也需要這樣設置,達到互認的目的。
7.1.2 為vhost文件夾增加可讀可列出權限(主服務器設置)
考慮到安全,此權限設置使用ACL進行控制。如不增加admin對此文件夾權限,則備服務器無法通過admin賬號進行下載。#setfacl –d –m u:admin:rwx /usr/local/nginx/vhost/
7.1.3 編輯vhost拷貝與判斷腳本(備服務器設置)
1)編輯/usr/local/nginx/vhostcopy.sh
3) 增加可執行權限#chmod +x /usr/local/nginx/vhostcopy.sh
7.1.4 設置計劃任務定期執行(備服務器設置)
1)為admin賬號增加計劃任務#crontab -u admin -e
2)用admin賬號在tmp目錄創建vhost文件夾$mkdir /tmp/vhost
4) root賬號增加計劃任務#crontab -e
八 keepalived日誌重定向
由於keepalived默認輸出到message中,message又很其他日誌,不便於查看keepalived的日誌,優化日誌輸出到/var/log/keepalived.log
1)編輯vim /etc/init.d/keepalivedd
編輯內容如下:
2)編輯/etc/rsyslog.conf,增加如下內容
7) 重啟日誌服務和keepalived服務
#service rsyslog restart;service keepalivedd restart
Linux Nginx+keepalived負載+高可用