Nginx keepalived實現高可用負載均衡詳細配置步驟

Keepalived是一個免費開源的,用C編寫的類似於layer3, 4 & 7交換機制軟件,具備我們平時說的第3層、第4層和第7層交換機的功能。主要提供loadbalancing(負載均衡)和high-availability(高可用)功能,負載均衡實現需要依賴Linux的虛擬服務內核模塊(ipvs),而高可用是通過VRRP協議實現多臺機器之間的故障轉移服務。 

 

主要講述一下Keepalived編譯和安裝出現的問題以及解決方法,本人使用keepalived-1.3.5.tar.gz。

官網源碼包下載地址(2017-07-31 Keepalived最新版keepalived-1.3.5.tar.gz):http://www.keepalived.org/download.html

[root@iZ256w2hluuZ local]# tar -zxvf /tmp/keepalived-1.3.5.tar.gz 
[root@iZ256w2hluuZ local]# cd keepalived-1.3.5/
[root@iZ256w2hluuZ keepalived-1.3.5]# ./configure --prefix=/usr/local/keepalived

 

1. 系統出現警告信息“*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.”,具體日誌如下:

Keepalived configuration
------------------------
Keepalived version       : 1.3.5
Compiler                 : gcc
Preprocessor flags       : 
Compiler flags           : -Wall -Wunused -Wstrict-prototypes -Wextra -g -O2
Linker flags             : 
Extra Lib                :  -lcrypto  -lssl 
Use IPVS Framework       : Yes
IPVS use libnl           : No
IPVS syncd attributes    : No
IPVS 64 bit stats        : No
fwmark socket support    : Yes
Use VRRP Framework       : Yes
Use VRRP VMAC            : Yes
Use VRRP authentication  : Yes
With ip rules/routes     : Yes
SNMP vrrp support        : No
SNMP checker support     : No
SNMP RFCv2 support       : No
SNMP RFCv3 support       : No
DBUS support             : No
SHA1 support             : No
Use Debug flags          : No
Stacktrace support       : No
Memory alloc check       : No
libnl version            : None
Use IPv4 devconf         : No
Use libiptc              : No
Use libipset             : No
init type                : upstart
Build genhash            : Yes
Build documentation      : No

*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

 

解決方案一:(在線安裝)

執行yum命令yum -y install libnl libnl-devel解決上述警告問題

[root@iZ256w2hluuZ keepalived-1.3.5]# yum -y install libnl libnl-devel

 

解決方案二:(離線安裝)

離線安裝libnl-devel包,從網上下載libnl-devel-1.1.4-2.el6.x86_64.rpm包,執行rpm -ivh libnl-devel-1.1.4-2.el6.x86_64.rpm命令。

[root@iZ256w2hluuZ other-packages]# wget http://mirror.centos.org/centos/6/os/x86_64/Packages/libnl-devel-1.1.4-2.el6.x86_64.rpm
####執行wget命令是從另外一臺可以連接外網的服務器上下載libnl-devel-1.1.4-2.el6.x86_64.rpm包的命令,可以忽略,只是爲大家提供個下載libnl-devel地址####

[root@iZ256w2hluuZ other-packages]# rpm -ivh libnl-devel-1.1.4-2.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
	package libnl-devel-1.1.4-2.el6.x86_64 is already installed

 

 

安裝完成以後,重新執行configure命令

[root@iZ256w2hluuZ keepalived-1.3.5]# ./configure --prefix=/usr/local/keepalived

 

2. 系統出現錯誤信息“configure: error: libnfnetlink headers missing”,具體日誌如下:

checking for nl_socket_modify_cb in -lnl... yes
checking for linux/rtnetlink.h... yes
checking libnfnetlink/libnfnetlink.h usability... no
checking libnfnetlink/libnfnetlink.h presence... no
checking for libnfnetlink/libnfnetlink.h... no
configure: error: libnfnetlink headers missing

 

解決方案一:(在線安裝)

執行yum命令yum install -y libnfnetlink-devel解決上述錯誤問題

[root@iZ256w2hluuZ keepalived-1.3.5]# yum install -y libnfnetlink-devel

 

解決方案二:(離線安裝)

Linux執行wget下載rpm包(離線安裝libnfnetlink包時所需rpm包,執行wget下載libnfnetlink rpm包命令,此步可以忽略,只是爲大家提供個下載libnfnetlink地址),具體命令如下:

wget ftp://mirror.switch.ch/mirror/centos/6/os/x86_64/Packages/libnfnetlink-1.0.0-1.el6.x86_64.rpm
wget ftp://mirror.switch.ch/mirror/centos/6/os/x86_64/Packages/libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm

執行rpm -ivh libnfnetlink-1.0.0-1.el6.x86_64.rpm命令安裝libnfnetlink-1.0.0-1.el6.x86_64.rpm包,具體如下:

[root@iZ256w2hluuZ other-packages]# rpm -ivh libnfnetlink-1.0.0-1.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:libnfnetlink           ########################################### [100%]

執行rpm -ivh libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm命令安裝libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm包,具體如下:

[root@iZ256w2hluuZ other-packages]# rpm -ivh libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm
Preparing...                ########################################### [100%]
   1:libnfnetlink-devel     ########################################### [100%]

 

安裝完成以後,重新執行configure命令

[root@iZ256w2hluuZ keepalived-1.3.5]# ./configure --prefix=/usr/local/keepalived

 

3. 編譯keepalived不會出現上述警告和其他錯誤,執行make && make install命令進行安裝:

[root@iZ256w2hluuZ keepalived-1.3.5]# make && make install

至此Keepalived編譯並安裝結束,在下一篇文章中會詳解介紹Nginx搭配Keepalived的詳細配置和使用方法,歡迎大家收藏本站素文宅博客。

 

使用命令 /usr/local/keepalived/sbin -h 參看各啓動參數,啓動命令:

[root@iZ256w2hluuZ keepalived-1.3.5]# ./sbin/keepalived -f /usr/local/keepalived/etc/keepalived.conf

 

製作快捷啓動,在源文件的目錄./keepalived-1.3.5/keepalived/etc/init.d下有兩個個快捷啓動文件和生成/usr/local/keepalived目錄下一個配置文件需要複製,具體執行如下命令:

[root@iZ256w2hluuZ keepalived-1.3.5]#  cp ./keepalived-1.3.5/keepalived/etc/init.d/keepalived /etc/init.d/
[root@iZ256w2hluuZ keepalived-1.3.5]#  cp  /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@iZ256w2hluuZ keepalived-1.3.5]#  cp ./keepalived-1.3.5/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

這樣就可以執行service keepalived [start | stop | reload | restart ]命令。

 

啓動報“Starting keepalived: /bin/bash: keepalived: command not found”錯誤,具體日誌如下:

[root@yoodb /]# service keepalived start
正在啓動 keepalived:/bin/bash: keepalived: command not found
                                                           [失敗]

解決方案:

[root@yoodb /]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
[root@yoodb /]# service keepalived start
正在啓動 keepalived:                                      [確定]
[root@yoodb /]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

有上述日誌信息,表示啓動成功。

 

前面我們已經講述了Keepalived-1.3.5編譯安裝和製作快捷啓動方式,下面主要說一說如何在兩臺服務器分佈部署Nginx,通過keepalived實現高可用。

 

準備工作:

Linux操作系統Centos6.5,兩臺接入服務器公用一個虛擬IP(VIP)123.57.47.154

用途IP
MASTER 192.168.1.1
BACKUP 192.168.1.2

 

配置Nginx

兩臺接入服務器Nginx配置完全相同,配置文件目錄/usr/local/nginx/conf/nginx.conf,配置內容如下:

upstream blog.yoodb.com { 
      server  192.168.1.1; 
      server  192.168.1.2; 
} 
  
server{ 
    listen 80; 
    server_name blog.yoodb.com; 
    location / { 
        proxy_pass         http://127.0.0.1:8081; 
        proxy_set_header   Host             $host; 
        proxy_set_header   X-Real-IP        $remote_addr; 
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
    } 
}

 

配置keepalived

keepalived的配置文件/etc/keepalived/keepalived.conf,注意主、從服務器的keepalived配置相關聯有所不同,配置如下:

主Master:

! Configuration File for keepalived

global_defs {
notification_email {
        [email protected]
   }

   notification_email_from [email protected]
   smtp_server smtp.gmail.com
   smtp_connect_timeout 30
   router_id nginx_master

}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        123.57.47.154
    }
}

 

從Backup:

! Configuration File for keepalived

global_defs {
notification_email {
        [email protected]
   }

   notification_email_from [email protected]
   smtp_server smtp.gmail.com
   smtp_connect_timeout 30
   router_id nginx_backup

}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        123.57.47.154
    }
}

 

驗證:

先後啓動主、從服務器上keepalived,執行/etc/init.d/keepalived start命令

利用ip a命令查看主服務器虛擬IP是否綁定成功

停止主服務器上的keepalived,執行/etc/init.d/keepalived stop命令訪問123.57.47.154是否依然能夠訪問web頁面,再次利用ip a命令查看從服務器虛擬IP是否綁定成功。

啓動主服務器上的keepalived,看看主服務器能否重新接管虛擬IP。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章