歡迎光臨
每天分享高質量文章

keepalived 實現 Tomcat 服務雙機熱備

來源:ImportNew

ID:importnew

1. 規劃

1.1伺服器環境規劃

負載伺服器master及WEB伺服器1真實IP:10.10.195.53

負載伺服器backup及WEB伺服器2真實IP:10.10.195.190

負載伺服器虛擬ip:10.10.195.212

1.2 軟體環境規劃

作業系統:Red Hat Enterprise Linux Server release 5.6 (Tikanga)

keepalived:keepalived-1.2.19

Java:jdk-1.7.0_79

Tomcat:apache-tomcat-7.0.64

2. 負載伺服器配置

這裡只敘述如何安裝配置keepalived,至於java以及tomcat的安裝及配置,這裡不贅述。

2.1 安裝keepalived

[~]tar -zxvf keepalived-1.2.19.tar.gz  

[~] cd keepalived-1.2.19  

[keepalived-1.2.19] ./configure –prefix=/usr/local/keepalived –disable-fwmark  

#(如果直接輸入./configure有可能報錯:configure:error: No SO_MARK declaration in essay-headers)  

[keepalived-1.2.19] make 

[keepalived-1.2.19] make install

2.2 配置keepalived服務

[keepalived-1.2.19] cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 

[keepalived-1.2.19] cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 

[keepalived-1.2.19] cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/  

[keepalived-1.2.19] mkdir /etc/keepalived 

[keepalived-1.2.19] cp /usr/local/keepalived/etc/keepalived/keepalived.conf/etc/keepalived/ 

[keepalived-1.2.19] chkconfig –add keepalived  

[keepalived-1.2.19] chkconfig keepalived on

重啟\啟動\關閉\檢視狀態keepalived

service keepalived restart

service keepalived start

service keepalived stop

service keepalived status

2.3 配置keepalived.conf檔案

[~]mv /etc/keepalived/keepalived.conf/etc/keepalived/keepalived.conf.bak  

[~]vi /etc/keepalived//keepalived.conf

主備機的keepalived.conf檔案大致相同,只是註意紅色標註的地方。

主機配置:

global_defs {  

   router_id NodeA  

}  

vrrp_script chk_http_port {  

   script “/opt/tomcat.pid”  

   interval 5  

   weight 2  

}  

vrrp_instance VI_1 {  

   state MASTER  

   interface eth0  

   virtual_router_id 52  

   priority 150  

   advert_int 1  

 

   authentication {  

       auth_type PASS  

       auth_pass 1111  

    }  

 

   track_script {  

       chk_http_port  

    }  

 

   virtual_ipaddress {  

       10.10.195.212  

    }  

}

備機配置:

global_defs {  

   router_id NodeB  

}  

vrrp_script chk_http_port {  

   script “/opt/tomcat.pid”  

   interval 5  

   weight 2  

}  

vrrp_instance VI_1 {  

   state BACKUP  

   interface eth0  

   virtual_router_id 52  

   priority 100  

   advert_int 1  

 

   authentication {  

       auth_type PASS  

       auth_pass 1111  

    }  

 

   track_script {  

       chk_http_port  

    }  

 

   virtual_ipaddress {  

       10.10.195.212  

    }  

}

2.4配置/opt/tomcat.pid

#!/bin/bash  

#description: check tomcat service anddecide whether stop the keepalived or not  

#edited by zzh: 2015-10-14  

 

CATALINA_HOME=/users/shr/apache-tomcat-7.0.64  

JAVA_HOME=/users/shr/util/JavaDir/jdk 

export CATALINA_HOME  

export JAVA_HOME  

 

ps ax –width=1000 | grep”org.apache.catalina.startup.Bootstrap start” | grep -v”grep” | awk ‘{printf $1 ” “}’ | wc | awk ‘{print $2}’ >tomcat_process_count.txt  

read line < tomcat_process_count.txt  

 

start_tomcat=$CATALINA_HOME/bin/startup.sh  

 

if [ ${line} -lt 1 ]  

then 

       echo -n “===Starting tomcat===:” 

       ${start_tomcat}  

       # :sudo service tomcat start  

       echo “===tomcat start ok.===” 

       sleep 3  

 

       # check the tomcat status.  

       ps ax –width=1000 | grep “org.apache.catalina.startup.Bootstrapstart” | grep -v “grep” | awk ‘{printf $1 ” “}’ | wc |awk ‘{print $2}’ > tomcat_process_count.txt  

       read line2 < tomcat_process_count.txt  

       if [ ${line2} -lt 1 ]  

       then 

                sudo service keepalived stop  

       fi 

fi 

rm tomcat_process_count.txt  

#shell end.

3. 日誌檢視

3.1 正常啟動

輸入tail -f /var/log/messages檢視啟動keepalived日誌:

(MASTER:10.10.195.53)

Sep 29 15:49:16 shr Keepalived[5536]:Starting Keepalived v1.2.19 (09/21,2015)  

Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Netlink reflector reports IP 10.10.195.53added  

Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Netlink reflector reports IP 10.10.195.53added  

Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Registering Kernel netlink reflector  

Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Registering Kernel netlink command channel  

Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Opening file’/etc/keepalived/keepalived.conf’.  

Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Configuration is using : 6572 Bytes  

Sep 29 15:49:16 shr Keepalived[5537]:Starting Healthcheck child process, pid=5538  

Sep 29 15:49:16 shr Keepalived_healthcheckers[5538]:Using LinkWatch kernel netlink reflector…  

Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.53 added  

Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.53 added  

Sep 29 15:49:16 shr Keepalived[5537]:Starting VRRP child process, pid=5539  

Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Registering Kernel netlink reflector  

Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Registering Kernel netlink command channel  

Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Registering gratuitous ARP shared channel  

Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Opening file ‘/etc/keepalived/keepalived.conf’.  

Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Configuration is using : 36541 Bytes  

Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Using LinkWatch kernel netlink reflector…  

Sep 29 15:49:16 shr Keepalived_vrrp[5539]:VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]  

Sep 29 15:49:17 shr Keepalived_vrrp[5539]:VRRP_Instance(VI_1) Transition to MASTER STATE  

Sep 29 15:49:17 shr Keepalived_vrrp[5539]:VRRP_Instance(VI_1) Received lower prio advert, forcing new election  

Sep 29 15:49:18 shr Keepalived_vrrp[5539]:VRRP_Instance(VI_1) Entering MASTER STATE  

Sep 29 15:49:18 shr Keepalived_vrrp[5539]:VRRP_Instance(VI_1) setting protocol VIPs.  

Sep 29 15:49:18 shr Keepalived_vrrp[5539]:VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 10.10.195.212  

Sep 29 15:49:18 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.212 added  

Sep 29 15:49:18 shrKeepalived_healthcheckers[5538]: Netlink reflector reports IP 10.10.195.212added  

Sep 29 15:49:23 shr Keepalived_vrrp[5539]:VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 10.10.195.212

(BACKUP:10.10.195.190)

Sep 29 15:46:25 server1 Keepalived[18218]:Starting Keepalived v1.2.19 (09/25,2015)  

Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Netlink reflector reports IP 10.10.195.190added  

Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Netlink reflector reports IP 10.10.195.190added  

Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Registering Kernel netlink reflector  

Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Registering Kernel netlink command channel  

Sep 29 15:46:25 server1 Keepalived_healthcheckers[18220]:Opening file ‘/etc/keepalived/keepalived.conf’.  

Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Configuration is using : 6682 Bytes  

Sep 29 15:46:25 server1 Keepalived[18219]:Starting Healthcheck child process, pid=18220  

Sep 29 15:46:25 server1 Keepalived[18219]:Starting VRRP child process, pid=18221  

Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Netlink reflector reports IP 10.10.195.190 added  

Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Netlink reflector reports IP 10.10.195.190 added  

Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Using LinkWatch kernel netlink reflector…  

Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Registering Kernel netlink reflector  

Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Registering Kernel netlink command channel  

Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Registering gratuitous ARP shared channel  

Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Opening file ‘/etc/keepalived/keepalived.conf’.  

Sep 29 15:46:25 server1 Keepalived_vrrp[18221]:Configuration is using : 36651 Bytes  

Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Using LinkWatch kernel netlink reflector…  

Sep 29 15:46:25 server1Keepalived_vrrp[18221]: VRRP_Instance(VI_1) Entering BACKUP STATE  

Sep 29 15:46:25 server1 Keepalived_vrrp[18221]:VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

3.2 主備切換

l  當在主機(MASTER:10.10.195.53)中輸入 sudoservice keepalived stop,此時就會進行主備切換,主機切換成備機。

主機(MASTER:10.10.195.53)輸出如下

Oct 14 13:25:09 shr Keepalived_vrrp[26683]:VRRP_Instance(VI_1) sending 0 priority  

Oct 14 13:25:09 shr Keepalived_vrrp[26683]:VRRP_Instance(VI_1) removing protocol VIPs.  

Oct 14 13:25:09 shrKeepalived_healthcheckers[26682]: Netlink reflector reports IP 10.10.195.212removed  

Oct 14 13:25:09 shr Keepalived[26681]:Stopping Keepalived v1.2.19 (09/21,2015)

備機(BACKUP:10.10.195.190)輸出如下

Oct 14 13:19:58 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) Transition to MASTER STATE  

Oct 14 13:19:59 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) Entering MASTER STATE  

Oct 14 13:19:59 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) setting protocol VIPs.  

Oct 14 13:19:59 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for10.10.195.212  

Oct 14 13:19:59 server1 Keepalived_healthcheckers[30889]:Netlink reflector reports IP 10.10.195.212 added  

Oct 14 13:19:59 server1Keepalived_vrrp[30890]: Netlink reflector reports IP 10.10.195.212 added  

Oct 14 13:20:04 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for10.10.195.212

l  當在主機(MASTER:10.10.195.53)中輸入sudoservice keepalived start,此時就會切換成主機。備機(BACKUP:10.10.195.190)輸出如下資訊:

Oct 14 13:25:11 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) Received higher prio advert  

Oct 14 13:25:11 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) Entering BACKUP STATE  

Oct 14 13:25:11 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) removing protocol VIPs.  

Oct 14 13:25:11 server1Keepalived_healthcheckers[30889]: Netlink reflector reports IP 10.10.195.212removed  

Oct 14 13:25:11 server1Keepalived_vrrp[30890]: Netlink reflector reports IP 10.10.195.212 removed

4. 檢視虛擬ip

可以透過ip add show命令檢視新增的虛擬ip:

[shr@shr bin]$ip add show  

1: lo: mtu16436 qdisc noqueue  

   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  

   inet 127.0.0.1/8 scope host lo  

2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000  

   link/ether 00:0c:29:6b:f2:a8 brd ff:ff:ff:ff:ff:ff  

   inet 10.10.195.53/24 brd 10.10.195.255 scope global eth0  

   inet 10.10.195.212/32scope global eth0

5. 常見錯誤

5. 1常見錯誤一:

/var/log/messages has thousands of errorslike this:  

 

Jun 28 09:18:32 rust Keepalived_vrrp:receive an invalid ip number count  

associated with VRID!  

Jun 28 09:18:32 rust Keepalived_vrrp: bogusVRRP packet received on eth0 !!!  

Jun 28 09:18:32 rust Keepalived_vrrp:VRRP_Instance(VI_1) Dropping received  

VRRP packet…  

 

The backup director starts up, but doesn’tlisten on the virtual addresses  

at all. Its /var/log/messages has thousands of errors like this:  

 

Jun 28 06:25:05 stye Keepalived_vrrp:receive an invalid ip number count  

associated with VRID!  

Jun 28 06:25:05 stye Keepalived_vrrp: bogusVRRP packet received on eth0 !!!  

Jun 28 06:25:05 stye Keepalived_vrrp:VRRP_Instance(VI_1) ignoring received  

advertisment…

解決方法:

改變配置檔案/etc/keepalived/keepalived.conf中virtual_router_id為另一個值即可。

(changed the vrid to another number and it worked fine).

5.2 常見錯誤二:

主機執行到VRRP_Instance(VI_1) Entering BACKUP STATE之後沒有執行VRRP_Instance(VI_1)setting protocol VIPs。

解決方法:

可能是配置檔案keepalived.conf中{左邊沒有空格。

linux新增tomcat服務

在/etc/init.d中輸入 sudo vim tomcat

指令碼具體內容如下:

#!/bin/bash  

#chkconfig: 2345 10 90  

#description: Starts and Stops the tomcatdaemon  

#edited by ZZH: 2015-10-14  

 

CATALINA_HOME=/users/shr/apache-tomcat-7.0.64  

JAVA_HOME=/users/shr/util/JavaDir/jdk 

export CATALINA_HOME  

export JAVA_HOME  

 

start_tomcat=$CATALINA_HOME/bin/startup.sh  

stop_tomcat=$CATALINA_HOME/bin/shutdown.sh  

 

if [ ! -f $CATALINA_HOME/bin/catalina.sh ]  

then 

         echo”===Tomcat is not available.===” 

         exit 

fi 

 

start()  

{  

         echo-n “===Starting tomcat===:” 

         ${start_tomcat}  

         echo”===tomcat start ok.===” 

}  

 

stop()  

{  

         echo-n “===Shutting down tomcat===:” 

         ${stop_tomcat}  

         echo”===tomcat stop ok.===” 

}  

 

status()  

{  

         ps ax –width=1000 | grep”org.apache.catalina.startup.Bootstrap start” | grep -v”grep” | awk ‘{printf $1 ” “}’ | wc | awk ‘{print $2}’> tomcat_process_count.txt  

         readline < tomcat_process_count.txt  

         rmtomcat_process_count.txt  

         if[ $line -gt 0 ]  

                   then 

                            echo-n “tomcat ( pid = ” 

                            ps ax –width=1000 | grep”org.apache.catalina.startup.Bootstrap start” | grep -v”grep” | awk ‘{printf $1 ” “}’ | awk ‘{print $1}’> tomcat_process_pid.txt  

                            readpid < tomcat_process_pid.txt  

                            rmtomcat_process_pid.txt  

                            echo-n $pid  

                            echo-n “) is running…” 

                            echo 

                   else 

                            echo”tomcat is stopped” 

         fi 

}  

 

case “$1” in 

         start)  

                   start  

                   ;;  

         stop)  

                   stop  

                   ;;  

         restart)  

                   stop  

                   sleep1  

                   start  

                   ;;  

         status)  

                   status  

                   ;;  

         *)  

                   echo”Usage:$0 {start|stop|restart}” 

                   exit1  

esac  

 

exit 0  

# shell end.

在終端輸入:

sudo chmod 755 tomcat  

sudo chkconfig –add tomcat

tomcat 啟動 service tomcatstart

tomcat 關閉 service tomcatstop

tomcat 重啟 service tomcatrestart

tomcat狀態檢視 service tomcatstatus

來源:朱小廝,

blog.csdn.net/u013256816/article/details/49127995

《Linux雲端計算及運維架構師高薪實戰班》2018年09月17日即將開課中,120天衝擊Linux運維年薪30萬,改變速約~~~~

    *宣告:推送內容及圖片來源於網路,部分內容會有所改動,版權歸原作者所有,如來源資訊有誤或侵犯權益,請聯絡我們刪除或授權事宜。

    – END –


    更多Linux好文請點選【閱讀原文】

    ↓↓↓

    贊(0)

    分享創造快樂