使用的資源:
nginx主伺服器一台,nginx備伺服器一台,使用keepalived進行宕機切換。
tomcat伺服器兩台,由nginx進行反向 Proxy和負載平衡,此處可搭建伺服器叢集。
redis伺服器一台,用於session的分離共用。
nginx主伺服器:192.168.50.133
nginx備伺服器:192.168.50.135
tomcat專案服務器1:192.168.50.137
tomcat專案服務器2:192.168.50.139
redis伺服器:192.168.50.140
注意訪問時需要配置防火牆規則,或者關閉防火牆
首先進行的通用安裝:
總的需要類比五台伺服器,使用vmware,全部使用centos6.5 64位,五台伺服器全部安裝jdk,我使用的是jdk1.8.
1、安裝VMware虛擬機器,安裝linux系統,此處使用centOS6.5 64位,安裝linux命令列工具,上傳檔案工具,此處使用SecureCRT,SecureFX 。安裝教程不再贅述,百度一大堆..........
這步有問題請使勁點:www.baidu.com
2、在linux上安裝jdk:
安裝jdk:卸載openjdk版本,上傳解壓jdk,配置環境變數----參考:http://jingyan.baidu.com/article/ab0b56308966acc15afa7d18.html
一、Nginx反向 Proxy與負載平衡:
架構圖:
此時需要用到三台伺服器,一台nginx伺服器,兩台正式部署項目的伺服器:選擇的是192.168.50.133主nginx和192.168.50.137,192.168.50.139兩台tomcat伺服器
首先在兩台伺服器上安裝tomcat:這個也是簡單,不多說
安裝tomcat:上傳解壓即可使用,bin目錄下 startup.sh啟動,shutdown.sh關閉
配置防火牆連接埠:vim /etc/sysconfig/iptables 編輯,開放8080連接埠,80連接埠等一些常用連接埠,當然後邊有用到一些連接埠都是需要配置開放的,不建議關閉防火牆
編輯好後 service iptables restart 重新載入防火牆配置
如果是自己測試嫌配置麻煩,關閉防火牆: service iptables stop 重啟後防火牆開啟,即在此次開機狀態下有效,完全關閉再使用 chkconfig iptables off ,即會在重啟後也關閉防火牆,注意有時候服務都起了但訪問出錯,可能就是防火牆問題哦
啟動tomcat訪問:192.168.50.137:8080,192.168.50.139:8080,開啟tomcat首頁即成功。
然後編寫測試專案,部署到兩台tomcat上,eclipse建立web項目,項目名為testproject,在webapp下建立一個jsp頁面為index.jsp,添加如下內容
將項目中web.xml中的訪問順序<welcome-file>index.jsp</welcome-file>上移到第一個訪問
然後右鍵匯出為war包,testproject.war,將該war包上傳到兩台伺服器的tomcat的webapps中
然後修改tomcat的server.xml檔案,在tomcat conf目錄中:可以使用notepad++的外掛程式NppFTP直接連上linux,然後使用notepad++修改檔案哦,儲存記得使用UTF-8無BOM格式,具體去百度吧,哈哈
修改Engine標籤中,添加jvmRoute,用於標識nginx訪問的是哪個伺服器tomcat,137伺服器標識為137Server1,139伺服器標識為139Server2
在兩台tomcat的server.xml檔案,Host標籤中添加:<Context path="" docBase="testproject"/>,path標識訪問路徑,docBase為項目名,表示訪問項目
此時,重新啟動tomcat,訪問192.168.50.137:8080,192.168.50.139:8080,顯示index.jsp內容:兩台伺服器訪問顯示如下
至此,兩台tomcat伺服器搭建完成。
在nginx主機192.168.50.133上安裝nginx:
先使用yum命令安裝gcc,安裝pcre,zlib,openssl:
yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel plain
在/usr/local/目錄下建立nginx-src目錄,將nginx-1.8.0.tar.gz放到此處,解壓
tar -zxvf nginx- 1.8.0.tar.gz
進入解壓後目錄
依次執行命令:
./configure make mkae install
此時nginx安裝完畢,安裝目錄是/usr/local/nginx,nginx預設佔用80連接埠
其中,sbin目錄為nginx執行命令,conf目錄下的nginx.conf為預設載入的設定檔
啟動nginx:
./sbin/nginx
關閉nginx:
./sbin/nginx -s stop
啟動nginx後訪問192.168.50.133:80即可訪問nginx:顯示nginx歡迎頁面
至此,nginx安裝完畢。
3、反向 Proxy與負載平衡配置
現有兩台伺服器,一台為192.168.50.137,一台為192.168.50.139,伺服器上各有一台tomcat,連接埠均為8080,在192.168.50.133上有nginx,經過配置nginx,當訪問192.168.50.133:80時,即可訪問192.168.50.137:8080,192.168.50.139:8080中隨機一台,此時192.168.50.133:80被nginx監聽,當有請求時,代理到192.168.50.137:8080,192.168.50.139:8080隨機一台即可,即為nginx反向 Proxy功能,同時此時可以通過nginx將請求進行轉寄,保證了一個入口,將所有請求轉寄到兩台伺服器上也減輕了任何一台的負載壓力,當有大量請求時,可以搭建大量伺服器,在入口Proxy 伺服器上使用nginx進行轉寄,即是負載平衡功能。
配置即是配置nginx安裝目錄中conf目錄下的nginx.conf檔案即可:具體配置如下,重點是紅色部分
啟動兩台tomcat,重新啟動nginx:
訪問192.168.50.133:80將會隨機訪問192.168.50.137:8080和192.168.50.139:8080其中一台。(問題:每次重新整理nginx伺服器位址sessionid會變,session不能共用。)
nginx輪詢策略:
nginx負載平衡到多台伺服器上時,預設採用輪詢策略:
常見策略:
1、輪詢
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
2、weight
指定輪詢幾率,weight和訪問比率成正比,用於後端伺服器效能不均的情況,數字越大命中率越高。
例如:輪詢幾率是2:1
upstream bakend {
server 192.168.0.14 weight=2;
server 192.168.0.15 weight=1;
}
2、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
其他策略可以自行查詢學習,nginx還有很多其他可配置項,靜態資源緩衝,重新導向等,想深入的童鞋請自行學習
nginx配置詳解:http://blog.csdn.net/tjcyjd/article/details/50695922
實際問題:雖然解決了,但是不是很理解,記錄一下
其中192.168.50.133:80是有外網映射的,外網55.125.55.55:5555映射到192.168.50.133:80上,此時使用55.125.55.55:5555訪問,會映射到192.168.50.133:80上,然後會被轉寄到192.168.50.137:8080或192.168.50.139:8080,但是此時卻出現圖片,js,css等靜態檔案無法訪問的情況,通過兩種方法解決。
<1>.映射非80連接埠
讓55.125.55.55:5555映射192.168.50.133的非80連接埠,例如55.125.55.55:5555映射192.168.50.133:5555,然後再在nginx設定檔中配置如下,注意紅色加大部分:這地方不理解
此時訪問55.125.55.55:5555,映射到192.168.50.133:5555上,然後轉寄到192.168.50.137:8080或192.168.50.139:8080上,此時靜態檔案均能訪問。
<2>.使用網域名稱在外網伺服器上使用nginx進行轉寄
將55.125.55.55綁定網域名稱為test.baidubaidu.com,此時在55.125.55.55伺服器上使用nginx,
........location / { #加入判斷,如果網域名稱為test.baidubaidu.com,轉寄到192.168.50.133:80,然後再進行轉寄,注意,此處未進行測試,貌似是這麼寫的,$hostname為nginx變數,可以擷取網域名稱 if( $hostname= "test.baidubaidu.com"){ proxy_pass http: //192.168.50.133:80; } #proxy_redirect off; #非80連接埠使用,目的是將Proxy 伺服器收到的使用者的資訊傳到真實伺服器上,我也不是很理解 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded- For$proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; proxy_buffer_size 4k; proxy_buffers 432k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; add_header Access-Control-Allow-Origin *; }........
以上即nginx反向 Proxy與負載平衡介紹,經過此次學習,發現nginx確實是博大精深,一個設定檔搞得我不要不要的。。。
二、session共用問題:
由於nginx是隨機分配請求,假設一個使用者登入時訪問網站登入時被分配到192.168.50.137:8080上,然後進行了登入操作,此時該伺服器上就會有該使用者登入的session資訊,然後登陸後重新導向到網站首頁或個人中心時,此時如果被分配到192.168.50.139:8080上,那麼這台伺服器上沒有該使用者session資訊,於是又會變成未登入狀態,所以由於nginx的負載平衡會導致session共用的問題。
解決方案:
1、nginx提供了ip_hash策略,可以保持使用者ip進行hash值計算固定分配到某台伺服器上,然後只要是該ip則會保持分配到該伺服器上,保證使用者訪問的是同一台伺服器,那麼session問題就不存在了。這也是解決session共用的一種方式,也稱為黏性session。但是假設一台tomcat伺服器掛了的話,那麼session也會丟失。所以比較好的方案是抽取session。
2、session存在memcache或者redis中,以這種方式來同步session,把session抽取出來,放到記憶體級資料庫裡面,解決了session共用問題,同時讀取速度也是非常之快。
本例中:
Redis解決session共用:
在redis伺服器192.168.50.140上搭建redis,redis預設連接埠為6379
Redis搭建:
redis依賴gcc,先安裝:
yum install -y gcc-c++
下載redis,我使用的是redis-3.2.1.tar.gz,上傳至linux /usr/local/redis-src/中,解壓
進入解壓後目錄redis-3.2.1,執行make命令進行編譯
安裝到目錄/usr/local/redis
執行:
make PREFIX=/usr/local/redis install
安裝完成之後將redis設定檔拷貝到安裝目錄下,redis.conf是redis的設定檔,redis.conf在redis源碼目錄,port預設6379。
執行命令:
cp /usr/local/redis-src/redis- 3.2.1/redis.conf /usr/local/redis/
在redis安裝目錄啟動和關閉redis:
啟動:
./bin/redis-server ./redis.conf
這種啟動方式叫做前端啟動,必須保持在當前視窗,如果ctrl + c 退出,那麼redis也就退出了,不建議使用
那麼後端啟動:
首先修改redis.conf中daemonize的值,開啟可以看到預設是no,修改為daemonize yes,啟動即可。也可以在該設定檔中修改redis預設連接埠6379為其他值。
關閉redis:
./bin/redis-cli shutdown
至此,redis伺服器搭建完成。
tomcat與redis整合實現session共用:
環境為tomcat7 + jdk1.6的話:
在所有需要共用session的伺服器的tomcat中目錄下:
lib目錄中添加以下三個jar包,注意版本最好一致,不然極容易出現錯誤,下邊的測試是可用的:
conf目錄中content.xml中加入:配置redis服務
環境為tomcat7 + jdk1.7或1.8的話:
在所有需要共用session的伺服器的tomcat中目錄下:
lib目錄中添加以下三個jar包,測試通過:
conf目錄中content.xml中加入:配置redis服務
根據我這測試,是jkd1.8+tomcat7,在137和139兩台tomcat中加入jar包且進行如上配置:
上傳jar包
修改content.xml
啟動redis服務,重新啟動所有tomcat,啟動nginx,重新整理nginx頁面,兩台tomcat頁面可以看到sessionid值不變,關閉某台tomcat,nginx中sessionid不變,說明session是共用的。
問題:
有可能此時訪問會報錯,redis無法訪問,這是由於redis的安全機制,預設只有127.0.0.1才能訪問,在redis.conf中可以找到bind 127.0.0.1,你可以將此ip改為訪問者ip,
如果有多個訪問者,也可以把bind 127.0.0.1注釋掉,然後在設定檔中找到protected-mode,修改protected-mode yes改為protected-mode no 關閉redis保護模式即可
詳細可以參考這:http://www.cnblogs.com/liusxg/p/5712493.html
經過大牛指點:添加兩個注意點:
1、按照如上配置,使用redis資料庫,放入session中的對象必須要實現java.io.Serializable介面,使用memcache的可以不用實現Serializable介面
原因是:因為tomcat裡使用的將session放置redis使用的工具類,是使用的jdk序列化模式儲存的,這一點也是很容易理解的,session.setAttribute(String key, Object value),儲存Object類型
object放入redis中又要能取出來,只能是序列化進行儲存了,然後取出的時候進行還原序列化。
所以我們在session中儲存的任何對象,都必須實現序列化介面。
2、按照如上配置,使用redis做session儲存空間時,web應用的session-time的時間單位會變成[秒],而不是原本的[分]
原因是:因為tomcat裡使用的將session放置redis使用的工具類,在儲存時為對tomcat容器時間做轉換,
在redis中設定到期時間是使用秒作為單位的,有個命令叫expire可以設定redis索引值到期時間,所以在context.xml設定檔中我們需要制定session到期時間(預設是60秒,配成1800即30分鐘),這一點很重要。
請注意。。。。
context.xml配置說明:
三、keepalived高可用:
架構圖:
上圖畫的不對稱好難看,將就下吧
根據上邊一路走來,已經是搭好了從nginx主到伺服器的這條線的,那麼同理,使用nginx備機192.168.50.135上再搭建nginx,也是代理192.168.137和139兩台伺服器。搞了一次之後也就簡單了
在192.168.50.135上安裝nginx,配置nginx配置即可,不再贅述,nginx備機配置如下:
配置和上邊的是一樣的,只不過監聽的地方的ip了而已
那麼現在就是相當於有兩套nginx了,代理的伺服器是一樣的,為什麼要搞兩套。
假設只有一台nginx的話,這個nginx伺服器掛了。那怎麼辦。
所以需要一台備份nginx。
正常情況下,主nginx作為反向 Proxy伺服器即可,假設nginx伺服器掛了的話,能夠立即切換到備份機上,保證使用者可以訪問,然後營運人員把主nginx伺服器故障修好之後,又能夠自動切換到主nginx提供服務。通過keepalived來監測兩台伺服器,正常情況時,將nginx主伺服器ip(192.168.50.133)綁定到keepalived定義的一個虛擬ip(我設定為192.168.50.88)上,通過這個虛擬IP可以訪問nginx,然後備機(192.168.50.135)啥事不幹,就是每隔一小段時間(設定為1秒)keepalived會告訴備機,你不用管,我還活著呢,如果突然主機死了,那麼就會超過一秒備機沒有收到主機或者的訊息,那麼備機馬上接管主機,keeplived將虛擬ip綁定到備機身上,網站繼續提供服務。
突然主機又複活了(營運人員排除故障了),那麼備機又將收到主機的活著的訊息,於是將管理權交回給主機,虛擬ip又綁到主機上,大概就是這麼個過程,個人理解。
先在兩台nginx伺服器(主備)上都裝上keepalived:
下載:這裡使用rpm安裝,是區分32,64位的,不要搞錯了哦
keepalived-1.2.7-3.el6.x86_64.rpm
openssl-1.0.1e-30.el6_6.4.x86_64.rpm
要求必須是openssl-1.0.1e或以上才行、如果版本已經符合(因為安裝nginx時已經安裝openssl,使用yum安裝應該是符合的)、不用再安裝openssl,使用 rpm -q openssl 查看當前openssl版本,我這已經是1.0.1e 48的,所以就不安裝了
將兩個rpm安裝包上傳到兩台nginx伺服器,進入上傳到的目錄,運行以下命令安裝:--nodeps是忽略依賴包,當然最好是把依賴封裝上,去掉--nodeps可以看到錯誤,需要哪些依賴包
如果需要安裝openssl
rpm –Uvh --nodeps ./openssl- 1.0.1e-30.el6_6 .4.x86_64.rpm
安裝keepalived:
rpm -Uvh --nodeps ./keepalived- 1.2.7- 3.el6.x86_64.rpm
安裝完畢後再/etc/keepalived/目錄下有個檔案 keepalived.conf即是本台伺服器keepalived的核心設定檔了:
重點:keepalived配置,設定檔上邊部分按照下面的配置就行了,設定檔後面的內容可以不用管,還沒有去研究其他部分
先配置主機192.168.50.133的keepalived,按下邊進行配置
備機192.168.50.135的keepalived配置:
備機配置注意的地方:需要修改state為BACKUP , priority比MASTER低,virtual_router_id和master的值一致
醬紫,keepalived就配置完成了。
keeplived啟動關閉命令:
service keepalived start service keepalived stop service keepalived start service keepalived stop
啟動兩台nginx,啟動主機keepalived,啟動備機keepalived服務。
這時,nginx主機在提供服務,備機是閑著的,虛擬ip是192.168.50.88,在主機和備機上使用命令
ip addr
可以發現:
主機:可以看到,192.168.50.133 帶有虛擬ip192.168.50.88,在瀏覽器中輸入192.168.50.88,即可訪問到主nginx192.168.50.133.然後轉寄到tomcat伺服器上
瀏覽器訪問虛擬ip:192.168.50.88,效果如下
備機:ip addr命令執行:可以看到,備機nginx沒有綁定虛擬ip
以上是初始狀態下的情況,也是正常服務的情況。
現在測試高可用,假設主機nginx伺服器掛了,類比為關閉nginx主機或者將keepalived服務停止,那麼主機上keepalived死了就沒辦法告訴備機自己活著,而備機超過1秒沒有接收到主機給自己的訊息,馬上接管虛擬ip,同時在設定檔中配置切換主備機時發送郵件,此時Team Dev收到郵件即知道主機掛了,馬上去排除主機的故障。
將主機上的keepalived服務停止,service keepalived stop ,然後查看虛擬ip綁定情況,
主機掛了:可以看到虛擬ip就沒有綁在主機上
備機情況:虛擬ip已經綁定到備機,此時主機雖然掛了,但是切換到備機上了(發現故障和切換的時間差最大也就是1秒),虛擬ip也綁到備機上了,訪問虛擬ip,就會請求備機nginx然後轉寄到web伺服器實現高可用。
營運人員收到郵件後就去排除主機故障了,搞定之後(類比為keepalived服務啟動),這時主機告訴備機,我又活了,於是備機將管理權又交給主機(切換為主機nginx提供服務):
主機keepalived服務啟動後,即吧主機維護好之後:可以看到,虛擬ip又自動綁到了主機上
備機情況,主機活了之後,備機轉交管理權,虛擬ip切換到主機上,備機不綁定虛擬ip,貌似啟動keepalived服務之後並不能馬上切回,應該是起服務需要點時間吧,但是不影響,這段時間還是備機綁定虛擬IP的
這就是keepalived高可用的類比。
注意問題:
主機掛了之後,主機nginx恢複時,一定要將nginx也啟動,否則即使虛擬ip切換到了主機上,但是主機nginx沒起那也是沒法轉寄的。所以要把nginx啟動要加在開機啟動中。
四、Nginx服務開機自啟動:
在linux系統的/etc/init.d/目錄下建立nginx檔案,使用如下命令:(vim命令不會的自己去學吧哈哈)
vi /etc/init.d/nginx
將如下內容搞到該檔案中:注意紅色部分修改成你的路徑即可,nginxd值是啟動nginx的nginx路徑,nginx_config值是nginx設定檔nginx.conf路徑,nginx_pid值是nginx.pid所在路徑,如果按照我方法安裝的話,是在nginx安裝目錄的logs裡邊的
#!/bin/bash
# nginx Startup for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# deion: Nginx is a high-performance web and proxy server. #
It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /usr/local/nginx/logs/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf n
ginxd=/usr/local/nginx/sbin/nginx nginx_config=/usr/local/nginx/conf/nginx.conf nginx_pid=/usr/local/nginx/logs/nginx.pid RETVAL= 0
prog= "nginx"# Source function library.
. /etc/rc.d/init.d/functions # Source networking configuration.
. /etc/sysconfig/network # Check that networking is up.
[ ${NETWORKING} = "no"] && exit0
[ -x $nginxd] || exit0
# Start nginx daemons functions.
start() { if[ -e $nginx_pid];then echo"nginx already running...."exit1fi echo-n $ "Starting $prog: "daemon $nginxd-c ${nginx_config} RETVAL=$? echo[ $RETVAL= 0] && touch / var/lock/subsys/nginx return$RETVAL} # Stop nginx daemons functions. stop() { echo-n $ "Stopping $prog: "killproc $nginxdRETVAL=$? echo[ $RETVAL= 0] && rm -f / var/lock/subsys/nginx / var/run/nginx.pid } # reload nginx service functions.
reload() { echo-n $ "Reloading $prog: "#kill -HUP `cat ${nginx_pid}` killproc $nginxd-HUP RETVAL=$? echo} # See how we were called.
case"$1"in start) start ;; stop) stop ;; reload) reload ;; restart) stop start ;; status) status $progRETVAL=$? ;; *) echo$ "Usage: $prog {start|stop|restart|reload|status|help}"exit1esac exit$RETVAL
然後設定該檔案的存取權限:執行以下命令,意為所有使用者可訪問
chmod a+x /etc/init.d/nginx
最後將ngix加入到rc.local檔案中,這樣開機的時候nginx就預設啟動了
vi /etc/rc.local
添加
/etc/init.d/nginx start
儲存並退出,下次重啟就會生效,nginx的開機自啟動。測試無誤的。
四、解決nginx進程和keepalived不同時存在問題:
keepalived是通過檢測keepalived進程是否存在判斷伺服器是否宕機,如果keepalived進程在,但是nginx進程不在了,那麼keepalived是不會做主備切換。因為是nginx掛了,然後無法做代理,keepalived還在不會切換到備機。
所以一直檢測nginx是否還在,如果不在,那麼讓keepalived也停止,同生共死。
註:只需要在主機上搞就行了,備機沒必要檢測nginx,因為基本是主機在服務。
解決:寫個指令碼來監控nginx進程是否存在,如果nginx不存在就將keepalived進程殺掉。
註:keepalived不需要開機啟動,假如開機自啟的話,如果keepalived比nginx 更快啟動的話,指令碼檢測會把keepalived停掉的,所以沒必要,只需要nginx開機啟動,啟動主機後自行手動的把keepalived服務啟動即可。
在主nginx上編寫nginx進程檢測指令碼(check_nginx_dead.sh),在keepalived設定檔目錄下建立指令碼:
vi /etc/keepalived/check_nginx_dead.sh
把下邊這些內容搞到指令檔中,內容如下:
#!/bin/bash# 如果進程中沒有nginx則將keepalived進程kill掉A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx進程 把值賦給變數Aif[ $A-eq 0];then ## 如果沒有進程值得為 零service keepalived stop ## 則結束 keepalived 進程fi
給存取權限:不然不行哦,這裡卡了我半小時
chmod a+x /etc/keepalived/check_nginx_dead.sh
先測試一下指令碼:
把nginx停了,此時keepalived還在運行,所以不會切換,虛擬ip無法訪問到web伺服器
然後執行指令碼:
主機指令碼檢測nginx不在了,把keepalived停掉,從輸出可以看到確實停止了,主機虛擬沒有綁定虛擬ip
備機:成功綁定虛擬ip
所以,只需要讓該指令碼一直執行,即一直檢測nginx進程是否在,如果沒得了,那麼直接停止主機keepalived,切換備機,保證能夠訪問web伺服器。
按如下修改keepalived設定檔keepalived.conf,添加指令碼定義檢測:
只需要在正確的位置添加紅色部分即可:那麼指令碼則是兩秒執行一次,一旦發現主機nginx不在了,keepalived停止,切換備機
! Configuration File forkeepalived #這是全域配置global_defs { #指定keepalived在發生切換時需要發送email到的對象,一行一個notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } #指定寄件者notification_email_from Alexandre.Cassen@firewall.loc #指定smtp伺服器位址#smtp_server 192.168.200.1#指定smtp連線逾時時間#smtp_connect_timeout 30#運行keepalived機器的一個標識router_id LVS_DEVEL}vrrp_ check_nginx_dead { ##監控指令碼路徑 "/etc/keepalived/check_nginx_dead.sh"##時間間隔,2秒interval 2##權重weight 2} #主備配置vrrp_instance VI_1 { #標示狀態為MASTER 備份機為BACKUPstate MASTER #設定keepalived執行個體綁定的伺服器網卡,一般為eth0,linux使用ifconfig命令可查看當前伺服器網卡標識名interfaceeth0#同一執行個體下(即同一組主備機下)virtual_router_id必須相同 virtual_router_id51 #MASTER權重要高於BACKUP,MASTER為100則BACKUP最大為99 priority100 #MASTER與BACKUP負載平衡器之間同步檢查的時間間隔,單位是秒,設定為1秒 advert_int1 #設定認證 authentication{ #主從伺服器驗證方式,PASS為純文字密碼驗證auth_type PASS #密碼auth_pass 1111} track_ {