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 {
yoodb.com@gmail.com
}
notification_email_from yoodb.com@gmail.com
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 {
yoodb.com@gmail.com
}
notification_email_from yoodb.com@gmail.com
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。
