單機架構升級集羣架構--nginx+keepalived主從集羣高可用搭建工做記

        本文將繼續單機架構升級集羣系列博文, 記錄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作負載均衡使用。架構

環境準備

  •     centOs:6.5
  •    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環境搭建

        本文采用的一主一從集羣模式

       nginx_A 虛擬機ip:192.168.1.100

        nginx_B 虛擬機ip:192.168.1.101

      nginx安裝

        兩臺虛擬機安裝步驟同樣,

        安裝目錄選擇的  /opt/nginx (目錄自定義)

        通常咱們都須要先裝pcre, zlib(自行百度),前者爲了重寫rewrite,後者爲了gzip壓縮。

         安裝nginx前,編譯環境gcc g++ 開發庫之類的須要提早裝好

yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c++
  • 進入nginx待安裝目錄
cd /opt
  •  下載nginx
wget -c http://nginx.org/download/nginx-1.5.8.tar.gz
  • 解壓安裝包
tar zxvf nginx-1.5.8.tar.gz
  • 進入nginx目錄
cd nginx-1.5.8
  • 安裝nginx
./configure --prefix=/opt/nginx --with-pcre= pcre-8.36的安裝路徑
make && make install
  • 啓動nginx(前提是80端口未被佔用)
/opt/nginx/sbin/nginx
  •  瀏覽器輸入IP地址

    如圖所示,訪問成功。

  • 修改nginx歡迎界面(%nginx_home%/html/index.html)

    以下圖兩臺虛擬機分別添加一行:

    192.168.1.100:     <p><em>This is nginx_A.</em></p>

    192.168.1.101:     <p><em>This is nginx_B.</em></p>

 

    

  • 驗證兩臺nginx均啓動成功

    如圖:

    192.168.1.100訪問結果:

    

192.168.1.101訪問結果:

   

      nginx基本命令

        啓動: /opt/nginx/sbin/nginx

        修改配置後從新加載: /opt/nginx/sbin/nginx -s reload

        中止: kill -9 pid

    keepalived環境搭建

        須要高可用的nginx對應的虛擬機均須要安裝keepalived服務,安裝步驟同樣

        本文安裝目錄爲: /opt/keepalived

         keepalived  VIP(虛擬ip): 192.168.1.110

     keepalived安裝

  • 進入keepalived待安裝目錄
cd /opt
  • 下載keepalived
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
  •  安裝keepalived服務
make && make install

    啓動命令: /opt/keepalived/sbin/keepalived -f /opt/keepalived/etc/keepalived/keepalived.conf

    keepalived作成系統服務

        爲了方便啓停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
  •  啓停keepalived服務

    就能夠使用如下命令啓停服務了: service keepalived [start | stop | reload | restart ]

兩臺機器按照以上步驟安裝完畢後,進入下面配置keepalived

    配置keepalived

    192.168.1.100爲主節點, 192.168.1.101爲從節點, 192.168.1.110 爲VIP

    注意: 此時keepalived的配置路徑爲 : /etc/keepalived/keepalived.conf

 

  • 中止keepalived服務(此步驟非必須)
service keepalived stop
  • 修改192.168.1.100 的keepalived配置       
! 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 
    }  
}
  • 修改192.168.1.101 的keepalived配置 
! 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 a

    以下圖所示: ip信息僅包含有.本地ip和虛擬機的物理ip

  • 兩臺機器分別啓動keepalived服務
service keepalived start
  • 查看VIP漂移結果

       192.168.1.100看到了VIP漂移成功(下圖),192.168.1.101沒有VIP綁定

  • 關閉192.168.1.100(主節點)keepalived服務
service keepalived stop
  • 在192.168.1.101(備節點)輸入 ip a

        如圖所示: vip已經漂移到192.168.1.101節點

    nginx高可用搭建

  • 修改192.168.1.100 和 192.168.1.101中keepalived配置

    

  • 編寫nginx_check.sh腳本
#!/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格式

  • 上傳nginx_check.sh腳本到192.168.1.100 和 192.168.1.101虛擬機

        根據下圖keepalived配置的腳本路徑將nginx_check.sh腳本上傳

    此配置是keepalived每2秒執行一次腳本, 若是nginx無服務,則啓動nginx,若是啓動失敗,則停掉keepalived服務

    上傳完畢後要給腳本賦執行權限,命令以下:

chmod 777 /etc/keepalived/nginx_check.sh
  • 啓動192.168.1.100 和 192.168.1.101中keepalived
service keepalived start
  • 在瀏覽器訪問虛擬ip

        如圖所示: 訪問虛擬ip即訪問的主節點(192.168.1.100)nginx_A

  • 給192.168.1.100中nginx一個致命沒法啓動的錯誤

        由於keepalived的檢測腳本會嘗試啓動nginx, 若是nginx能夠啓動成功的話,主節點就會繼續工做,

我直接把192.168.1.100的nginx配置文件清空, 而後中止nginx服務,讓nginx沒法啓動。

    此時在瀏覽器訪問虛擬ip--192.168.1.110,如圖所示: 訪問到了備節點(192.168.1.101)nginx_B

 

到此,已經完成了nginx高可用調整, 有問題的歡迎留言溝通。。。。

相關文章
相關標籤/搜索