使用keepalived实现tomcat的高可用

350 阅读2分钟

首先准备两个脚本:

第一个


#!/bin/bash
# keepalived for tomcat
# edited by sky: 2023-03-04

while true; do
  PS_NUM=`ps -C java --no-headers |wc -l`
  if [ $PS_NUM -eq 0 ]; then
    /etc/init.d/keepalived stop
  fi
  sleep 5
done

##此脚本用于自动检测tomcat存活状态,tomcat关闭时会自动keepalived

我们可以使用nohup命令将此脚本一直后台运行并不返回值:nohup /opt/tomcat.pid > /dev/null 2>&1 &

第二个

#!/bin/bash
# Tomcat 脚本

# 定义常量
TOMCAT_HOME="/app/tomcat"
JAVA_HOME="/usr/local/jdk1.7.0_80"
STARTUP_SCRIPT="$TOMCAT_HOME/bin/startup.sh"
SHUTDOWN_SCRIPT="$TOMCAT_HOME/bin/shutdown.sh"

# 导出常量
export TOMCAT_HOME JAVA_HOME

# 启动 Tomcat
function start() {
  echo "Starting Tomcat..."
  if ! $STARTUP_SCRIPT >/dev/null 2>&1; then
    echo "Error: Tomcat could not be started."
    exit 1
  fi
  echo "Tomcat started successfully."
}

# 停止 Tomcat
function stop() {
  echo "Shutting down Tomcat..."
  if ! $SHUTDOWN_SCRIPT >/dev/null 2>&1; then
    echo "Error: Tomcat could not be stopped."
    exit 1
  fi
  echo "Tomcat stopped successfully."
}

# 检查 Tomcat 运行状态
function status() {
  local ps_num=$(ps -C java --no-headers | wc -l)
  if [[ $ps_num -gt 0 ]]; then
    local pid=$(ps -C java --no-headers | awk '{print $1}')
    echo "Tomcat (pid=$pid) is running."
  else
    echo "Tomcat is stopped."
  fi
}

# 处理命令行参数
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    sleep 1
    start
    ;;
  status)
    status
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit 0


##此脚本可以控制tomcat服务器启动与停止

服务器规划:

web主:192.168.184.103

web备:192.168.184.102 (stanby)

安装:

 yum install openssl-devel libnl3-devel ipset-devel iptables-devel libnfnetlink-devel
 wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
 tar zxf keepalived-1.3.5.tar.gz
 cd keepalived-1.3.5
 ./configure --prefix=/usr/local/keepalived --with-init=SYSV  --不指定的话,默认不生成RECL6的启动脚本
 make && make install


  [root@app01 keepalived-1.3.5]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  [root@app01 keepalived-1.3.5]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  [root@app01 keepalived-1.3.5]# cp -p /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
  [root@app01 keepalived-1.3.5]# mkdir /etc/keepalived
  [root@app01 keepalived-1.3.5]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
  [root@app01 local]# chkconfig --add keepalived
  [root@app01 local]# chkconfig --list keepalived
  [root@app01 local]# chkconfig  keepalived on
  [root@app01 local]# chmod +x /etc/init.d/keepalived
****以上部分,在两台机器上的操作完全相同
-----------------------------------




修改配置文件:

! Configuration File for keepalived

global_defs {
   notification_email {
   root@localhost
}
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_http_port {
     script "/opt/tomcat.pid"
     interval 1
     weight -2
}


vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

track_interface {
ens33
}

track_script {
chk_httpp_port
}

    virtual_ipaddress {
        192.168.184.200
    }
}

##以上部分,在两台机器上的操作完全相同##



在两台机器上分别启动tomcat和keepalived   

 service tomcat start  

 service keepalived start

 

测试:       

可关闭master上的tomcat, 则可以看到vip会漂移到backup服务器, 启动master的tomcat服务器,然后再重启keepalived,则vip会自动漂移到master

检查vip是否在主服务器上     

ip  addr

vip切换及恢复原则:   

1、切换:master服务器的tomcat服务停止,则master上的keepalived会自动停止, vip漂移到backup服务器   

2、恢复: master服务器修复完毕后, 请分别启动tomcat和keepalived,则vip会自动漂移到master服务器

77196f654d54323923994cd6fc77340.png

e0602b8cf3c2965e4e0099249cbbc72.png