通常說的雙機熱備是指兩臺機器都在運行,但其實不是兩臺機器都同時在提供服務。
當提供服務的1臺出現故障的時候,另外1臺會馬上自動接收并且提供服務,而且切換的時間非常短。
keepalived的工作原理是VRRP(VirtualRouter Redundancy Protocol)虛擬路由冗余協議。
在VRRP中有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。
VRRP 路由器是指運行VRRP的路由器,是物理實體,虛擬路由器是指VRRP協議創建的,是邏輯概念。1組VRRP路由器協同工作,共同構成1臺虛擬路由器。 Vrrp中存在著1種選舉機制,用以選出提供服務的路由即主控路由,其他的則成了備份路由。當主控路由失效后,備份路由中會重新選舉出1個主控路由,來繼續工作,來保障不中斷服務。
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 {
#acassen@firewall.loc沒有服務器配置郵箱可將其注釋掉
#failover@firewall.loc
#sysadmin@firewall.loc
}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server192.168.200.1
#smtp_connect_timeout 30
router_idLVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 51#和slave1樣
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 {
# 644856452@qq.com
#}
#notification_email_from Alexandre.Cassen@firewall.loc
#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#驗證密碼,兩臺機器保持1致
}
virtual_ipaddress {
192.168.1.223
}
}
開啟服務
systemctl start keepalived
6.在兩臺服務器web根目錄下建立1個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:⑵ 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:⑵ if connect fails
}
track_script {
chk_http_port
chk_mysql_port
}
將將以上信息復制到兩臺服務器的/etc/keepalived/keepalived.conf文件里
變成以下,參考,注意從機不1樣,為了講清楚上面的信息放入的位置。
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
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: ⑵ 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: ⑵ 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綁定到了從機上。