通常說的雙機熱備是指兩臺機器都在運行,但並不是兩臺機器都同時在提供服務。
當提供服務的一臺出現故障的時候,另外一臺會馬上自動接管並且提供服務,而且切換的時間非常短。
keepalived的工作原理是VRRP(VirtualRouter Redundancy Protocol)虛擬路由冗餘協議。
在VRRP中有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。
VRRP 路由器是指運行VRRP的路由器,是物理實體,虛擬路由器是指VRRP協議創建的,是邏輯概念。一組VRRP路由器協同工作,共同構成一臺虛擬路由器。 Vrrp中存在着一種選舉機制,用以選出提供服務的路由即主控路由,其他的則成了備份路由。當主控路由失效後,備份路由中會重新選舉出一個主控路由,來繼續工作,來保障不間斷服務。
1.準備兩臺服務器
主服務器:192.168.1.111
從服務器:192.168.1.199
虛擬ip:192.168.1.223
兩臺機器安裝
2.安裝keepalived需要的依賴包
yum install openssl-devel
yum install popt-devel
yum install ipvsadm
yum install libnl*
3.下載keepalived
yum install keepalived
4.修改主服務器配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
#[email protected]沒有服務器配置郵箱可將其註釋掉
}
#notification_email_from [email protected]
#smtp_server192.168.200.1
#smtp_connect_timeout 30
router_idLVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 51#和slave一樣
priority 100#主機高於slave
advert_int 1#檢測服務器狀態間隔時間
authentication{
auth_typePASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.223#虛擬IP地址,可以爲多個
}
}
開啓服務
systemctl start keepalived
5.修改slave配置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
#notification_email {
#}
#notification_email_from [email protected]
#smtp_server127.0.0.1
#smtp_connect_timeout 30
router_idLVS_DEVEL
}
vrrp_instance VI_1 {
state SLAVE
interface eno16777736
virtual_router_id 51
priority 99#低於主服務器100
advert_int 1
authentication {
auth_typePASS
auth_pass1111#驗證密碼,兩臺機器保持一致
}
virtual_ipaddress {
192.168.1.223
}
}
開啓服務
systemctl start keepalived
6.在兩臺服務器web根目錄下建立一個index.php文件,寫上本機ip地址
7.在兩臺機器上使用 "ipa" 查看虛擬 IP 信息
可以看到,虛擬Ip此時綁定在主機上
在瀏覽器中輸入虛擬ip192.168.1.223此時將看到
訪問的是master,那麼將master的服務關閉呢?在192.168.1.111上運行systemctl stop keepalived
此時再看兩臺機器的虛擬ip信息
此時可以看出虛擬ip綁定到了slave服務器上。
在瀏覽器中輸入192.168.1.223可以看到
主機服務掛掉了,此時訪問的是slave.
此時在主服務器上打開keepalived服務,systemctl start keepalived
再次訪問192.168.1.223,將看到
主服務器又活了
那麼如何根據服務某個端口的開與關來進行虛擬Ip的綁定呢?
Vim /usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.vrrp.localcheck
參考提供的例子
! Configuration File for keepalived
vrrp_script chk_http_port {
script"</dev/tcp/127.0.0.1/80" # connects and exits
interval1 # check everysecond
weight-2 # default prio:-2 if connect fails
}
vrrp_script chk_mysql_port {
script"</dev/tcp/127.0.0.1/80" # connects and exits
interval1 # check everysecond
weight-2 # default prio:-2 if connect fails
}
track_script {
chk_http_port
chk_mysql_port
}
將將以上信息複製到兩臺服務器的/etc/keepalived/keepalived.conf文件裏
變成如下,參考,注意從機不一樣,爲了講清楚上面的信息放入的位置。
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script"</dev/tcp/127.0.0.1/80" # connects and exits
interval 1 # check every second
weight -2 # default prio: -2 ifconnect fails
}
vrrp_script chk_mysql_port {
script"</dev/tcp/127.0.0.1/3306" # connects and exits
interval 1 # check every second
weight -2 # default prio: -2 ifconnect fails
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass aaa
}
virtual_ipaddress {
192.168.1.229
}
track_script {
chk_http_port
chk_mysql_port
}
}
此時再重啓兩臺機器的keepalived服務
Systemctl restart keepalived
此時分別關閉主機80和3306端口服務
可以發現虛擬Ip綁定到了從機上。