Keepalived是一個(gè)類似于layer3, 4 & 5交換機(jī)制的軟件吟吝,也就是我們平時(shí)說的第3層蚓胸、第4層和第5層交換厕九。Keepalived是自動(dòng)完成蓖捶,不需人工干涉。
本文詳細(xì)介紹使用keepalived實(shí)現(xiàn)最簡單的雙機(jī)熱備扁远,并使用Nginx進(jìn)行驗(yàn)證俊鱼。
環(huán)境:CentOS 7 64位刻像、Keepalived-1.2.18、Nginx-1.6.2并闲。
一细睡、虛擬機(jī)安裝
1、網(wǎng)絡(luò)設(shè)置
本文使用的是VMware Workstation 15 Player
帝火,創(chuàng)建兩個(gè)虛擬機(jī)溜徙,分別命名為CentOS 7 64位 M
和CentOS 7 64位 B
,M表示"master"主服務(wù)器犀填,B表示"backup"備用服務(wù)器蠢壹。
網(wǎng)絡(luò)連接選擇NAT模式
,啟動(dòng)后使用ip add
發(fā)現(xiàn)沒有自動(dòng)分配ip地址九巡,是因?yàn)镃entOS 7默認(rèn)是不啟動(dòng)網(wǎng)卡的知残,解決方法如下:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
打開配置文件,把ONBOOT=no
這一項(xiàng)改為ONBOOT=yes
比庄,然后:wq
保存退出求妹,然后重啟網(wǎng)絡(luò)服務(wù):
sudo service network restart
這時(shí)候再輸入ip add
會(huì)發(fā)現(xiàn)ip地址有了。
本文Master ip為192.168.56.131
佳窑,Bcakup ip為192.168.56.132
制恍。
虛擬ip(vip)定義為192.168.56.188
。
二神凑、Nginx部署
1净神、安裝wget
yum -y install wget
2、下載并解壓Nginx
wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar -zxvf nginx-1.6.2.tar.gz
3溉委、下載所需要的依賴庫文件
yum -y install pcre
yum -y install pcre-devel
yum -y install zlib
yum -y install zlib-devel
4鹃唯、配置
安裝gcc
yum -y install gcc
進(jìn)入nginx-1.6.2并執(zhí)行configure文件
cd nginx-1.6.2
./configure
5、編譯并安裝Nginx
make && make install
成功后會(huì)在/usr/local/nginx目錄下看到conf瓣喊、html坡慌、logs、sbin
四個(gè)目錄藻三。
6洪橘、啟動(dòng)Nginx
啟動(dòng)命令:
/usr/local/nginx/sbin/nginx
停止命令:
/usr/local/nginx/sbin/nginx -s stop
重啟命令:
/usr/local/nginx/sbin/nginx -s reload
使用如下命令查看相關(guān)端口是否已啟動(dòng)Nginx
netstat -ano | grep 80
或
lsof -i:80
瀏覽器輸入Master的ip地址:http://192.168.56.131
,出現(xiàn)Nginx的歡迎頁面即成功啟用Nginx棵帽。
同理熄求,Backup瀏覽器輸入:http://192.168.56.132
,同樣出現(xiàn)Nginx的歡迎頁面逗概。
注意這個(gè)地方弟晚,html中最后一行"Thank you for using nginx."
本文針對(duì)Master和Backup分別進(jìn)行了修改便于熱備時(shí)更好的區(qū)分服務(wù)是否切換成功,修改的文件在
/usr/local/nginx/html/index.html
如果啟動(dòng)成功,但進(jìn)入不了歡迎頁面卿城,則可能需要關(guān)閉firewalld防火墻:
systemctl stop firewalld.service
systemctl disable firewalld.service
三淑履、Keepalived安裝
1、下載并解壓Keepalived
wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
2藻雪、安裝依賴軟件包openssl
yum install -y openssl openssl-devel
3秘噪、配置
進(jìn)入keepalived-1.2.18并執(zhí)行configure文件
cd keepalived-1.2.18
./configure --prefix=/usr/local/keepalived
4、編譯并安裝keepalived
make && make install
5勉耀、將keepalived安裝成Linux系統(tǒng)服務(wù)
在/etc/
目錄下創(chuàng)建keepalived文件夾
mkdir /etc/keepalived
將keepalived配置文件復(fù)制到/etc/keepalived下
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
將keepalived腳本文件復(fù)制到/etc/相關(guān)目錄下
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
創(chuàng)建keepalived軟鏈接
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
設(shè)置開機(jī)啟動(dòng)
chkconfig keepalived on
安裝完畢指煎。
四、修改keepalived配置文件
進(jìn)入/etc/keepalived/目錄下打開keepalived.conf文件進(jìn)行修改
vi /etc/keepalived/keepalived.conf
1便斥、Master
! Configuration File for keepalived
global_defs {
router_id localhost.localdomain ##標(biāo)識(shí)節(jié)點(diǎn)的字符串至壤,通常為hostname
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ##執(zhí)行腳本位置
interval 2 ##檢測時(shí)間間隔
weight -20 ## 如果條件成立則權(quán)重減20,這樣恢復(fù)時(shí)優(yōu)先級(jí)低于另一臺(tái)就會(huì)自動(dòng)變?yōu)锽ACKUP
}
## 定義虛擬路由 VI_1為自定義標(biāo)識(shí)枢纠。
vrrp_instance VI_1 {
state MASTER ## 主節(jié)點(diǎn)為MASTER像街,備份節(jié)點(diǎn)為BACKUP
## 接口設(shè)置 與本虛擬機(jī)ifconfig或ip address的接口相同
interface ens33
virtual_router_id 131 ## 虛擬路由ID號(hào),兩臺(tái)虛擬機(jī)保證這個(gè)數(shù)字相同一致
mcast_src_ip 192.168.56.131 ## 本機(jī)ip地址
priority 100 ##優(yōu)先級(jí)配置(0-254的值)晋渺,數(shù)字越大等級(jí)越高
nopreempt ## 不搶占
advert_int 1 ## 組播信息發(fā)送間隔镰绎,倆個(gè)節(jié)點(diǎn)必須配置一致,默認(rèn)1s
authentication {
auth_type PASS ## vrrp協(xié)議 保證兩虛擬機(jī)一致
auth_pass zxn ## 真實(shí)生產(chǎn)環(huán)境下對(duì)密碼進(jìn)行匹配
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.56.188 ## 虛擬地址(vip)木西,可以指定多個(gè)
}
}
2畴栖、Backup
! Configuration File for keepalived
global_defs {
router_id zxn132 ##標(biāo)識(shí)節(jié)點(diǎn)的字符串,通常為hostname
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ##執(zhí)行腳本位置
interval 2 ##檢測時(shí)間間隔
weight -20 ## 如果條件成立則權(quán)重減20八千,這樣恢復(fù)時(shí)優(yōu)先級(jí)低于另一臺(tái)就會(huì)自動(dòng)變?yōu)锽ACKUP
}
## 定義虛擬路由 VI_1為自定義標(biāo)識(shí)吗讶。
vrrp_instance VI_1 {
state BACKUP ## 主節(jié)點(diǎn)為MASTER,備份節(jié)點(diǎn)為BACKUP
## 接口設(shè)置 與本虛擬機(jī)ifconfig或ip address的接口相同
interface ens33
virtual_router_id 131 ## 虛擬路由ID號(hào)恋捆,兩臺(tái)虛擬機(jī)保證這個(gè)數(shù)字相同一致
mcast_src_ip 192.168.56.132 ## 本機(jī)ip地址
priority 90 ##優(yōu)先級(jí)配置(0-254的值)照皆,比MASTER少就行
nopreempt ## 不搶占
advert_int 1 ## 組播信息發(fā)送間隔,倆個(gè)節(jié)點(diǎn)必須配置一致沸停,默認(rèn)1s
authentication {
auth_type PASS ## vrrp協(xié)議 保證兩虛擬機(jī)一致
auth_pass zxn ## 真實(shí)生產(chǎn)環(huán)境下對(duì)密碼進(jìn)行匹配
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.56.188 ## 虛擬地址(vip)膜毁,可以指定多個(gè)
}
}
3、nginx_check.sh腳本
在/etc/keepalived/目錄下創(chuàng)建sh腳本文件
1星立、安裝nano
yum -y install nano
2爽茴、使用nano創(chuàng)建nginx_check.sh腳本
sudo nano nginx_check.sh
3葬凳、打開nginx_check.sh并編輯如下內(nèi)容
#!/bin/bash
# 如果進(jìn)程中沒有nginx則將keepalived進(jìn)程kill掉
A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx進(jìn)程 把值賦給變量A
if [ $A -eq 0 ];then ## 如果沒有進(jìn)程值得為零
service keepalived stop ## 則結(jié)束 keepalived 進(jìn)程
fi
(注意`符號(hào)绰垂,非'符號(hào))
4、腳本授權(quán)
chmod +x /etc/keepalived/nginx_check.sh
五火焰、啟動(dòng)Nginx和Keepalived
安裝并配置完畢后劲装,可以分別啟動(dòng)兩臺(tái)虛擬機(jī)上的Nginx和Keepalived進(jìn)行熱備的驗(yàn)證了。
啟動(dòng)Nginx:
/usr/local/nginx/sbin/nginx
啟動(dòng)Keepalived:
service keepalived start
關(guān)閉Keepalived:
service keepalived stop
查看nginx進(jìn)程:
ps -ef | grep nginx
查看keepalived進(jìn)程:
ps -ef | grep keepalived
分別啟動(dòng)Nginx和Keepalived后,Master輸入ip add
查看ip多了一個(gè)192.168.56.188
打開瀏覽器輸入ip地址:http://192.168.56.188
看到Nginx的歡迎頁面
此時(shí)nginx131說明為主節(jié)點(diǎn)占业。
然后我們將Keepalived關(guān)閉
service keepalived stop
或kill掉Nginx進(jìn)程绒怨,因?yàn)橛衝ginx_check.sh腳本會(huì)檢測如果沒有Nginx進(jìn)程運(yùn)行也會(huì)自動(dòng)將Keepalived關(guān)閉
ps -ef |grep nginx
kill xxxxx
會(huì)發(fā)現(xiàn),節(jié)點(diǎn)由Master切換到了Backup:
熱備成功谦疾。