本文將繼續單機架構升級集羣系列博文, 記錄nginx+keepalived主從高可用搭建工做的記錄,但願能幫助到須要的朋友們,也歡迎大牛們批評指正!! html
在博文( https://my.oschina.net/u/2342969/blog/995598 )中描述了本次架構升級的背景nginx
在博文( https://my.oschina.net/u/2342969/blog/1036702 )中記錄了redis主從集羣搭建 c++
以上博文有須要的朋友們能夠觀閱redis
本文將記錄nginx+keepalived主從集羣高可用搭建工做, 在此參考了 博文(http://blog.csdn.net/u012453843/article/details/69668663?locationNum=2&fps=1)瀏覽器
本段僅僅介紹一下基礎概念,供小白參考..tomcat
keepalived:它是集羣環境下保證高可用的一個服務軟件。 keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。 master上面有一個對外提供服務的vip(該路由器所在局域網內其餘機器的默認路由爲該vip),master會發組播,當backup收不到vrrp包時就認爲master宕掉了,這時就須要根據VRRP的優先級來選舉一個backup當master。這樣的話就能夠保證路由器的高可用了。 總結之,主備環境共有一個虛擬ip(自定義ip),外部用戶只須要訪問這個虛擬ip,主節點掛掉後,虛擬ip就會漂移到選舉出來的從節點上,對用戶無感知的。更多資料自行百度一下或者發私信評論。bash
nginx:nginx詳細信息可百度,本文只用nginx對tomcat作負載均衡使用。架構
keepalived :1.2.18 (版本不一樣和本文就會有不一樣之處) 負載均衡
nginx : 1.5.8spa
虛擬ip: 192.168.1.110
nginx下載地址:http://nginx.org/download/nginx-1.5.8.tar.gz
keepalived 下載地址:http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
本文采用的一主一從集羣模式
nginx_A 虛擬機ip:192.168.1.100
nginx_B 虛擬機ip:192.168.1.101
兩臺虛擬機安裝步驟同樣,
安裝目錄選擇的 /opt/nginx (目錄自定義)
通常咱們都須要先裝pcre, zlib(自行百度),前者爲了重寫rewrite,後者爲了gzip壓縮。
安裝nginx前,編譯環境gcc g++ 開發庫之類的須要提早裝好
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++
cd /opt
wget -c http://nginx.org/download/nginx-1.5.8.tar.gz
tar zxvf nginx-1.5.8.tar.gz
cd nginx-1.5.8
./configure --prefix=/opt/nginx --with-pcre= pcre-8.36的安裝路徑
make && make install
/opt/nginx/sbin/nginx
如圖所示,訪問成功。
以下圖兩臺虛擬機分別添加一行:
192.168.1.100: <p><em>This is nginx_A.</em></p>
192.168.1.101: <p><em>This is nginx_B.</em></p>
如圖:
192.168.1.100訪問結果:
192.168.1.101訪問結果:
啓動: /opt/nginx/sbin/nginx
修改配置後從新加載: /opt/nginx/sbin/nginx -s reload
中止: kill -9 pid
須要高可用的nginx對應的虛擬機均須要安裝keepalived服務,安裝步驟同樣
本文安裝目錄爲: /opt/keepalived
keepalived VIP(虛擬ip): 192.168.1.110
cd /opt
wget -c http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
tar -zxvf keepalived-1.2.18.tar.gz
cd keepalived-1.2.18
./configure --prefix=/opt/keepalived
make && make install
啓動命令: /opt/keepalived/sbin/keepalived -f /opt/keepalived/etc/keepalived/keepalived.conf
爲了方便啓停keepalived服務,作成系統服務自啓動
cp /opt/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ && cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived && cp /opt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
ln -s /opt/keepalived/sbin/keepalived /sbin/ && ln -s /opt/keepalived/sbin/keepalived /usr/sbin/
chkconfig keepalived on
就能夠使用如下命令啓停服務了: service keepalived [start | stop | reload | restart ]
兩臺機器按照以上步驟安裝完畢後,進入下面配置keepalived
192.168.1.100爲主節點, 192.168.1.101爲從節點, 192.168.1.110 爲VIP
注意: 此時keepalived的配置路徑爲 : /etc/keepalived/keepalived.conf
service keepalived stop
! Configuration File for keepalived global_defs { router_id nginx100 #自定義主機名 } # vrrp_script chk_nginx { #檢查nginx進程腳本此處暫未啓動 # script "/etc/keepalived/nginx_check.sh" # interval 2 # weight -20 # } vrrp_instance VI_1 { state MASTER # 主節點 爲 MASTER 從節點爲 BACKUP interface eth0 # 網卡標識名 virtual_router_id 11 mcast_src_ip 192.168.1.100 網卡ip priority 100 # 主節點 優先級數字須要高於從節點,多個從節點須要一次下降優先級 nopreempt advert_int 1 authentication { # 主從節點此區域須要一致 auth_type PASS auth_pass 1111 } track_script { # 執行上面檢測nginx進程腳本 chk_nginx } virtual_ipaddress { #虛擬ip 192.168.1.110 } }
! Configuration File for keepalived global_defs { router_id nginx101 #自定義主機名 } # vrrp_script chk_nginx { #檢查nginx進程腳本此處暫未啓動 # script "/etc/keepalived/nginx_check.sh" # interval 2 # weight -20 # } vrrp_instance VI_1 { state BACKUP # 主節點 爲 MASTER 從節點爲 BACKUP interface eth0 # 網卡標識名 virtual_router_id 11 mcast_src_ip 192.168.1.101 網卡ip priority 90 # 主節點 優先級數字須要高於從節點,多個從節點須要一次下降優先級 nopreempt advert_int 1 authentication { # 主從節點此區域須要一致 auth_type PASS auth_pass 1111 } track_script { # 執行上面檢測nginx進程腳本 chk_nginx } virtual_ipaddress { #虛擬ip 192.168.1.110 } }
以下圖所示: ip信息僅包含有.本地ip和虛擬機的物理ip
service keepalived start
192.168.1.100看到了VIP漂移成功(下圖),192.168.1.101沒有VIP綁定
service keepalived stop
如圖所示: vip已經漂移到192.168.1.101節點
#!/bin/sh # 查看nginx服務數量賦值給變量A A=`ps -C nginx --no-header |wc -l` # 判斷nginx服務數量是否等於0 if [ $A -eq 0 ];then # nginx服務數量爲0 則啓動nginx服務(根據實際nginx啓動方法啓動) /opt/nginx/sbin/nginx sleep 2 # nginx服務數量爲0 則殺掉keepalived服務 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
注意: 若是在window下編寫的 , 必定要轉換文件格式爲 unix, 本人使用notepad++,轉換方法爲:
編輯-->文檔格式轉換-->轉換成UNIX格式
根據下圖keepalived配置的腳本路徑將nginx_check.sh腳本上傳
此配置是keepalived每2秒執行一次腳本, 若是nginx無服務,則啓動nginx,若是啓動失敗,則停掉keepalived服務
上傳完畢後要給腳本賦執行權限,命令以下:
chmod 777 /etc/keepalived/nginx_check.sh
service keepalived start
如圖所示: 訪問虛擬ip即訪問的主節點(192.168.1.100)nginx_A
由於keepalived的檢測腳本會嘗試啓動nginx, 若是nginx能夠啓動成功的話,主節點就會繼續工做,
我直接把192.168.1.100的nginx配置文件清空, 而後中止nginx服務,讓nginx沒法啓動。
此時在瀏覽器訪問虛擬ip--192.168.1.110,如圖所示: 訪問到了備節點(192.168.1.101)nginx_B
到此,已經完成了nginx高可用調整, 有問題的歡迎留言溝通。。。。