1 nginx負載均衡高可用
1.1 什麼是負載均衡高可用
nginx作爲負載均衡器,所有請求都到了nginx,可見nginx處於非常重點的位置,如果nginx服務器宕機後端web服務將無法提供服務,影響嚴重。
爲了屏蔽負載均衡服務器的宕機,需要建立一個備份機。主服務器和備份機上都運行高可用(High Availability)監控程序,通過傳送諸如“I am alive”這樣的信息來監控對方的運行狀況。當備份機不能在一定的時間內收到這樣的信息時,它就接管主服務器的服務IP並繼續提供負載均衡服務;當備份管理器又從主管理器收到“I am alive”這樣的信息時,它就釋放服務IP地址,這樣的主服務器就開始再次提供負載均衡服務。
1.2 keepalived+nginx實現主備
1.2.1 什麼是keepalived
keepalived是集羣管理中保證集羣高可用的一個服務軟件,用來防止單點故障。
Keepalived的作用是檢測web服務器的狀態,如果有一臺web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常後Keepalived自動將web服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器。
1.2.2 keepalived工作原理
keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。
虛擬路由冗餘協議,可以認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master和多個backup,master上面有一個對外提供服務的vip(VIP = Virtual IP Address,虛擬IP地址,該路由器所在局域網內其他機器的默認路由爲該vip),master會發組播,當backup收不到VRRP包時就認爲master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。
keepalived主要有三個模塊,分別是core、check和VRRP。core模塊爲keepalived的核心,負責主進程的啓動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。VRRP模塊是來實現VRRP協議的。
1.1.1 keepalived+nginx實現主備過程
1.1.1.1 初始狀態
1.1.1.2 主機宕機
1.1.1.3 主機恢復
1.1.2 高可用環境
兩臺nginx,一主一備:192.168.100.205和192.168.100.206
兩臺tomcat服務器:192.168.100.208、192.168.100.209
1.1.1 安裝keepalived
1. 安裝環境
su - root
yum -y install kernel-devel*
yum -y install openssl-*
yum -y install popt-devel
yum -y install lrzsz
yum -y install openssh-clients
yum -y install libnl libnl-devel popt
2. 安裝keepalived
2.1. 安裝keepalived
將keepalived-1.2.15.tar.gz上傳到服務器/usr/local/下。
cd /usr/local
tar -zxvf keepalived-1.2.15.tar.gz
cd keepalived-1.2.15
執行配置命令
./configure --prefix=/usr/local/keepalived
3、編譯
make
4、安裝
make install
至此安裝成功
5、拷貝執行文件
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
6、將init.d文件拷貝到etc下,加入開機啓動項
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
7、將keepalived文件拷貝到etc下,加入網卡配置
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
8、創建keepalived文件夾
mkdir -p /etc/keepalived
9、將keepalived配置文件拷貝到etc下
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
10、添加可執行權限
chmod +x /etc/init.d/keepalived
2.2. 加入開機啓動:
chkconfig --add keepalived #添加時必須保證/etc/init.d/keepalived存在
chkconfig keepalived on
添加完可查詢系統服務是否存在:chkconfig --list
2.3. 啓動keepalived
啓動:service keepalived start
停止:service keepalived stop
重啓:service keepalived restart
3. 配置日誌文件
1.將keepalived日誌輸出到local0:
vi /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -d -S 0"
2.在/etc/rsyslog.conf裏添加:
local0.* /var/log/keepalived.log
3.重新啓動keepalived和rsyslog服務:
service rsyslog restart
service keepalived restart
4. 打開防火牆的通訊地址
iptables -A INPUT -d 224.0.0.18 -j ACCEPT
/etc/rc.d/init.d/iptables save
1.1.1 配置keepalived
# notification_email { ##下面幾行均爲全局通知配置,可以實現出現問題後報警,但功能有限,因此註釋掉,並採用Nagios監視lvs運行情況
# [email protected]
# }
# notification_email_from [email protected]
# smtp_server smtp.exmail.qq.com
# smtp_connect_timeout 30
router_id LVS_DEVEL ##設置lvs的id,在一個網絡內應該是唯一的
}
vrrp_instance VI_1 { ##設置vrrp組,唯一且同一LVS服務器組要相同
state MASTER ##備份LVS服務器設置爲BACKUP
interface eth0 # #設置對外服務的接口
virtual_router_id 51 ##設置虛擬路由標識
priority 100 #設置優先級,數值越大,優先級越高,backup設置爲99,這樣就能實現當master宕機後自動將backup變爲master,而當原master恢復正常時,則現在的master再次變爲backup。
advert_int 1 ##設置同步時間間隔
authentication { ##設置驗證類型和密碼,master和buckup一定要設置一樣
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { ##設置VIP,可以多個,每個佔一行
192.168.100.16
}
}
virtual_server 192.168.100.16 80 {
delay_loop 6 ##健康檢查時間間隔,單位s
lb_algo wrr ##負載均衡調度算法設置爲加權輪叫
lb_kind DR ##負載均衡轉發規則
nat_mask 255.255.255.0 ##網絡掩碼,DR模式要保障真實服務器和lvs在同一網段
persistence_timeout 50 ##會話保持時間,單位s
protocol TCP ##協議
real_server 192.168.100.205 80 { ##真實服務器配置,80表示端口
weight 3 ##權重
TCP_CHECK { ##服務器檢測方式設置 keepalived的健康檢查方式 有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
connect_timeout 5 ##連接超時時間
nb_get_retry 3 ##失敗重試次數
delay_before_retry 3 ##失敗重試的間隔時間
connect_port 80 ##連接的後端端口
}
}
}
# notification_email { ##下面幾行均爲全局通知配置,可以實現出現問題後報警,但功能有限,因此註釋掉,並採用Nagios監視lvs運行情況
# [email protected]
# }
# notification_email_from [email protected]
# smtp_server smtp.exmail.qq.com
# smtp_connect_timeout 30
router_id LVS_DEVEL ##設置lvs的id,在一個網絡內應該是唯一的
}
vrrp_instance VI_1 { ##設置vrrp組,唯一且同一LVS服務器組要相同
state backup ##備份LVS服務器設置爲BACKUP
interface eth0 # #設置對外服務的接口
virtual_router_id 51 ##設置虛擬路由標識
priority 50 #設置優先級,數值越大,優先級越高,backup設置爲99,這樣就能實現當master宕機後自動將backup變爲master,而當原master恢復正常時,則現在的master再次變爲backup。
advert_int 1 ##設置同步時間間隔
authentication { ##設置驗證類型和密碼,master和buckup一定要設置一樣
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { ##設置VIP,可以多個,每個佔一行
192.168.100.16
}
}
virtual_server 192.168.100.16 80 {
delay_loop 6 ##健康檢查時間間隔,單位s
lb_algo wrr ##負載均衡調度算法設置爲加權輪叫
lb_kind DR ##負載均衡轉發規則
nat_mask 255.255.255.0 ##網絡掩碼,DR模式要保障真實服務器和lvs在同一網段
persistence_timeout 50 ##會話保持時間,單位s
protocol TCP ##協議
real_server 192.168.100.206 80 { ##真實服務器配置,80表示端口
weight 3 ##權重
TCP_CHECK { ##服務器檢測方式設置 keepalived的健康檢查方式 有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
connect_timeout 5 ##連接超時時間
nb_get_retry 3 ##失敗重試次數
delay_before_retry 3 ##失敗重試的間隔時間
connect_port 80 ##連接的後端端口
}
}
}
1. nginx介紹
1.1. 什麼是nginx
Nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。由俄羅斯的程序設計師Igor Sysoev所開發,官方測試nginx能夠支支撐5萬併發鏈接,並且cpu、內存等資源消耗卻非常低,運行非常穩定。
1.2. Nginx的應用場景
1、http服務器。Nginx是一個http服務可以獨立提供http服務。可以做網頁靜態服務器。
2、虛擬主機。可以實現在一臺服務器虛擬出多個網站。例如個人網站使用的虛擬主機。
3、反向代理,負載均衡。當網站的訪問量達到一定程度後,單臺服務器不能滿足用戶的請求時,需要用多臺服務器集羣可以使用nginx做反向代理。並且多臺服務器可以平均分擔負載,不會因爲某臺服務器負載高宕機而某臺服務器閒置的情況。
2. nginx安裝
2.1. 下載
進入http://nginx.org/en/download.html 下載nginx1.8.0版本(當前最新穩定版本)。
1.1. 安裝
i. nginx安裝環境
nginx是C語言開發,建議在linux上運行,本教程使用Centos6.5作爲安裝環境。
n gcc
安裝nginx需要先將官網下載的源碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc:yum install gcc-c++
n PCRE
PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx的http模塊使用pcre來解析正則表達式,所以需要在linux上安裝pcre庫。
yum install -y pcre pcre-devel
注:pcre-devel是使用pcre開發的一個二次開發庫。nginx也需要此庫。
n zlib
zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,所以需要在linux上安裝zlib庫。
yum install -y zlib zlib-devel
n openssl
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程序供測試或其它目的使用。
nginx不僅支持http協議,還支持https(即在ssl協議上傳輸http),所以需要在linux安裝openssl庫。
yum install -y openssl openssl-devel
ii. 編譯安裝
將nginx-1.8.0.tar.gz拷貝至linux服務器。
解壓:
tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0
1、 configure
./configure --help查詢詳細參數(參考本教程附錄部分:nginx編譯參數)
參數設置如下:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
注意:上邊將臨時文件目錄指定爲/var/temp/nginx,需要在/var下創建temp及nginx目錄
2、 編譯安裝
make
make install
安裝成功查看安裝目錄 :
1.1. 啓動nginx
cd /usr/local/nginx/sbin/
./nginx
查詢nginx進程:
注意:執行./nginx啓動nginx,這裏可以-c指定加載的nginx配置文件,如下:
./nginx -c /usr/local/nginx/conf/nginx.conf
如果不指定-c,nginx在啓動時默認加載conf/nginx.conf文件,此文件的地址也可以在編譯安裝nginx時指定./configure的參數(--conf-path= 指向配置文件(nginx.conf))
1.1. 停止nginx
方式1,快速停止:
cd /usr/local/nginx/sbin
./nginx -s stop
此方式相當於先查出nginx進程id再使用kill命令強制殺掉進程。
方式2,完整停止(建議使用):
cd /usr/local/nginx/sbin
./nginx -s quit
此方式停止步驟是待nginx進程處理任務完畢進行停止。
1.2. 重啓nginx
方式1,先停止再啓動(建議使用):
對nginx進行重啓相當於先停止nginx再啓動nginx,即先執行停止命令再執行啓動命令。
如下:
./nginx -s quit
./nginx
方式2,重新加載配置文件:
當nginx的配置文件nginx.conf修改後,要想讓配置生效需要重啓nginx,使用-s reload不用先停止nginx再啓動nginx即可將配置信息在nginx中生效,如下:
./nginx -s reload
1.3. 安裝測試
nginx安裝成功,啓動nginx,即可訪問虛擬機上的nginx:
Welcome to nginx!-192.168.100.206
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.
Thank you for using nginx.
到這說明nginx基本上安裝成功。