基於keepalived+nginx+upstream的雙master熱切換+負載均衡實現方案


keepalived它是一個基於VRRP協議來實現的WEB服務高可用方案,可以利用其來避免單點故障。一個WEB服務至少會有2台服務器運行Keepalived,一台為主服務器(MASTER),一台為備份服務器(BACKUP),但是對外表現為一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候,備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。

 

nginx的安裝在我之前的博客中已經寫過,這里就不再贅述。

然后就是安裝keepalived​

命令:wget​ http://www.keepalived.org/software/keepalived-1.1.20.tar.gz

根據需要選擇適合自己版本的keepalived下載。

解壓:tar -zxvf /root/keepalived-1.2.19.tar.gz(根據自己的下載路徑填寫)

​進入解壓后的文件中cd  /root/keepalived-1.2.19。如圖有一個configure的可執行文件​

在/usr/local文件下新建keepalived文件夾

mkdir /usr/local/keepalived​

​接着運行./configure  --prefix=/usr/local/keepalived

 

這里用nginx來負載均衡不用lvs來負載所以不用管這一行。

make&&make install​ 來安裝完后/usr/local/keepalived下生成四個文件夾代表安裝成功。

這是/usr/local/keepalived文件夾的目錄結構

安裝完以后執行以下命令以方便以后管理

mkdir /etc/​keepalived

  • ​ln -s /usr/local/sbin/keepalived /usr/sbin/ 或者
  • ​cp /usr/local/keepalived/sbin/keepalived  /usr/sbin

cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/

cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/

啟動keepalived:service keepalived start

keepalived 雙主配置

​主:真實ip192.168.110.134   vip192.168.110.80

備:​真實ip192.168.110.135   vip192.168.110.90

主:

vrrp_instance VI_1 {

    state MASTER      // 定義為主服務器

    interface eth0       //vip綁定的網卡

    virtual_router_id 51   //虛擬路由的id,主從必須一致

    priority 100      //優先級,隨機值但是主服務器的一定比從服務器的大

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.110.80         //綁定的虛擬ip

    }

}

vrrp_instance VI_2 {

    state BACKUP         //定義為從服務器

    interface eth0        //vip綁定的網卡

    virtual_router_id 52  //虛擬路由的id,主從必須一致

    priority 90       //優先級,隨機值但是主服務器的一定比從服務器的大

    advert_int 1

    authentication {

auth_type PASS

auth_pass 1111

    }

    virtual_ipaddress{

192.168.110.90      //綁定vip

    }

}

​配置玩重啟keepalived:service keepalived restart

​ip  addr 查看

 

備:​

​vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.110.80

    }

}

vrrp_instance VI_2 {

    state MASTER

    interface eth0

    virtual_router_id 52

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress{

        192.168.110.90

    }

}

測試:​主服務器正常工作時,為了方便區別驗證

 

主服務器關機或者服務進程死掉立馬切換備服務器,切換時間人感覺不出來。

負載均衡:

​nginx 的 upstream默認是以輪詢的方式實現負載均衡,這種方式中,每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。另外一種方式是ip_hash:每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。 

​每個主服務器如下配置

vi /etc/nginx/nginx.conf

​upstream test {

        server 127.0.0.1 down; //本地服務器不參與負載

        server 192.168.110.136:80 weight=5; //后台服務器

        server 192.168.110.137:80 weight=5;//后台服務器

        #ip_hash;

}

​location / {

        proxy_set_header Host $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_pass http://test;

        root   /usr/share/nginx/html;

        index  index.html index.htm;

    }

成功!

這是我自己安裝后寫的教程因為剛接觸架構,其中很多都一知半解講解的不夠詳細!​​


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM