nginx作為http服務器,在集群中 用於接受客戶單發送過來的請求,並且根據配置的策略將請求 轉發給具體的哪台服務器
- 如果在nginx服務器使用輪詢策略處理客戶端的請求,出現了tomcat 宕機的情況下,例如:有兩個請求,第一個請求輪詢給了tomcat1,按照輪詢的策略,當在來一個請求的時候,這條請求 將交個
tomcat2處理,此時 如果tomcat2 由於不知名的原因,宕機了,那這條請求 被分配到tomcat2,那這條請求 則會一直得不到響應,用戶也不知道怎么回事。
nginx提供了宕機容錯機制,當tomcat2宕機以后,nginx可以通過配置超時,超過超時時間以后,則跳過當前服務器,輪詢下一台服務器
在nginx.conf文件中 配置 proxy_connect_timeout 1 連接超過1s 則跳過當前輪詢 - nginx作為http服務器,接受來自客戶端的請求,然后根據負載均衡策略,反向代理到集群中的服務器。在集群的過程中,服務器是不會暴露真實的ip地址,集群服務器和nginx服務器是在同一個給局域網,對外暴露也只是nginx服務器的公網ip
- 在上面說了,如果是集群中的服務器宕機了,例如tomcat集群中有一台宕機了,nginx的宕機容錯機制會跳過需要輪詢的tomcat,直接輪詢到下一台服務器。如果是nginx服務器宕機以后,又該如何解決,所有的請求都是經過nginx服務器 將請求發送給tomat,tomcat不會暴露真實的ip地址,所以此時的客戶端請求根本無法訪問到tomcat,此時所有的服務器都不能訪問
- 在nginx作為http服務器的時候,tomcat宕機了,nginx提供宕機容錯機制,如果nginx服務器自己宕機了,則需要依靠一些重啟腳本的工具,幫助監聽nginx的活動狀態,來保證nginx最大可能的處於正常運行的狀態,使用keepalived的可以監聽重啟 nginx 保證nginx的高可用
為了預防高並發,所以我們可以對tomcat集群,可以減輕單台服務器的壓力。為了預防nginx宕機,導致外網無法訪問tomcat,所以我們可以對nginx進行類似集群的操作,可以是一主一備,也可以是多主多備,根據實際用戶情況,考慮成本的情況,采用了一主一備。當nginx主機宕機以后,keepalived會監控nginx 發現nginx宕機了,則會自動切換到備機nginx,reids的主從復制中哨兵機制會檢測監控主reids是否宕機,如果宕機了,則從從redis選擇一台來作為master,當原來的主機啟動以后,主機不會切換,但是keepalived+nginx則不會,如果檢測到主nginx啟動以后,則繼續用主nginx如何
5 .什么是keepalived
Keepalived是一個免費開源的,用C編寫的類似於layer3, 4 & 7交換機制軟件,具備我們平時說的第3層、第4層和第7層交換機的功能。主要提供loadbalancing(負載均衡)和 high-availability(高可用)功能,負載均衡實現需要依賴Linux的虛擬服務內核模塊(ipvs),而高可用是通過VRRP協議實現多台機器之間的故障轉移服務。
使用keepalived+nginx實現nginx的高可用,宕機從啟
1.需要兩台或者兩台以上的服務器
ip:192.168.31.144 (主nginx)
ip:192.168.31.179 (從nginx)
2.兩台服務器都需要安裝nginx和keepalived
Linux安裝nginx可查看:https://www.cnblogs.com/taiyonghai/p/6728707.html
Linux安裝keepalived
1. http://www.keepalived.org/download.html 下載keepalived安裝包
2 將下載好的keepalived安裝包 放到linux /usr/local目錄下
3 tar -zxvf keepalived-1.2.18
.
4 yum -y install openssl-deve 安裝所需要的軟件包
5 cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
6 make&& make install
為了方便統一管理,將解壓編譯好的keepalived 配置文件進行地方修改
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
設置開機啟動:chkconfig keepalived on
nginx 重啟腳本:
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -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
keepalived最主要的是掌握它的配置文件 主配置文件
! Configuration File for keepalived
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #運行腳本,腳本內容下面有,就是起到一個nginx宕機以后,自動開啟服務
interval 2 #檢測時間間隔
weight -20 #如果條件成立的話,則權重 -20
}
# 定義虛擬路由,VI_1 為虛擬路由的標示符,自己定義名稱
vrrp_instance VI_1 {
state MASTER #來決定主從
interface eno16777736 # 綁定虛擬 IP 的網絡接口,根據自己的機器填寫
virtual_router_id 121 # 虛擬路由的 ID 號, 兩個節點設置必須一樣
mcast_src_ip 192.168.31.144 #填寫本機ip
priority 100 # 節點優先級,主要比從節點優先級高
nopreempt # 優先級高的設置 nopreempt 解決異常恢復后再次搶占的問題
advert_int 1 # 組播信息發送間隔,兩個節點設置必須一樣,默認 1s
authentication {
auth_type PASS
auth_pass 1111
}
# 將 track_script 塊加入 instance 配置塊
track_script {
chk_nginx #執行 Nginx 監控的服務
}
virtual_ipaddress {
192.168.31.110 # 虛擬ip,也就是解決寫死程序的ip怎么能切換的ip,也可擴展,用途廣泛。可配置多個。
}
}
從配置文件
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #運行腳本,腳本內容下面有,就是起到一個nginx宕機以后,自動開啟服務
interval 2 #檢測時間間隔
weight -20 #如果條件成立的話,則權重 -20
}
# 定義虛擬路由,VI_1 為虛擬路由的標示符,自己定義名稱
vrrp_instance VI_1 {
state BACKUP #來決定主從
interface ens33 # 綁定虛擬 IP 的網絡接口,根據自己的機器填寫
virtual_router_id 122 # 虛擬路由的 ID 號, 兩個節點設置必須一樣
mcast_src_ip 192.168.31.197 #填寫本機ip
priority 90 # 節點優先級,主要比從節點優先級高
nopreempt # 優先級高的設置 nopreempt 解決異常恢復后再次搶占的問題
advert_int 1 # 組播信息發送間隔,兩個節點設置必須一樣,默認 1s
authentication {
auth_type PASS
auth_pass 1111
}
# 將 track_script 塊加入 instance 配置塊
track_script {
chk_nginx #執行 Nginx 監控的服務
}
virtual_ipaddress {
192.168.31.110 # 虛擬ip,也就是解決寫死程序的ip怎么能切換的ip,也可擴展,用途廣泛。可配置多個。
}
}
兩台服務器啟動好以后,可以通過ip addr 查看到當前 主機的ip地址中包含了 虛擬的ip地址 如果主機宕機,則該虛擬ip會自動跑到備機
直接訪問 虛擬ip地址:192.168.31.110
關閉主nginx以后以后:
會自動切換到備nginx上面去
以上 則完成了keepalived+nginx實現 高可用,nginx宕機以后 keepalived完成nginx的自動重啟