物理路由器: master:主設備 backup:備用設備 priority:優先級 VIP:Virtual IP VMAC:Virtual MAC(00-00-5e-00-01-VRID) GraciousARP 通告:心跳,優先級等;週期性; 搶佔式,非搶佔式; 安全工做: 認證: 無認證 簡單字符認證 MD5 工做模式: 主/備:單虛擬路徑器; 主/主:主/備(虛擬路徑器1),備/主(虛擬路徑器2)
keepalived:
vrrp協議的軟件實現,原生設計的目的爲了高可用ipvs服務;
基於vrrp協議完成地址流動;
爲全部ipvs節點生成ipvs規則(在配置文件中預先定義);
爲ipvs集羣的各RS作健康狀態檢測,基於檢測結果完成節點管理;
基於腳本調用接口經過執行腳本完成腳本中定義的功能,進而影響集羣事務(這裏說的是完成其餘服務的高可用);node
組件: 核心組件: vrrp stack ipvs wrapper checkers 控制組件:配置文件分析器 IO複用器 內存管理組件
HA Cluster的配置前提:
(1)各節點時間必須同步;
ntp,chrony
(2)確保iptables及selinux不會成爲阻礙;
(3)各節點之間可經過主機名互相通訊(對KeepAlived並不是必須);
(4)確保各節點的用於集羣服務的接口支持MULTICAST通訊;
D類:224.0.0.0~239.255.255.255
(5)各節點之間的root用戶能夠基於密鑰認證的ssh服務完成互相通訊;(並不是必須)linux
keepalived安裝配置:
CentOS6.4+隨base倉庫提供;vim
程序環境: 主配置文件:/etc/keepalived/keepalived.conf 主程序文件:/usr/sbin/keepalived Unit File:keepalived.service Unit File的環境配置文件:/etc/sysconfig/keepalived 配置文件組件部分:---有三個配置段 TOP HIERACHY---頂級配置段 GLOBAL CONFIGURATION Global definitions---全局定義 Static routes/addresses---靜態路由 VRRP CONFIGURATION VRRP synchronization group(s):vrrp同步組;(同進同退,兩臺路由器對外提供虛擬IP,對內也提供虛擬IP,可是vip1在哪臺路由器上,vip2也應該在哪一個節點上,nat集羣須要同步組) VRRP instance(s)(實例):每一個vrrp instance 即一個vrrp路由器; LVS CONFIGURATION Virtual server group(s) Virtual server(s):ipvs集羣的vs和rs; 單主配置示例: !Configuration File forkeepalived global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id node1 vrrp_mcast_group4 224.0.100.19 } vrrp_instance VI_1 { state BACKUP interface eno16777736 virtual_router_id 14 priority 98 advert_int 1 authentication { auth_type PASS auth_pass 571f97b2 } virtual_ipaddress { 10.1.0.91/16 dev eno16777736 } } 配置語法: 配置虛擬路由器: vrrp_instance <STRING> { ...... } 專用參數: state MASTER|BACKUP:當前節點在此虛擬路由器上的初始狀態;只能有一個是MASTER,餘下的都應該爲BACKUP; interface IFACE_NAME:綁定爲當前虛擬路由器使用的物理接口; virtual_router_id VRID:當前虛擬路由器的惟一標識,範圍是0-255; priority 100:當前主機在此虛擬路由器中的優先級;範圍1-254; advert_int 1:vrrp通告的時間間隔; authentication { auth_type AH|PASS auth_pass <PASSWORD> } virtual_ipaddress { <IPADDR>/<MASK>brd<IPADDR>dev<STRING>scpoe<SCOPE>label<LABEL> 192.168.200.17/24 dev eth1 192.168.200.18/24 dev eth2 label eth2:1 } track_interface { eth0 eth1 ... } 配置要監控的網絡接口,一旦接口出現故障,則轉爲FAULT狀態; nopreempt:定義工做模式爲非搶佔模式; preempt_delay 300:搶佔模式下,節點上線後觸發新選舉操做的延遲時長; 定義通知腳本: notify_master<STRING>|<QUOTED-STRING>:當前節點成爲主節點時觸發的腳本; notify_backup<STRING>|<QUOTED-STRING>:當前節點轉爲備節點時觸發的腳本; notify_fault<STRING>|<QUOTED-STRING>:當前節點轉爲"失敗"狀態時觸發的腳本; notify<STRING>|<QUOTED-STRING>:通用格式的通知觸發機制,一個腳本可完成以上三種狀態的轉換時的通知
視頻中的配置:集羣中各節點是經過多播通訊,要保證多播功能是打開的
node1:
ntpdate 172.16.0.1---同步時間
vim /etc/chrony.conf---chronyd服務的配置文件,把其中的server能夠指向本地主機測試用
systemctl restart chronyd.service---重啓服務
systemctl enable chronyd.service---設置成開機自動啓動
iptables -vnL---查看有沒有規則,沒有就能夠,若是有,不能清空能夠添加一條放行重啓iptables服務
yum info iptables-services---查看iptables服務安裝包信息
cat /etc/hosts---查看域名解析
ifconfig---網卡信息中要包含MULTICAST這個信息,才表示支持多播功能
ip link set multicast on dev eno16777736---開啓網卡的多播功能安全
yum -y install keepalived
rpm -ql keepalived---查看包服務器
視頻中keepalived.conf
!Configuration File for keepalived網絡
global_defs {
notification_email {---收郵件地址,要在互聯網上真正能接收br/>root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc---發郵件地址,能夠假裝源地址,可是有的服務器不容許假裝,要經過下面的smtp_server的檢查
smtp_server 127.0.0.1---通常是本機,可使用ss -tnl查看25號端口始終是開啓的,能夠很容易的從本機發送郵件到本機,例如:echo "hello" | mail -s "hi" root@localhost---s能夠給上郵件的標題,收郵件的命令是mail,就能夠看到收到的郵件,按提示的數字就能夠打開查看郵件
smtp_connect_timeout 30
router_id nide1---用來標識當前主機
vrrp_mcast group4 224.1.101.33---224.0.0.18是默認的,可是有可能會衝突,能夠本身隨便寫一個
}app
vrrp_instance VI_1 {---第一個實例就是第一個路由器,VI_1是名稱隨便定義
state MASTER---配置爲主設備,可是還須要設置優先級
priority 100---優先級是100
interface eno167777736---把vip綁定到哪一個網卡設備
virtual_router_id 33---0到255之間使用哪個都行,可是兩個設備之間要統一
advert_int 1---每隔多長時間向外通告一次
authentication {---要不要認證
auth_type PASS---簡單字符串認證
auth_pass RT3SKUI2---這裏不要使用默認的1111,能夠用openssl rand -base64 7生成一個隨機的字符串
}
virtual_ipaddress {---指定IP地址的格式爲ip、掩碼、設備、別名
172.16.0.99/16 dev eno16777736 label eno16777736:0
}
}ssh
scp keepalived.conf node2:/etc/keepalived/---複製到node2節點
systemctl start keepalived.service---此時啓動keepalived,就會搶佔成爲主節點
systemctl status keepalived
ifconfig---就能夠看到ip地址配置上去了,若是此時停掉服務,node2節點仍然會搶回去
tcpdump -i eno16777736 -nn host 224.1.101.33---監聽網卡上指向224.1.101.33的信息包,能夠看到一秒鐘發送一個包tcp
雙主模型的配置:
視頻中keepalived.conf
!Configuration File for keepalivedide
global_defs {
notification_email {---收郵件地址,要在互聯網上真正能接收br/>root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc---發郵件地址,能夠假裝源地址,可是有的服務器不容許假裝,要經過下面的smtp_server的檢查
smtp_server 127.0.0.1---通常是本機,可使用ss -tnl查看25號端口始終是開啓的,能夠很容易的從本機發送郵件到本機,例如:echo "hello" | mail -s "hi" root@localhost---s能夠給上郵件的標題,收郵件的命令是mail,就能夠看到收到的郵件,按提示的數字就能夠打開查看郵件
smtp_connect_timeout 30
router_id nide1---用來標識當前主機
vrrp_mcast group4 224.1.101.33---224.0.0.18是默認的,可是有可能會衝突,能夠本身隨便寫一個
}
vrrp_instance VI_1 {---第一個實例就是第一個路由器,VI_1是名稱隨便定義
state MASTER---配置爲主設備,可是還須要設置優先級
priority 100---優先級是100
interface eno167777736---把vip綁定到哪一個網卡設備
virtual_router_id 33---0到255之間使用哪個都行,可是兩個設備之間要統一
advert_int 1---每隔多長時間向外通告一次
authentication {---要不要認證
auth_type PASS---簡單字符串認證
auth_pass RT3SKUI2---這裏不要使用默認的1111,能夠用openssl rand -base64 7生成一個隨機的字符串
}
virtual_ipaddress {---指定IP地址的格式爲ip、掩碼、設備、別名
172.16.0.99/16 dev eno16777736
}
}
vrrp_instance VI_2 {---第一個實例就是第一個路由器,VI_1是名稱隨便定義
state BACKUP---配置爲主設備,可是還須要設置優先級
priority 96---優先級是100
interface eno167777736---把vip綁定到哪一個網卡設備
virtual_router_id 34---0到255之間使用哪個都行,可是兩個設備之間要統一
advert_int 1---每隔多長時間向外通告一次
authentication {---要不要認證
auth_type PASS---簡單字符串認證
auth_pass Ra3S7Uy2---這裏不要使用默認的1111,能夠用openssl rand -base64 7生成一個隨機的字符串
}
virtual_ipaddress {---指定IP地址的格式爲ip、掩碼、設備、別名
172.16.0.98/16 dev eno16777736
}
}
node2:
ntpdate 172.16.0.1---同步時間
systemctl restart chronyd.service---重啓服務
systemctl enable chronyd.service---設置成開機自動啓動
systemctl status chronyd.service---查看狀態若是顯示enabled就表示已經開機自動啓動
視頻中keepalived.conf
!Configuration File for keepalived
global_defs {
notification_email {---收郵件地址,要在互聯網上真正能接收br/>root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc---發郵件地址,能夠假裝源地址,可是有的服務器不容許假裝,要經過下面的smtp_server的檢查
smtp_server 127.0.0.1---通常是本機,可使用ss -tnl查看25號端口始終是開啓的,能夠很容易的從本機發送郵件到本機,例如:echo "hello" | mail -s "hi" root@localhost---s能夠給上郵件的標題,收郵件的命令是mail,就能夠看到收到的郵件,按提示的數字就能夠打開查看郵件
smtp_connect_timeout 30
router_id nide2---用來標識當前主機
vrrp_mcast group4 224.1.101.33---224.0.0.18是默認的,可是有可能會衝突,能夠本身隨便寫一個
}
vrrp_instance VI_1 {---第一個實例就是第一個路由器,VI_1是名稱隨便定義
state BACKUP---配置爲從設備,可是還須要設置優先級
priority 96---優先級應該比master低
interface eno167777736---把vip綁定到哪一個網卡設備
virtual_router_id 33---0到255之間使用哪個都行,可是兩個設備之間要統一
advert_int 1---每隔多長時間向外通告一次
authentication {---要不要認證
auth_type PASS---簡單字符串認證
auth_pass RT3SKUI2---這裏不要使用默認的1111,能夠用openssl rand -base64 7生成一個隨機的字符串
}
virtual_ipaddress {---指定IP地址的格式爲ip、掩碼、設備、別名
172.16.0.99/16 dev eno16777736 label eno16777736:0
}
}
systemctl start keepalived.service---node2節點啓動,此時node2節點優先級最高,因此把本身配置爲master
systemctl status keepalived.service---會顯示狀態信息,進入主節點模式,而且ip地址也配置上去了
雙主模型的配置:
視頻中keepalived.conf
!Configuration File for keepalived
global_defs {
notification_email {---收郵件地址,要在互聯網上真正能接收br/>root@localhost
}
notification_email_from Alexandre.Cassen@firewall.loc---發郵件地址,能夠假裝源地址,可是有的服務器不容許假裝,要經過下面的smtp_server的檢查
smtp_server 127.0.0.1---通常是本機,可使用ss -tnl查看25號端口始終是開啓的,能夠很容易的從本機發送郵件到本機,例如:echo "hello" | mail -s "hi" root@localhost---s能夠給上郵件的標題,收郵件的命令是mail,就能夠看到收到的郵件,按提示的數字就能夠打開查看郵件
smtp_connect_timeout 30
router_id nide1---用來標識當前主機
vrrp_mcast group4 224.1.101.33---224.0.0.18是默認的,可是有可能會衝突,能夠本身隨便寫一個
}
vrrp_instance VI_1 {---第一個實例就是第一個路由器,VI_1是名稱隨便定義
state MASTER---配置爲主設備,可是還須要設置優先級
priority 100---優先級是100
interface eno167777736---把vip綁定到哪一個網卡設備
virtual_router_id 33---0到255之間使用哪個都行,可是兩個設備之間要統一
advert_int 1---每隔多長時間向外通告一次
authentication {---要不要認證
auth_type PASS---簡單字符串認證
auth_pass RT3SKUI2---這裏不要使用默認的1111,能夠用openssl rand -base64 7生成一個隨機的字符串
}
virtual_ipaddress {---指定IP地址的格式爲ip、掩碼、設備、別名
172.16.0.99/16 dev eno16777736
}
}
vrrp_instance VI_2 {---第一個實例就是第一個路由器,VI_1是名稱隨便定義state MASTER---配置爲主設備,可是還須要設置優先級priority 100---優先級是100interface eno167777736---把vip綁定到哪一個網卡設備virtual_router_id 34---0到255之間使用哪個都行,可是兩個設備之間要統一advert_int 1---每隔多長時間向外通告一次authentication {---要不要認證auth_type PASS---簡單字符串認證auth_pass Ra3S7Uy2---這裏不要使用默認的1111,能夠用openssl rand -base64 7生成一個隨機的字符串}virtual_ipaddress {---指定IP地址的格式爲ip、掩碼、設備、別名172.16.0.98/16 dev eno16777736}}