Keepalived - Keepalived 实现 tomcat双机热备
文章目錄
- Pre
- 環境信息
- 官網
- 原理
- keepalived 安裝
- 137 安裝 keepalived
- 138 安裝 keepalived
- 配置keepalived的配置文件/etc/keepalived/keepalived.conf
- 關鍵參數解讀
- 137
- 138
- 檢測腳本
- 日志
- 狀態發生變更,觸發腳本
- 小結
- Questions
- exited due to signal 15
- notify_master notify_backup未生效
Pre
雙機熱備是指兩臺機器都在運行,但并不是兩臺機器都同時在提供服務。
環境信息
| 節點A | keepalived + tomcat | 192.168.126.137 |
| 節點B | keepalived + tomcat | 192.168.126.138 |
| 虛擬IP | - | 192.168.126.200 |
官網
https://keepalived.readthedocs.io/en/latest/#
原理
keepalived用于保證環境高可用,防止單點故障。
keepalived主要有三個模塊,分別是core、check和VRRP。
- core核心模塊,負責主進程的啟動、維護以及全局配置文件的加載和解析
- check負責健康檢查,包括常見的各種檢查方式
- VRRP模塊實現VRRP協議
VRRP(Virtual Router Redundancy Protocol) 即虛擬路由冗余協議,實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到VRRP包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。
keepalived 安裝
兩個節點均需要安裝, 在137 和 138 節點上安裝 ,執行 yum install keepalived
137 安裝 keepalived
[root@localhost ~]# yum install keepalived Loaded plugins: fastestmirror ....... ....... Complete! [root@localhost ~]#138 安裝 keepalived
[root@localhost ~]# yum install keepalived Loaded plugins: fastestmirror ....... ....... Complete! [root@localhost ~]#tomcat 也都裝下哈 ,用于驗證,可以yum安裝
CentOS 7 yum安裝與配置 Tomcat 寫的挺不錯,沒有的話可以參考
配置keepalived的配置文件/etc/keepalived/keepalived.conf
關鍵參數解讀
state 主服務器為MASTER,其他服務器均為BACKUP interface 通信用的網卡,ip addr可以查看,以實際為準 virtual_router_id 主從服務器此ID必須一致 priority 優先級,主服務器必須大于其他服務器,數值越大優先級越高 authentication 主從服務器必須一致 virtual_ipaddress 虛擬IP地址,主從服務器必須一致,該VIP為客戶端訪問時使用的IP137
! Configuration File for keepalived global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from example@example.comsmtp_server mail.example.comsmtp_connect_timeout 30router_id LVS_DEVEL } vrrp_script chk_tomcat {script "/etc/keepalived/tomcat_check.sh"interval 5weight -5fall 3 rise 2 } vrrp_instance VI_1 {state MASTERinterface ens33mcast_src_ip 192.168.126.137virtual_router_id 51priority 101advert_int 2authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.126.200}track_script {chk_tomcat} }138
! Configuration File for keepalived global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from example@example.comsmtp_server mail.example.comsmtp_connect_timeout 30router_id LVS_DEVEL } vrrp_script chk_tomcat {script "/etc/keepalived/tomcat_check.sh"interval 5weight -5fall 3 rise 2 } vrrp_instance VI_1 {state BACKUPinterface ens33mcast_src_ip 192.168.126.138virtual_router_id 51priority 99advert_int 2authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.126.200}track_script {chk_tomcat} }與主節點的配置上的區別,需要注意
state 表示一個是主機一個是備機,mcast_src_ip 當前服務器的ip,priority 主機要比備機的要高
檢測腳本
!/bin/bash JAVA_PROCESS=`ps -C java --no-heading| wc -l` if [ $JAVA_PROCESS -eq 0 ];thenecho "tomcat is stop"sleep 2if [ `ps -C java --no-heading| wc -l` -eq 0 ];thensystemctl stop keepalived.service fi fi比較簡單,根據實際情況調整
檢測是否有tomcat在運行,如果沒有的話,等2秒,如果還沒有就把keepalived給停止掉,這樣vip就能從主機master切換到備機BACKUP上了。
日志
可以查看 /var/log/messages 日志 觀察切換和選主的過程。
狀態發生變更,觸發腳本
https://keepalived.readthedocs.io/en/latest/configuration_synopsis.html
! Configuration File for keepalived global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from example@example.comsmtp_server mail.example.comsmtp_connect_timeout 30router_id LVS_DEVEL }vrrp_script chk_tomcat {script "/etc/keepalived/tomcat_check.sh"interval 5weight -5fall 3 rise 2 } vrrp_instance VI_1 {state MASTERinterface ens33mcast_src_ip 192.168.126.137virtual_router_id 51priority 101advert_int 2authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.126.200}track_script {chk_tomcat}notify_master /etc/keepalived/a.sh notify_backup /etc/keepalived/b.sh當節點從BACKUP 轉為 MASTER的時候 ,執行 /etc/keepalived/a.sh
當節點從MASTER 轉為 BACKUP的時候 ,執行 /etc/keepalived/b.sh
小結
MASTER和 BACKUP,預先分配好, 通過priority 來確定, 當MASTER宕機以后,BACKUP 沒有收到 MASTER的 VRRP消息,BACKUP就認為 MASTER宕機了,這個時候就把自己選舉為MASTER。
MASTER宕機,本節點的日志
Dec 30 01:40:01 localhost Keepalived[6784]: Stopping Dec 30 01:40:01 localhost systemd: Stopping LVS and VRRP High Availability Monitor... Dec 30 01:40:01 localhost Keepalived_vrrp[6786]: VRRP_Instance(VI_1) sent 0 priority Dec 30 01:40:01 localhost Keepalived_vrrp[6786]: VRRP_Instance(VI_1) removing protocol VIPs. Dec 30 01:40:01 localhost Keepalived_healthcheckers[6785]: Stopped Dec 30 01:40:02 localhost Keepalived_vrrp[6786]: Stopped Dec 30 01:40:02 localhost Keepalived[6784]: Stopped Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2 Dec 30 01:40:02 localhost systemd: Stopped LVS and VRRP High Availability Monitor.BACKUP節點的日志
Dec 30 01:40:05 localhost Keepalived_vrrp[9173]: VRRP_Instance(VI_1) Entering MASTER STATE Dec 30 01:40:05 localhost Keepalived_vrrp[9173]: VRRP_Instance(VI_1) setting protocol VIPs.當MASTER恢復以后,MASTER發送VRRP消息給BACKUP,這個時候雖然BACKUP是MASTER,但是 比較Prority后,發現自己的Prority小,會進入BACKUP模式,這個時候,之前設置的MASTER就又變成了MASTER了 。
MASTER恢復,本節點的日志
Dec 30 01:42:09 localhost Keepalived[6915]: Starting Healthcheck child process, pid=6916 Dec 30 01:42:09 localhost Keepalived[6915]: Starting VRRP child process, pid=6917 Dec 30 01:42:09 localhost Keepalived_healthcheckers[6916]: Opening file '/etc/keepalived/keepalived.conf'. Dec 30 01:42:09 localhost systemd: Started LVS and VRRP High Availability Monitor. Dec 30 01:42:09 localhost Keepalived_vrrp[6917]: Registering Kernel netlink reflector Dec 30 01:42:09 localhost Keepalived_vrrp[6917]: Registering Kernel netlink command channel Dec 30 01:42:09 localhost Keepalived_vrrp[6917]: Registering gratuitous ARP shared channel Dec 30 01:42:09 localhost Keepalived_vrrp[6917]: Opening file '/etc/keepalived/keepalived.conf'. Dec 30 01:42:09 localhost Keepalived_vrrp[6917]: WARNING - default user 'keepalived_script' for script execution does not exist - please create. Dec 30 01:42:09 localhost Keepalived_vrrp[6917]: SECURITY VIOLATION - scripts are being executed but script_security not enabled. Dec 30 01:42:09 localhost Keepalived_vrrp[6917]: VRRP_Instance(VI_1) removing protocol VIPs. Dec 30 01:42:09 localhost Keepalived_vrrp[6917]: Using LinkWatch kernel netlink reflector... Dec 30 01:42:09 localhost Keepalived_vrrp[6917]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)] Dec 30 01:42:09 localhost Keepalived_vrrp[6917]: VRRP_Script(chk_tomcat) succeeded Dec 30 01:42:10 localhost Keepalived_vrrp[6917]: VRRP_Instance(VI_1) Transition to MASTER STATE Dec 30 01:42:12 localhost Keepalived_vrrp[6917]: VRRP_Instance(VI_1) Entering MASTER STATE Dec 30 01:42:12 localhost Keepalived_vrrp[6917]: VRRP_Instance(VI_1) setting protocol VIPs. Dec 30 01:42:12 localhost Keepalived_vrrp[6917]: Sending gratuitous ARP on ens33 for 192.168.126.200BACKUP節點的日志
Dec 30 01:42:09 localhost Keepalived_vrrp[9173]: /etc/keepalived/tomcat_check.sh exited with status 127 Dec 30 01:42:12 localhost Keepalived_vrrp[9173]: VRRP_Instance(VI_1) Received advert with higher priority 101, ours 94 Dec 30 01:42:12 localhost Keepalived_vrrp[9173]: VRRP_Instance(VI_1) Entering BACKUP STATE Dec 30 01:42:12 localhost Keepalived_vrrp[9173]: VRRP_Instance(VI_1) removing protocol VIPs.Questions
exited due to signal 15
/var/log/messages 日志提示:/etc/keepalived/check_nginx.sh exited due to signal 15
調整如下參數
interval 5 #監控腳本的執行時間要大于advert_int advert_int 2 #心跳檢查間隔時間notify_master notify_backup未生效
檢查 getenforce
getenforce 如果 開啟的話,關閉 執行 setenforce 0
總結
以上是生活随笔為你收集整理的Keepalived - Keepalived 实现 tomcat双机热备的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache ZooKeeper -从初
- 下一篇: 深入理解分布式技术 - 理论基石 CAP