煙臺(tái)網(wǎng)站推廣排名競(jìng)價(jià)推廣代運(yùn)營(yíng)
一? ? vrrp?介紹
(一)?vrrp技術(shù)
1,VRRP 相關(guān)術(shù)語(yǔ)
-
虛擬路由器:Virtual Router 不是真實(shí)存在 ,虛構(gòu)出來的
-
虛擬路由器標(biāo)識(shí):VRID(0-255),唯一標(biāo)識(shí)虛擬路由器
-
VIP:Virtual IP 192.168.91.100 路由1 路由2
-
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
-
物理路由器:
-
master:主設(shè)備
-
backup:備用設(shè)備
-
priority:優(yōu)先級(jí)
2,?VRRP相關(guān)技術(shù)
通告:心跳,優(yōu)先級(jí)等;周期性
2.1工作方式
搶占式,非搶占式,延遲搶占模式,
2.2安全認(rèn)證
-
無(wú)認(rèn)證
-
簡(jiǎn)單字符認(rèn)證:預(yù)共享密鑰
(常用?但是因?yàn)槭敲魑?所以意義不大? 可以通過改心跳線的組播地址達(dá)到保護(hù)隱私的作用)
-
MD5
2.3 工作模式
-
主/備:單虛擬路徑器
-
主/主:主/備(虛擬路由器1),備/主(虛擬路由器2)
2.4?名詞具體解釋
#通告 | 是宣告自己的主權(quán),不要妄想搶班奪權(quán),不停的向外 |
#搶占式 | 主服務(wù)器宕機(jī),過了一段時(shí)間修好了,再把主權(quán)搶過來 |
#非搶占式: | 主服務(wù)器宕機(jī),過了一段時(shí)間修好了,原來的主就作為備了 |
#延遲搶占: | 主修好后,等待一定的時(shí)間(默認(rèn)300s)后再次成為主 |
#安全認(rèn)證 | 如沒有安全認(rèn)證,不在集群中的keeplive服務(wù)器設(shè)置超高的優(yōu)先級(jí),會(huì)造成事故 |
2.5? ?主/主:主/備(虛擬路由器1),備/主(虛擬路由器2)? ? 具體介紹
環(huán)境:
有兩臺(tái)服務(wù)器
虛擬出兩臺(tái)虛擬路由器
第一臺(tái)虛擬路由器中服務(wù)器1為主,服務(wù)器2為備,那么虛擬IP1就飄在服務(wù)器1上,真正工作的只有服務(wù)器1
第二臺(tái)虛擬路由器中服務(wù)器2為主,服務(wù)器1為備,那么虛擬IP2就飄在服務(wù)器2上,真正工作的只有服務(wù)器2
優(yōu)點(diǎn):
#提高了資源利用率:
這樣主,備服務(wù)器同時(shí)干活,可以同時(shí)運(yùn)行兩個(gè)項(xiàng)目
#同樣有備份功能:
如果服務(wù)器1壞了,服務(wù)器2 將同時(shí)擁有虛擬IP1和虛擬IP2
缺點(diǎn):
雖然有備份冗余功能但是對(duì)機(jī)器的性能要求非常高,當(dāng)其中一臺(tái)出現(xiàn)故障,本來一臺(tái)運(yùn)行一個(gè)任務(wù),現(xiàn)在所有的業(yè)務(wù)全部壓在了一臺(tái)上,有十分大的風(fēng)險(xiǎn)
二? ?keepalived介紹
官網(wǎng):http://keepalived.org/
(一)??keepalived?功能
-
基于vrrp協(xié)議完成地址流動(dòng)
-
為vip地址所在的節(jié)點(diǎn)生成ipvs規(guī)則(在配置文件中預(yù)先定義)
-
為ipvs集群的各RS做健康狀態(tài)檢測(cè)
-
基于腳本調(diào)用接口完成腳本中定義的功能,進(jìn)而影響集群事務(wù),以此支持nginx、haproxy等服務(wù)
(二)? ?Keepalived 架構(gòu)
官方文檔: https://keepalived.org/doc/
http://keepalived.org/documentation.html
-
用戶空間核心組件:
-
vrrp stack:VIP消息通告 虛擬ip
-
checkers:監(jiān)測(cè)real server(簡(jiǎn)單來說 就是監(jiān)控后端真實(shí)服務(wù)器的服務(wù))是否存活
-
system call:實(shí)現(xiàn) vrrp 協(xié)議狀態(tài)轉(zhuǎn)換時(shí)調(diào)用腳本的功能
-
SMTP:郵件組件(報(bào)警郵件)
-
IPVS wrapper:生成IPVS規(guī)則(直接生成ipvsadm)
-
Netlink Reflector:網(wǎng)絡(luò)接口(將虛擬地址ip(vip)地址飄動(dòng))
WatchDog:監(jiān)控進(jìn)程(整個(gè)架構(gòu)是否有問題)
-
控制組件:提供keepalived.conf 的解析器,完成Keepalived配置
-
IO復(fù)用器:針對(duì)網(wǎng)絡(luò)目的而優(yōu)化的自己的線程抽象
-
內(nèi)存管理組件:為某些通用的內(nèi)存管理功能(例如分配,重新分配,發(fā)布等)提供訪問權(quán)限
(三)??安裝keepalive
yum install keepalived -y
wget?官網(wǎng)
(四)??Keepalived 相關(guān)文件
-
軟件包名:keepalived
-
主程序文件:/usr/sbin/keepalived
-
主配置文件:/etc/keepalived/keepalived.conf
-
配置文件示例:/usr/share/doc/keepalived/
-
Unit File:/lib/systemd/system/keepalived.service
-
Unit File的環(huán)境配置文件:
-
/etc/sysconfig/keepalived CentOS
(五)? 配置文件詳細(xì)介紹
1,?/etc/keepalived/keepalived.conf 配置組成
-
GLOBAL CONFIGURATION
Global definitions(全局配置):定義郵件配置,route_id,vrrp配置,組播地址 等
-
VRRP CONFIGURATION
VRRP instance(s):定義vrrp協(xié)議中的每個(gè)vrrp虛擬路由器的規(guī)則,基本信息
-
LVS CONFIGURATION(lvs調(diào)度服務(wù)器的規(guī)則設(shè)置)
Virtual server group(s)
Virtual server(s):LVS集群的VS和RS
2,全局配置介紹
#/etc/keepalived/keepalived.conf
global_defs {notification_email {root@localhost#keepalived 發(fā)生故障切換時(shí)郵件發(fā)送的目標(biāo)郵箱,可以按行區(qū)分寫多個(gè)root@localhost360601212@qq.com }notification_email_from keepalived@localhost ?#發(fā)郵件的地址smtp_server 127.0.0.1 ? ? #郵件服務(wù)器地址smtp_connect_timeout 30 ? #郵件服務(wù)器連接timeoutrouter_id R1#每個(gè)keepalived主機(jī)唯一標(biāo)識(shí),建議使用當(dāng)前主機(jī)名,但多節(jié)點(diǎn)重名不影響vrrp_skip_check_adv_addr ?#對(duì)所有通告報(bào)文都檢查,會(huì)比較消耗性能,啟用此配置后,如果收到的通告報(bào)文和上一個(gè)報(bào)文是同一個(gè)路由器,則跳過檢查,默認(rèn)值為全檢查
vrrp_strict
#嚴(yán)格遵守VRRP協(xié)議,啟用此項(xiàng)后以下狀況將無(wú)法啟動(dòng)服務(wù):1.無(wú)VIP地址 2.配置了單播鄰居 3.在VRRP版本2中有IPv6地址,開啟動(dòng)此項(xiàng)并且沒有配置vrrp_iptables時(shí)會(huì)自動(dòng)開啟iptables防火墻規(guī)則,默認(rèn)導(dǎo)致VIP無(wú)法訪問,建議不加此項(xiàng)配置。vrrp_garp_interval 0 #gratuitous ARP messages 免費(fèi)ARP報(bào)文發(fā)送延遲,0表示不延遲vrrp_gna_interval 0 #unsolicited NA messages (不請(qǐng)自來)消息發(fā)送延遲vrrp_mcast_group4 224.0.0.18 #指定組播IP地址范圍:224.0.0.0到239.255.255.255,默認(rèn)值:224.0.0.18 vrrp_iptables ? ? ? ?#此項(xiàng)和vrrp_strict同時(shí)開啟時(shí),則不會(huì)添加防火墻規(guī)則,如果無(wú)配置vrrp_strict項(xiàng),則無(wú)需啟用此項(xiàng)配置
}
新裝的?keppalive?需要改動(dòng)的地方
3,?配置虛擬路由器
vrrp_instance <STRING> {
#<String>為vrrp的實(shí)例名,一般為業(yè)務(wù)名稱配置參數(shù)......}
#配置參數(shù):
state MASTER|BACKUP
#當(dāng)前節(jié)點(diǎn)在此虛擬路由器上的初始狀態(tài),狀態(tài)為MASTER或者BACKUP
interface IFACE_NAME
#綁定為當(dāng)前虛擬路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一個(gè)網(wǎng)卡
virtual_router_id VRID
#每個(gè)虛擬路由器惟一標(biāo)識(shí),范圍:0-255,每個(gè)虛擬路由器此值必須唯一,否則服務(wù)無(wú)法啟動(dòng),同屬一個(gè)虛擬路由器的多個(gè)keepalived節(jié)點(diǎn)必須相同,務(wù)必要確認(rèn)在同一網(wǎng)絡(luò)中此值必須唯一
priority 100
#當(dāng)前物理節(jié)點(diǎn)在此虛擬路由器的優(yōu)先級(jí),范圍:1-254,值越大優(yōu)先級(jí)越高,每個(gè)keepalived主機(jī)節(jié)點(diǎn)此值不同advert_int 1
#vrrp通告的時(shí)間間隔,默認(rèn)1sauthentication {
#認(rèn)證機(jī)制auth_type AH|PASS ? #AH為IPSEC認(rèn)證(不推薦),PASS為簡(jiǎn)單密碼(建議使用)auth_pass <PASSWORD> #預(yù)共享密鑰,僅前8位有效,同一個(gè)虛擬路由器的多個(gè)keepalived節(jié)點(diǎn)必須一樣
}
include /etc/keealived/conf.d/*.conf
virtual_ipaddress {
#虛擬IP,生產(chǎn)環(huán)境可能指定上百個(gè)IP地址<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>192.168.200.100 #指定VIP,不指定網(wǎng)卡,默認(rèn)為,注意:不指定/prefix,默認(rèn)為/32192.168.200.101/24 dev eth1 ? #指定VIP的網(wǎng)卡,建議和interface指令指定的崗卡不在一個(gè)網(wǎng)卡192.168.200.102/24 dev eth2 label eth2:1 #指定VIP的網(wǎng)卡label
}
track_interface {
#配置監(jiān)控網(wǎng)絡(luò)接口,一旦出現(xiàn)故障,則轉(zhuǎn)為FAULT狀態(tài)實(shí)現(xiàn)地址轉(zhuǎn)移eth0eth1…
}
?
三? ? ?實(shí)驗(yàn) LVS + Keepalived 高可用群集
(一)?架構(gòu)圖
簡(jiǎn)述架構(gòu):? 66和77?都是代理服務(wù)器? ?提供反向代理服務(wù)?指向后端真實(shí)服務(wù)器
? ? ? ? ? ? ? ? ? ? 且負(fù)載均衡
? ? ? ? ? ? ? ? ? ? 因?yàn)榇矸?wù)器流量最多,容易單點(diǎn)故障,所以在兩個(gè)代理服務(wù)器上都裝上keepalive(高可用)? 即備胎技術(shù)? ?,萬(wàn)一66服務(wù)器掛了? ?77備胎也能頂上來
(二)步驟
?66?代理服務(wù)器? 做主人
1,安裝keepalive? 和lvs? 的軟件
2,手寫配置文件? 配置文件只有一份? 寫之前建議備份
代碼配置如下:
[root@localhost keepalived]#vim keepalived.conf
global_defs {router_id HA_TEST_R2 ####本路由器的服務(wù)器名稱 HA_TEST_R2
}
vrrp_instance VI_1 { ####定義VRRP熱備實(shí)列state BACKUP ####熱備狀態(tài),backup表示輔服務(wù)器interface ens33 ####表示承載VIP地址的物理接口virtual_router_id 1 ####虛擬路由器的ID號(hào),每個(gè)熱備組保持一致priority 99 ####優(yōu)先級(jí),優(yōu)先級(jí)越大優(yōu)先級(jí)越高advert_int 1 ####通告間隔秒數(shù)(心跳頻率)authentication { ####認(rèn)證信息,每個(gè)熱備組保持一致auth_type PASS ####認(rèn)證類型auth_pass 123456 ####認(rèn)證密碼}virtual_ipaddress { ####漂移地址(VIP),可以是多個(gè)192.168.100.10}
}#需要修改項(xiàng)global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1#修改郵箱指向自己(10行)smtp_connect_timeout 30router_id LVS_01#指定服務(wù)器名稱主備需要不一樣(12行)vrrp_skip_check_adv_addr#vrrp_strict#14行需要注釋否則服務(wù)啟動(dòng)有問題vrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTER#指定服務(wù)器類型MASTER為主 BACKUP為備(20行)interface ens33#修改網(wǎng)卡名稱為ens33(21)virtual_router_id 10#指定虛擬路由器的ID號(hào)主備需要一致#nopreempt #非搶占模式兩個(gè)節(jié)點(diǎn)都需要配置去掉注釋priority 100#設(shè)定優(yōu)先級(jí)數(shù)字越大優(yōu)先級(jí)越高,準(zhǔn)備需要不一樣advert_int 1#通告間隔(查看是否存活)authentication {auth_type PASS#認(rèn)證類型auth_pass 123456#修改驗(yàn)證密碼,主備需要一樣(27行)}virtual_ipaddress {192.168.91.188#指定群集vip地址}
}
virtual_server 192.168.91.188 80 {delay_loop 6#健康間隔時(shí)間6秒lb_algo rr#調(diào)度算法輪詢lb_kind DR#lvs模式為DR persistence_timeout 0#連接保持時(shí)間改為0 否則 無(wú)法體現(xiàn)效果protocol TCP#采用協(xié)議real_server 192.168.91.103 80 {#43行修改地址為真實(shí)主機(jī)地址weight 1#45行刪除#節(jié)點(diǎn)權(quán)重TCP_CHECK{connect_port 80#檢查目標(biāo)端口connect_timeout 3#連接超時(shí) nb_get_retry 3#重試次數(shù)delay_before_retry 3#重試間隔時(shí)間}}real_server 192.168.91.105 80 {#第二個(gè)weight 1TCP_CHECK{connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
3,?啟動(dòng)?keepalive
4,?導(dǎo)入ipvsadm?文件? ?啟動(dòng)ipvsadm
5, hostname -I? ?可以看到? 虛擬ip?目前飄在? lvs?主? 代理服務(wù)器上
6,?把?配置文件拷貝給? 77?代理服務(wù)器
77? 備? ?lvs代理服務(wù)器
1,? 接受66?的配置文件? 覆蓋原來的配置文件
2,?改配置文件
只有三處需要改
3,?啟動(dòng)keepalive? 和ipvsadm
88? 99?真實(shí)服務(wù)器
1,下載?http
2,? 做頁(yè)面
3,給兩個(gè)真實(shí)服務(wù)器? 在回環(huán)網(wǎng)卡上? 加上虛擬ip
4,?避免地址沖突? 寫忽略arp?廣播
5,?為實(shí)驗(yàn)效果?關(guān)閉httpd?自帶的長(zhǎng)連接
vi ?/etc/httpd/conf/httpd.conf?
6 ,重啟httpd
實(shí)驗(yàn)結(jié)果
客戶機(jī)訪問188?虛擬ip? 可以做到看到真實(shí)服務(wù)器的頁(yè)面
四? ?keepalive?高可用
1,把主? lvs?代理服務(wù)器關(guān)了
2,備用機(jī)頂上來了
3,客戶機(jī)不影響訪問? 呢
五? ??非搶占模式?搶占模式?延遲搶占模式
(一)搶占模式
默認(rèn)模式 使用的 搶占式
(二)非搶占模式
1,解釋
即當(dāng)? 主人掛了? 備用機(jī)會(huì)頂上去? 變成主人
如果主人又好了? 不會(huì)搶主人?會(huì)乖乖變成備用機(jī)
2,主備改配置文件
3,各自重啟?讓配置文件生效
4,關(guān)掉主? 的服務(wù)? 再開啟主的服務(wù)? 可以發(fā)現(xiàn)虛擬ip?一直在77服務(wù)器上(原來的備)
不會(huì)搶占
(三)? 延遲搶占模式
1,解釋
生產(chǎn)模式常用??
如果搶占模式?就怕主?服務(wù)器是回光返照?又壞了
如果不搶占模式? 一般主?服務(wù)器的性能都好一點(diǎn)? ?不用主?服務(wù)器浪費(fèi)
2,主?服務(wù)器配置文件
3? ,?從服務(wù)器?配置文件
4?實(shí)驗(yàn)結(jié)果
關(guān)閉主? 服務(wù)器? ? 再開啟主? ?服務(wù)器
可以看到主? 服務(wù)器?過了 30秒?才搶回的主權(quán)
六? 修改心跳線ip
(一)??修改原來默認(rèn)的多播地址
默認(rèn)keepalived主機(jī)之間利用多播相互通告消息,會(huì)造成網(wǎng)絡(luò)擁塞
1,抓包心跳線
2,?改主? 備? ?服務(wù)器的配置文件
主改
備也要改
3,?再次抓包? ?已經(jīng)改變
?
(二)?修改原來默認(rèn)的多播地址?為?單播地址
默認(rèn)keepalived主機(jī)之間利用多播相互通告消息,會(huì)造成網(wǎng)絡(luò)擁塞,可以替換成單播,減少網(wǎng)絡(luò)流量
1,寫主? ?配置文件
2,寫備? 配置文件
3,?各自重啟? 抓包
可以發(fā)現(xiàn)? 心跳線已經(jīng)由組播改為單播? 地址
七? ??通知腳本
(一)?語(yǔ)法
當(dāng)前節(jié)點(diǎn)成為主節(jié)點(diǎn)時(shí)觸發(fā)的腳本 | notify_master <STRING>|<QUOTED-STRING> |
當(dāng)前節(jié)點(diǎn)轉(zhuǎn)為備節(jié)點(diǎn)時(shí)觸發(fā)的腳本 | notify_backup <STRING>|<QUOTED-STRING> |
當(dāng)前節(jié)點(diǎn)轉(zhuǎn)為“失敗”狀態(tài)時(shí)觸發(fā)的腳本 | notify_fault <STRING>|<QUOTED-STRING> |
通用格式的通知觸發(fā)機(jī)制,一個(gè)腳本可完成以上三種狀態(tài)的轉(zhuǎn)換時(shí)的通知 | notify <STRING>|<QUOTED-STRING> |
當(dāng)停止VRRP時(shí)觸發(fā)的腳本 | notify_stop <STRING>|<QUOTED-STRING> |
(二)?實(shí)驗(yàn)
1,?寫通知腳本
#!/bin/bash
#
contact='940132245@qq.com'
notify() {mailsubject="$(hostname) to be $1, vip floating"mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)notify master;;
backup)notify backup;;
fault)notify fault;;
*)echo "Usage: $(basename $0) {master|backup|fault}"exit 1;;
esac
2,? 給腳本加執(zhí)行權(quán)限
3,?改主? 服務(wù)器的配置文件
4,重啟?主? 服務(wù)器? ? 可以看到有新的郵件
?
八? 把日志獨(dú)立出來
keepalive? 比較重要? 把日志獨(dú)立出來方便查看
1,??/etc/sysconfig/keepalived? 這是keepalive?環(huán)境變量配置文件
2,寫?rsyslog?日志管理工具
3,?重啟兩個(gè)服務(wù)
4? 可以看到自動(dòng)生成 .log?文件?我們查看他
九? ? 腦裂
(一)腦裂定義
什么是腦裂?
在高可用(HA)系統(tǒng)中,當(dāng)聯(lián)系2個(gè)節(jié)點(diǎn)的“心跳線”斷開時(shí),本來為一整體、動(dòng)作協(xié)調(diào)的HA系統(tǒng),
就分裂成為2個(gè)獨(dú)立的個(gè)體。
由于相互失去了聯(lián)系,都以為是對(duì)方出了故障。兩個(gè)節(jié)點(diǎn)上的HA軟件像“裂腦人”一樣,爭(zhēng)搶“共享
資源”、爭(zhēng)起“應(yīng)用服務(wù)”,就會(huì)發(fā)生嚴(yán)重后果。共享資源被瓜分、兩邊“服務(wù)”都起不來了;或者兩邊
“服務(wù)”都起來了,但同時(shí)讀寫“共享存儲(chǔ)”,導(dǎo)致數(shù)據(jù)損壞
(二)?導(dǎo)致腦裂的原因
高可用服務(wù)器對(duì)之間心跳線鏈路發(fā)生故障,導(dǎo)致無(wú)法正常通信。
因心跳線壞了(包括斷了,老化)。
因網(wǎng)卡及相關(guān)驅(qū)動(dòng)壞了,ip配置及沖突問題(網(wǎng)卡直連)
因心跳線間連接的設(shè)備故障(網(wǎng)卡及交換機(jī))
高可用服務(wù)器上開啟了 iptables防火墻阻擋了心跳消息傳輸。
高可用服務(wù)器上心跳網(wǎng)卡地址等信息配置不正確,導(dǎo)致發(fā)送心跳失敗
其他服務(wù)配置不當(dāng)?shù)仍?#xff0c;如心跳方式不同,心跳廣插沖突、軟件Bug等。
(三)如何解決keepalived腦裂問題
在實(shí)際生產(chǎn)環(huán)境中,我們從以下方面防止腦裂:
?
1,加一條心跳線
同時(shí)使用串行電纜和以太網(wǎng)電纜連接、同時(shí)使用兩條心跳線路,這樣一條線路斷了,另外一條還是好的,依然能傳送心跳消息
2,特殊設(shè)備支持
當(dāng)檢查腦裂時(shí)強(qiáng)行關(guān)閉一個(gè)心跳節(jié)點(diǎn)(這個(gè)功能需要特殊設(shè)備支持,如stonith、fence)相當(dāng)于備節(jié)點(diǎn)接收不到心跳消息,通過單獨(dú)的線路發(fā)送關(guān)機(jī)命令關(guān)閉主節(jié)點(diǎn)的電源
(四)?做好對(duì)腦裂的監(jiān)控報(bào)警解決常見方案
1,rsyslog ? 分割日志
2,如果開啟防火墻,一定要讓心跳消息通過,一般通過允許IP段的形式解決
3,可以拉一條以太網(wǎng)網(wǎng)線或者串口線作為主被節(jié)點(diǎn)心跳線路的冗余
4,開發(fā)檢測(cè)程序通過監(jiān)控軟件檢測(cè)腦裂
(五)模擬腦裂
1,?模擬腦裂
備用機(jī)丟棄?心跳線
2,主? 備都以為自己是? ?主人
備:
主: