此示例爲keepalived+nginx+tomcat的基礎配置示例,某些特定配置此例中不會出現,在示例中會用到三個虛擬機:兩個純命令行用於模擬服務端配置,一個帶桌面環境的用於模擬客戶端訪問,這樣三臺虛擬機使用NAT模式鏈接的時候是在同一個虛擬網絡中,更符合服務器的實際使用場景,虛擬機軟件爲VMPlayer,這個對於我的能夠無償使用,用起來來不錯,推薦一下。html
本實例中是模擬使用場景,機器性能有限,全部nginx和Tomcat就放到一個機器上了,實際場景中若是能夠儘可能分開,防止nginx所在服務器出問題時跟着當掉一個或多個Tomcatjava
此部分是爲了照顧對於虛擬機安裝不熟悉的同窗,若是已經熟悉了虛擬機的安裝或有實體機環境等,能夠跳過此步驟linux
打開VMPlayer,而後界面以下,點擊建立新虛擬機nginx
彈出頁面後選擇最後一項,稍後安裝操做系統,這裏必定要選擇這個,由於若是選擇其餘直接安裝的話會使用簡易安裝,默認安裝完是帶桌面的c++
下一步,而後選擇Centos 64位的操做系統,這個須要針對鏡像來選擇,我這裏選這個是由於我有現成的64位鏡像web
下一步,這裏設置下虛擬機的名字和安裝地址,便於區分apache
下一步,而後須要設置硬盤,大小隨意(虛擬機建立以後硬盤大小隻能增大不能減少了,因此這裏能夠設置的小一點,親測配置完成後也就才2G,這裏設置5G應該就足夠了),下邊兩項也是二選一隨意瀏覽器
下一步,界面以下,這裏咱們須要點擊「自定義硬件」來配置系統的光驅,若是實體機的配置低的話能夠在這裏下降下虛擬機的CPU和內存等,命令行模式下的CentOS並不須要多高的配置(單核512M能夠無壓力運行)tomcat
在打開的界面中選擇光驅,而後選擇使用ISO鏡像,點擊瀏覽選擇鏡像便可,這個鏡像能夠從CentOS官網下載安全
以後點擊關閉,再點擊完成便可,此時的界面以下:
此時虛擬機的硬件已經準備完畢,接下來咱們點擊播放虛擬機配置系統,點擊後界面以下,選擇第一項Install
接下來稍等片刻會進入圖形化界面,這裏不用擔憂,這個只是安裝的圖形界面,與以後系統不要緊,以下:
由於是要最小化安裝,因此語言默認英文便可,點擊Continue,跳轉後的界面爲配置界面,咱們僅須要修改下圖中紅框的部分,其餘的默認便可。
第二項是配置系統的網絡,默認不鏈接,因此咱們須要點擊進入配置頁面,而後將右上角的OFF置成ON,而後點擊DONE,以後會跳轉回一開始的設置頁,咱們就能夠開始系統的安裝了,點擊Begin Installation,接下來須要設置用戶
ROOT用戶的密碼是必需要建立的,其餘用戶能夠根據須要進行建立,這裏我只設置了ROOT用戶的密碼,方便後續的操做,不用考慮權限問題,實際應用中是要用其餘用戶操做的,後續的操做可視狀況賦予權限便可。還有須要注意的是若是用戶的密碼強度很低,須要點擊兩次DONE來肯定。
接下來就是等待結束重啓便可,至此CentOS就安裝完成了
建立客戶端虛擬機(簡易安裝安裝)
在這個實例中客戶端有兩個用處,一是經過瀏覽器測試服務端的服務是否好用;二是經過FTP向服務端上傳幾個源碼包。其實上傳源碼包這個功能大部分狀況下實體機也是能夠操做的,但實體機的瀏覽器在我測試過程當中是沒法訪問服務端的服務的,這個具體的緣由不清楚。
客戶端虛擬機對操做系統無限制,只要能夠運行瀏覽器便可,其實命令行模式下的linux也是能夠訪問的,不過不太直觀,若是想用實體機進行訪問的話也能夠,不過須要將虛擬機的網絡鏈接模式改成橋接模式,並且對網絡有要求,須要支持DHCP才能夠。
安裝過程和服務端的很相似,只有第二部有所區別,服務器須要選擇稍後安裝操做系統,但客戶端的虛擬機使用第二項選擇鏡像便可,以後會提示設置系統的用戶名和密碼,以後的步驟就同樣了,並且自定義硬件的時候再也不須要設置光驅。
這裏以Server01爲示例,其實咱們須要配置兩臺的,我使用的用戶是root用戶,實際應用中可能須要在其餘用戶下進行,視狀況賦予權限便可。
由於咱們須要向虛擬機上傳一些用到的軟件(固然可使用wget來下載,只不過有點麻煩),因此這裏咱們實體機或者客戶端使用FTP客戶端進行鏈接(工具備不少,挑選本身順手的使用,這裏推薦Xftp和FileZilla,對於我的使用都是免費的),虛擬機的IP地址能夠經過ip addr進行查看,紅框中就是當前虛擬機的IP地址
如今系統是配置完成了,不過IP是隨機分配的,若是有須要能夠將服務器的地址改成靜態IP,不過這個IP通常不會發生變化,這裏我就先不改了,可是服務器的話是必定會設置固定IP的。
cd /usr/local/download rpm -i jdk-8u111-linux-x64.rpm
安裝後便可運行java -version查看安裝的版本信息
tar -xvf apache-tomcat-7.0.72.tar.gz mv apache-tomcat-7.0.72 /usr/local/Tomcat01 tar -xvf apache-tomcat-7.0.72.tar.gz mv apache-tomcat-7.0.72 /usr/local/Tomcat02
Tomcat01 8015 8081 8019 Tomcat02 8025 8082 8029
firewall-cmd --zone=public --add-port=8081/tcp
此時咱們在客戶端虛擬機中訪問 http://192.168.59.130:8081 便可看到Tomcat的歡迎頁了,此時還有一個問題,兩個Tomcat的首頁是同樣的,負載均衡成功後沒法分辨來自哪一個Tomcat,因此咱們要加點東西區分一下,我是在每一個歡迎頁的body中增長了一行標識以下,文件位於/usr/local/Tomcat01/webapps/ROOT/index.jsp
nginx能夠經過修改源的方式進行yum安裝,有須要的同窗能夠自行搜索下,本例中使用源碼安裝
tar -xvf nginx-1.10.2.tar.gz
yum install gcc
cd /usr/local/download/nginx-1.10.2 ./configure --prefix=/usr/local/nginx
tar -xvf pcre-8.39.tar.gz
cd /usr/local/download/nginx-1.10.2 ./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/download/pcre-8.39
恭喜,又報錯了,此次提示換成了這個,因此咱們又須要下載zlib的源碼,老辦法上傳到老地方,而後解壓,這裏命令就不詳細說了,跟以前同樣,我下載的版本是1.2.8
cd /usr/local/download/nginx-1.10.2 ./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/download/pcre-8.39 --with-zlib=/usr/local/download/zlib-1.2.8
make && make install && make clean
原本覺得能夠愉快的結束了的,結果。。。。。。
yum install gcc-c++
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload
以後咱們能夠在客戶端的瀏覽器中輸入 http://192.168.59.130 進行測試,若是出現以下頁面表示nginx啓動成功了
nginx是能夠作成系統服務的,實際應用中也大可能是這麼作的,不過這裏只是個示例,就不作成服務了,若是有須要的能夠自行百度,固然若是使用yum安裝的話安裝完成就已經註冊服務了
以前Tomcat咱們已經作好了配置,接下來只須要在nginx中配置便可,配置文件爲/usr/local/nginx/conf/nginx.conf,以下圖添加upstream部分,將localtion部分更改成圖中部分便可,server能夠是其餘服務器上的服務,weight越高越容易被分發請求,這裏我暫時寫本機的,另外實際使用中upstream第一行要加入ip_hash來保證同一用戶一次只能訪問同一臺服務器,解決session跨服務器丟失的問題,若是系統內使用其餘方法處理了session的共享問題就不要加了,這個實例中咱們就不加入了,由於加入了之後刷新瀏覽器頁面不會變化
/usr/local/nginx/sbin/nginx -s stop /usr/local/nginx/sbin/nginx /usr/local/Tomcat01/bin/start.sh /usr/local/Tomcat02/bin/start.sh
接下來能夠在實體機的瀏覽器進行測試了,連續訪問虛擬機的nginx,這時Tomcat歡迎頁就會在01和02之間來回切換,至此負載均衡配置結束,而後你們能夠回過頭去再建立一個Server02從新配置一遍了,由於keepalived就須要根據機器分主次了,配置文件是不同的,配置完成的話server01的nginx也能夠設置將請求分發到server02的tomcat上,不過這裏爲了演示就不添加了,後續好區分請求由哪臺機器響應
yum install keepalived
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eno16777736 --destination 224.0.0.18 --protocol vrrp -j ACCEPT firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface eno16777736 --destination 224.0.0.18 --protocol vrrp -j ACCEPT firewall-cmd --reload
至此Keepalived的配置也完成了,經過ip addr查看可發現主服務上帶有192.168.59.100的虛擬IP而從服務器上沒有,關閉主服務器的keepalived,虛擬IP則會轉移到從服務器上來,測試服務器經過瀏覽器訪問 http://192.168.59.100 可看到虛擬IP轉移的效果,頁面會從主服務器的頁面轉換爲從服務器的頁面,這裏就不上圖片了
#!/bin/bash count=0 for (( k=0; k<2; k++ )) do check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" http://localhost/login.html -o /dev/null ) if [ "$check_code" != "200" ]; then count=$(expr $count + 1) sleep 3 continue else count=0 break fi done if [ "$count" != "0" ]; then exit 1 else exit 0 fi
chmod +x check_status.sh
vrrp_script check_status { script "/etc/keepalived/check_status.sh" interval 5 weight -5 } vrrp_instance VI_1 { state MASTER interface eno16777736 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.59.100 } track_script { check_status } }
配置完成後重啓keepavlied便可,此時若是關閉本機的nginx的話能夠看到在5秒後虛擬IP會漂移到備用服務器上去,這裏由於演示的話圖片太多了,就不上圖片了,nginx退出能夠執行nginx -s stop命令,若是是使用yum安裝的nginx能夠經過systemctl來中止nginx服務
實際使用當中常用到的還有在切換服務器時發送郵件用以提醒運維人員主服務器異常,方法有不少種,此例中就再也不贅述,有興趣的能夠自行查找相關資料
本示例到此結束,若是各位有什麼意見或建議,歡迎留言指教,轉載請註明源地址 另說明,markdown文檔中的代碼因爲未知緣由傳上來之後格式有點混亂,你們使用的時候注意下格式,不要少個括號之類的