keeplive安装部署
部署keeplive
1、安裝依賴
yum install -y openssl openssl-devel gcc2、安裝軟件包
tar xvf keepalived-2.0.7.tar.gz cd keepalived-2.0.7 ./configure --prefix=/usr/local/keepalived make && make install 完成后會在以下路徑生成: /usr/local/etc/keepalived/keepalived.conf /usr/local/etc/sysconfig/keepalived /usr/local/sbin/keepalived3、 keepalived啟動腳本變量引用文件,默認文件路徑是/etc/sysconfig/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived4、將keepalived主程序加入到環境變量(安裝目錄下)
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived5、keepalived啟動腳本(源碼目錄下),放到/etc/init.d/目錄下就可以使用service命令便捷調用
cp /usr/local/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/init.d/keepalived6、 將配置文件放到默認路徑下
mkdir /etc/keepalived cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf7、基本設置
加為系統服務:chkconfig --add keepalived 開機啟動:chkconfig keepalived on 查看開機啟動的服務:chkconfig --list 啟動、關閉、重啟service keepalived start|stop|restart8、編輯keepalived.conf文件
! Configuration File for keepalivedglobal_defs { notification_email { email地址 } script_user root enable_script_security notification_email_from 發件人地址 smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MASTER-HA } #檢測mysql服務是否在運行。有很多方式,比如進程,用腳本檢測等等 vrrp_script chk_mysql_port {script "/opt/chk_mysql.sh" #這里通過腳本監測interval 2 #腳本執行間隔,每2s檢測一次weight -5 #腳本結果導致的優先級變更,檢測失敗(腳本返回非0)則優先級 -5fall 2 #檢測連續2次失敗才算確定是真失敗。會用weight減少優先級(1-255之間)rise 1 #檢測1次成功就算成功。但不修改優先級}vrrp_instance VI_1 {state MASTERinterface ens33 #指定虛擬ip的網卡接口mcast_src_ip 192.168.1.20virtual_router_id 51 #路由器標識,MASTER和BACKUP必須是一致的priority 99 #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大于BACKUP的優先級。這樣MASTER故障恢復后,就>可以將VIP資源再次搶回來,但是我們這里使用的是非搶占模式 所以兩臺機器除去自己IP地址之外其他配置是一致的。advert_int 1authentication {auth_type PASSauth_pass 1111} virtual_ipaddress {192.168.1.25}track_script {chk_mysql_port } }9、添加MySQL檢測文件/opt/chk_mysql.sh
#!/bin/bash counter=$(netstat -na|grep LISTEN|grep 3306|wc -l) if [ ${counter} = 0 ]; then/etc/init.d/keepalived stop fi10、啟動服務
/etc/init.d/keepalived start配置郵件發送提醒
1、從個人郵箱內獲取授權碼
2、安裝mailx發送郵件程序
3、編輯郵箱認證文件
vi /etc/mail.rc set from=xxx@qq.com set smtp=smtp.qq.com set smtp-auth-user=xxx@qq.com set smtp-auth-password=授權碼 set smtp-auth=login set ssl-verify=ignore4、編寫郵箱通知腳本
vim /etc/keepalived/notify.sh contact='xxx@qq.com'function notify() {mailsubject="$(hostname) to be $1, vip轉移"mailbody="$(date +'%F %T'): VRRP Transition, $(hostname) changed to be $1"echo "$mailbody" | mail -s "$mailsubject" $contact }case $1 inmaster)notify master;;backup)notify backup;;fault)notify fault;;*)echo "Usage: $(basename$0) {master|backup|fault}"exit 100;; esac5、賦權
chmod +x notify.sh6、配置文件內添加郵件發送執行腳本
virtual_ipaddress {172.30.1.100 dev eth1 label eth1:0172.30.1.200 dev eth1 label eth1:1}#定義通知腳本,當前節點成為主節點時觸發的腳本notify_master "/etc/keepalived/notify.sh master"#定義通知腳本,當前節點轉為備節點時觸發的腳本notify_backup "/etc/keepalived/notify.sh backup"#定義通知腳本,當前節點轉為“失敗”狀態時觸發的腳本notify_fault "/etc/keepalived/notify.sh fault"7、給所有服務都進行配置
keeplive配置說明
一、配置項
global_defs{ notification_email{#指定keepalived在發生切換時需要發送email到的對象,一行一個 sysadmin@fire.loc } notification_email_fromAlexandre.Cassen@firewall.loc#指定發件人 smtp_serverlocalhost#指定smtp服務器地址 smtp_connect_timeout30#指定smtp連接超時時間 router_idLVS_DEVEL#運行keepalived機器的一個標識 } vrrp_sync_groupVG_1{#監控多個網段的實例 group{ inside_network#實例名 outside_network } notify_master/path/xx.sh#指定當切換到master時,執行的腳本 notify_backup/path/xx.sh#指定當切換到backup時,執行的腳本 notify_fault"path/xx.shVG_1"#故障時執行的腳本 notify/path/xx.sh smtp_alert#使用global_defs中提供的郵件地址和smtp服務器發送郵件通知 }#因為Keepalived在轉換狀態時會依照狀態來呼叫: #當進入Master狀態時會呼叫notify_master #當進入Backup狀態時會呼叫notify_backup #當發現異常情況時進入Fault狀態呼叫notify_fault vrrp_instanceinside_network{ stateBACKUP#指定那個為master,那個為backup,如果設置了nopreempt這個值不起作用,主備考priority決 定 interfaceeth0#設置實例綁定的網卡VRRP心跳包從哪塊網卡發出 dont_track_primary#忽略vrrp的interface錯誤(默認不設置) track_interface{#設置額外的監控,里面那個網卡出現問題都會切換 eth0 eth1 } mcast_src_ip#發送多播包的地址,如果不設置默認使用綁定網卡的primaryip garp_master_delay#在切換到master狀態后,延遲進行gratuitousARP請求 virtual_router_id50#VPID標記相同VRID的LVS屬于同一組,根據優先級選舉出一個主 priority99#優先級,高優先級競選為master advert_int10#檢查間隔,默認1秒VRRP心跳包的發送周期,單位為s組播信息發送間隔,兩個節點設置必須一樣(實際并不一定完全是10秒,測試結果是小于10秒的隨機值) nopreempt#設置為不搶占注:這個配置只能設置在backup主機上,而且這個主機優先級要比另外一臺高首先nopreemt必須在state為BACKUP的節點上才生效(因為是BACKUP節點決定是否來成為MASTER的),其次要實現類似于關閉autofailback的功能需要將所有節點的state都設置為BACKUP,或者將master節點的priority設置的比BACKUP低。我個人推薦使用將所有節點的state都設置成BACKUP并且都加上nopreempt選項,這樣就完成了關于autofailback功能,當想手動將某節點切換為MASTER時只需去掉該節點的nopreempt選項并且將priority改的比其他節點大,然后重新加載配置文件即可(等MASTER切過來之后再將配置文件改回去再reload一下)。 preempt_delay#搶占延時,默認5分鐘 debug#debug級別 authentication{#設置認證 auth_typePASS#認證方式 auth_pass111111#認證密碼(密碼只識別前8位) } virtual_ipaddress{#設置vip 192.168.202.200 } } virtual_server192.168.202.20023{ delay_loop6#健康檢查時間間隔(實際并不一定完全是6秒,測試結果是小于6秒的隨機值?) lb_algorr#lvs調度算法rr|wrr|lc|wlc|lblc|sh|dh lb_kindDR#負載均衡轉發規則NAT|DR|RUN persistence_timeout5#會話保持時間 protocolTCP#使用的協議 persistence_granularity<NETMASK>#lvs會話保持粒度 virtualhost<string>#檢查的web服務器的虛擬主機(host:頭) sorry_server<IPADDR><port>#備用機,所有realserver失效后啟用 real_server192.168.200.523{ weight1#默認為1,0為失效 inhibit_on_failure#在服務器健康檢查失效時,將其設為0,而不是直接從ipvs中刪除 notify_up<string>|<quoted-string>#在檢測到serverup后執行腳本 notify_down<string>|<quoted-string>#在檢測到serverdown后執行腳本TCP_CHECK{ connect_timeout3#連接超時時間 nb_get_retry3#重連次數 delay_before_retry3#重連間隔時間 connect_port23健康檢查的端口的端口 bindto<ip> } HTTP_GET|SSL_GET{ url{#檢查url,可以指定多個 path/ digest<string>#檢查后的摘要信息 status_code200#檢查的返回狀態碼 } connect_port<port> bindto<IPADD> connect_timeout5 nb_get_retry3 delay_before_retry2 }SMTP_CHECK{ host{ connect_ip<IPADDRESS> connect_port<port>#默認檢查25端口 bindto<IPADDRESS> } connect_timeout5 retry3 delay_before_retry2 helo_name<string>|<quoted-string>#smtphelo請求命令參數,可選 } MISC_CHECK{ misc_path<string>|<quoted-string>#外部腳本路徑 misc_timeout#腳本執行超時時間 misc_dynamic#如設置該項,則退出狀態碼會用來動態調整服務器的權重,返回0正常,不修改;返回1,檢查失敗,權重改為0;返回2-255,正常,權重設置為:返回狀態碼-2 } }1、其他配置項說明
keepalived的核心就是將IPVS配置成高可用,生成ipvs規則來完成負載均衡效果。
virtualserver(虛擬服務)的定義:
virtual_serverIPport#定義虛擬主機IP地址及其端口
virtual_serverfwmarkint#ipvs的防火墻打標,實現基于防火墻的負載均衡集群
virtual_servergroupstring#將多個虛擬服務器定義成組,將組定義成虛擬服務
lb_algo{rr|wrr|lc|wlc|lblc|lblcr}#定義LVS的調度算法
lb_kind{NAT|DR|TUN}#定義LVS的模型
presitence_timeout#定義支持持久連接的時長
protocolTCP#規則所能支持的協議
sorry_server#如果所有real_server都出現故障了,利用此返回信息
二、術語
虛擬路由器
由一個Master路由器和多個Backup路由器組成。主機將虛擬路由器當作默認網關;
VRID
虛擬路由器的標識。有相同VRID的一組路由器構成一個虛擬路由器;
Master路由器
虛擬路由器中承擔報文轉發任務的路由器;
Backup路由器
Master路由器出現故障時,能夠代替Master路由器工作的路由器;
虛擬IP地址
虛擬路由器的IP地址。一個虛擬路由器可以擁有一個或多個IP地址;
IP地址擁有者
接口IP地址與虛擬IP地址相同的路由器被稱為IP地址擁有者;
虛擬MAC地址
一個虛擬路由器擁有一個虛擬MAC地址。通常情況下,虛擬路由器回應ARP請求使用的是虛擬MAC地址,只有虛擬路由器做特殊配置的時候,才回應接口的真實MAC地址;
優先級
VRRP根據優先級來確定虛擬路由器中每臺路由器的地位;
非搶占方式
如果Backup路由器工作在非搶占方式下,則只要Master路由器沒有出現故障Backup路由器即使隨后被配置了更高的優先級也不會成為Master路由器;
搶占方式
如果Backup路由器工作在搶占方式下,當它收到VRRP報文后,會將自己的優先級與通告報文中的優先級進行比較。如果自己的優先級比當前的Master路由器的優先級高,就會主動搶占成為Master路由器;否則,將保持Backup狀態.
三、高級使用
1、介紹
Keeaplived主要有兩種應用場景,一個是通過配置keepalived結合ipvs做到負載均衡(LVS+Keepalived)。另一個是通過自身健康檢查、資源接管功能做高可用(雙機熱備),實現故障轉移。
以下內容主要針對Keepalived+MySQL雙主實現雙機熱備為根據,主要講解keepalived的狀態轉換通知功能,利用此功能可有效加強對MySQL數據庫監控。此文不再講述Keepalived+MySQL雙主部署過程,有需求者可參考以往博文:http://blog.jobbole.com/94643/
2、keepalived主要作用
keepalived采用VRRP(virtualrouterredundancyprotocol),虛擬路由冗余協議,以軟件的形式實現服務器熱備功能。通常情況下是將兩臺linux服務器組成一個熱備組(master-backup),同一時間熱備組內只有一臺主服務器(master)提供服務,同時master會虛擬出一個共用IP地址(VIP),這個VIP只存在master上并對外提供服務。如果keepalived檢測到master宕機或服務故障,備服務器(backup)會自動接管VIP成為master,keepalived并將master從熱備組移除,當master恢復后,會自動加入到熱備組,默認再搶占成為master,起到故障轉移功能。
3、工作在三層、四層和七層原理
Layer3:工作在三層時,keepalived會定期向熱備組中的服務器發送一個ICMP數據包,來判斷某臺服務器是否故障,如果故障則將這臺服務器從熱備組移除。
Layer4:工作在四層時,keepalived以TCP端口的狀態判斷服務器是否故障,比如檢測mysql3306端口,如果故障則將這臺服務器從熱備組移除。
示例:
!ConfigurationFileforkeepalived global_defs{ notification_email{ xxx@163.com } notification_email_fromexample@example.com smtp_server127.0.0.1 smtp_connect_timeout30 router_idMYSQL_HA }vrrp_instanceVI_1{ stateBACKUP interfaceeth1 virtual_router_id50 nopreempt#當主down時,備接管,主恢復,不自動接管 priority100 advert_int1 authentication{ auth_typePASS ahth_pass123 }virtual_ipaddress{ 192.168.1.200#虛擬IP地址 }}virtual_server192.168.1.2003306{delay_loop6 #lb_algorr #lb_kindNAT persistence_timeout50 protocolTCP real_server192.168.1.2013306{#監控本機3306端口 weight1 notify_down/etc/keepalived/kill_keepalived.sh#檢測3306端口為down狀態就執行此腳本(只有keepalived關閉,VIP才漂移) TCP_CHECK{#健康狀態檢測方式,可針對業務需求調整(TTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK) connect_timeout3 nb_get_retry3 delay_before_retry3 }}}Layer7:工作在七層時,keepalived根據用戶設定的策略判斷服務器上的程序是否正常運行,如果故障則將這臺服務器從熱備組移除。
示例:
!ConfigurationFileforkeepalived global_defs{ notification_email{ xxx@163.com } notification_email_fromexample@example.com smtp_server127.0.0.1 smtp_connect_timeout30 router_idMYSQL_HA }vrrp_scriptcheck_nginx{ script/etc/keepalived/check_nginx.sh#檢測腳本 interval2#執行間隔時間 }vrrp_instanceVI_1{ stateBACKUP interfaceeth1 virtual_router_id50 nopreempt#當主down時,備接管,主恢復,不自動接管 priority100 advert_int1 authentication{ auth_typePASS ahth_pass123 } virtual_ipaddress{ 192.168.1.200#虛擬IP地址 } track_script{#在實例中引用腳本 check_nginx } }腳本內容如下:
#cat/etc/keepalived/check_nginx.sh Count1=`netstat-antp|grep-vgrep|grepnginx|wc-l` if[$Count1-eq0];then /usr/local/nginx/sbin/nginx sleep2 Count2=`netstat-antp|grep-vgrep|grepnginx|wc-l` if[$Count2-eq0];then servicekeepalivedstop else exit0 fi else exit0 fi4、健康狀態檢測方式
4.1HTTP服務狀態檢測
4.2TCP端口狀態檢測(使用TCP端口服務基本上都可以使用)
TCP_CHECK{connect_port80#健康檢測端口,默認為real_server后跟端口connect_timeout5nb_get_retry3delay_before_retry3}4.3郵件服務器SMTP檢測
SMTP_CHECK{#健康檢測郵件服務器smtp
4.4用戶自定義腳本檢測real_server服務狀態
MISC_CHECK{misc_path/script.sh#指定外部程序或腳本位置misc_timeout3#執行腳本超時時間!misc_dynamic#不動態調整服務器權重(weight),如果啟用將通過退出狀態碼動態調整real_server權重值}5、狀態轉換通知功能
keepalived主配置郵件通知功能,默認當real_server宕機或者恢復時才會發出郵件。有時我們更想知道keepalived的主服務器故障切換后,VIP是否順利漂移到備服務器,MySQL服務器是否正常?那寫個監控腳本吧,可以,但沒必要,因為keepalived具備狀態檢測功能,所以我們直接使用就行了。
主配置默認郵件通知配置模板如下:
5.1實例狀態通知
a)notify_master:節點變為master時執行
b)notify_backup:節點變為backup時執行
c)notify_fault:節點變為故障時執行
5.2虛擬服務器檢測通知
a)notify_up:虛擬服務器up時執行
b)notify_down:虛擬服務器down時執行
示例:
!ConfigurationFileforkeepalived global_defs{ notification_email{ example@163.com }notification_email_fromexample@example.com smtp_server127.0.0.1 smtp_connect_timeout30 router_idMYSQL_HA } vrrp_instanceVI_1{ stateBACKUP interfaceeth1 virtual_router_id50 nopreempt#當主down時,備接管,主恢復,不自動接管 priority100 advert_int1 authentication{ auth_typePASS ahth_pass123 } virtual_ipaddress{ 192.168.1.200 } notify_master/etc/keepalived/to_master.sh notify_backup/etc/keepalived/to_backup.sh notify_fault/etc/keepalived/to_fault.sh }virtual_server192.168.1.2003306{delay_loop6persistence_timeout50protocolTCPreal_server192.168.1.2013306{weight1notify_up/etc/keepalived/mysql_up.shnotify_down/etc/keepalived/mysql_down.shTCP_CHECK{connect_timeout3nb_get_retry3delay_before_retry3}}}狀態參數后可以是bash命令,也可以是shell腳本,內容根據自己需求定義,以上示例中所涉及狀態腳本如下:
1)當服務器改變為主時執行此腳本
2)當服務器改變為備時執行此腳本
#!/bin/bash Date=$(date+%F""%T) IP=$(ifconfigeth0|grep"inetaddr"|cut-d":"-f2|awk'{print$1}') Mail="baojingtongzhi@163.com" echo"$Date$IPchangetobackup."|mail-s"Master-BackupChangeStatus"$Mail3)當服務器改變為故障時執行此腳本
#!/bin/bash Date=$(date+%F""%T) IP=$(ifconfigeth0|grep"inetaddr"|cut-d":"-f2|awk'{print$1}') Mail="baojingtongzhi@163.com" echo"$Date$IPchangetofault."|mail-s"Master-BackupChangeStatus"$Mail4)當檢測TCP端口3306為不可用時,執行此腳本,殺死keepalived,實現切換
#!/bin/bash Date=$(date+%F""%T) IP=$(ifconfigeth0|grep"inetaddr"|cut-d":"-f2|awk'{print$1}') Mail="baojingtongzhi@163.com" pkillkeepalived echo"$Date$IPThemysqlservicefailure,killkeepalived."|mail-s"Master-BackupMySQLMonitor"$Mail5)當檢測TCP端口3306可用時,執行此腳本
#!/bin/bash Date=$(date+%F""%T) IP=$(ifconfigeth0|grep"inetaddr"|cut-d":"-f2|awk'{print$1}') Mail="baojingtongzhi@163.com" echo"$Date$IPThemysqlserviceisrecovery."|mail-s"Master-BackupMySQLMonitor"$Mail總結
以上是生活随笔為你收集整理的keeplive安装部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BUGKU][CTF][Reverse
- 下一篇: Facebook开源动画库 POP-PO