首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >keepalived实现Tomcat服务双机热备

keepalived实现Tomcat服务双机热备

作者头像
菲宇
发布于 2019-06-12 15:47:23
发布于 2019-06-12 15:47:23
1.5K0
举报
文章被收录于专栏:菲宇菲宇

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:1.9.19

Tomcat:9

2. 负载服务器配置

这里只叙述如何安装配置keepalived,至于java以及tomcat的安装及配置,这里不赘述。

2.1 安装keepalived

  1. [~]tar -zxvf keepalived-1.2.19.tar.gz
  2. [~] cd keepalived-1.2.19
  3. [keepalived-1.2.19] ./configure --prefix=/usr/local/keepalived --disable-fwmark
  4. #(如果直接输入./configure有可能报错:configure:error: No SO_MARK declaration in headers)
  5. [keepalived-1.2.19] make
  6. [keepalived-1.2.19] make install

2.2 配置keepalived服务

  1. [keepalived-1.2.19] cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  2. [keepalived-1.2.19] cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  3. [keepalived-1.2.19] cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
  4. [keepalived-1.2.19] mkdir /etc/keepalived
  5. [keepalived-1.2.19] cp /usr/local/keepalived/etc/keepalived/keepalived.conf/etc/keepalived/
  6. [keepalived-1.2.19] chkconfig --add keepalived
  7. [keepalived-1.2.19] chkconfig keepalived on

重启\启动\关闭\查看状态keepalived

service keepalived restart

service keepalived start

service keepalived stop

service keepalived status

2.3 配置keepalived.conf文件

  1. [~]mv /etc/keepalived/keepalived.conf/etc/keepalived/keepalived.conf.bak
  2. [~]vi /etc/keepalived//keepalived.conf

主备机的keepalived.conf文件大致相同。

主机配置:

[plain] view plain copy

  1. global_defs {
  2. router_id NodeA
  3. }
  4. vrrp_script chk_http_port {
  5. script "/opt/tomcat.pid"
  6. interval 5
  7. weight 2
  8. }
  9. vrrp_instance VI_1 {
  10. state MASTER
  11. interface eth0
  12. virtual_router_id 52
  13. priority 150
  14. advert_int 1
  15. authentication {
  16. auth_type PASS
  17. auth_pass 1111
  18. }
  19. track_script {
  20. chk_http_port
  21. }
  22. virtual_ipaddress {
  23. 10.10.195.212
  24. }
  25. }

备机配置:

  1. global_defs {
  2. router_id NodeB
  3. }
  4. vrrp_script chk_http_port {
  5. script "/opt/tomcat.pid"
  6. interval 5
  7. weight 2
  8. }
  9. vrrp_instance VI_1 {
  10. state BACKUP
  11. interface eth0
  12. virtual_router_id 52
  13. priority 100
  14. advert_int 1
  15. authentication {
  16. auth_type PASS
  17. auth_pass 1111
  18. }
  19. track_script {
  20. chk_http_port
  21. }
  22. virtual_ipaddress {
  23. 10.10.195.212
  24. }
  25. }

2.4配置/opt/tomcat.pid

  1. #!/bin/bash
  2. #description: check tomcat service anddecide whether stop the keepalived or not
  3. #edited by zzh: 2015-10-14
  4. CATALINA_HOME=/users/shr/apache-tomcat-7.0.64
  5. JAVA_HOME=/users/shr/util/JavaDir/jdk
  6. export CATALINA_HOME
  7. export JAVA_HOME
  8. 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
  9. read line < tomcat_process_count.txt
  10. start_tomcat=$CATALINA_HOME/bin/startup.sh
  11. if [ ${line} -lt 1 ]
  12. then
  13. echo -n "===Starting tomcat===:"
  14. ${start_tomcat}
  15. # :sudo service tomcat start
  16. echo "===tomcat start ok.==="
  17. sleep 3
  18. # check the tomcat status.
  19. ps ax --width=1000 | grep "org.apache.catalina.startup.Bootstrapstart" | grep -v "grep" | awk '{printf $1 " "}' | wc |awk '{print $2}' > tomcat_process_count.txt
  20. read line2 < tomcat_process_count.txt
  21. if [ ${line2} -lt 1 ]
  22. then
  23. sudo service keepalived stop
  24. fi
  25. fi
  26. rm tomcat_process_count.txt
  27. #shell end.

3. 日志查看

3.1 正常启动

输入tail -f /var/log/messages查看启动keepalived日志:

(MASTER:10.10.195.53)

  1. Sep 29 15:49:16 shr Keepalived[5536]:Starting Keepalived v1.2.19 (09/21,2015)
  2. Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Netlink reflector reports IP 10.10.195.53added
  3. Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Netlink reflector reports IP 10.10.195.53added
  4. Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Registering Kernel netlink reflector
  5. Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Registering Kernel netlink command channel
  6. Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Opening file'/etc/keepalived/keepalived.conf'.
  7. Sep 29 15:49:16 shrKeepalived_healthcheckers[5538]: Configuration is using : 6572 Bytes
  8. Sep 29 15:49:16 shr Keepalived[5537]:Starting Healthcheck child process, pid=5538
  9. Sep 29 15:49:16 shr Keepalived_healthcheckers[5538]:Using LinkWatch kernel netlink reflector...
  10. Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.53 added
  11. Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.53 added
  12. Sep 29 15:49:16 shr Keepalived[5537]:Starting VRRP child process, pid=5539
  13. Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Registering Kernel netlink reflector
  14. Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Registering Kernel netlink command channel
  15. Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Registering gratuitous ARP shared channel
  16. Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Opening file '/etc/keepalived/keepalived.conf'.
  17. Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Configuration is using : 36541 Bytes
  18. Sep 29 15:49:16 shr Keepalived_vrrp[5539]:Using LinkWatch kernel netlink reflector...
  19. Sep 29 15:49:16 shr Keepalived_vrrp[5539]:VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
  20. Sep 29 15:49:17 shr Keepalived_vrrp[5539]:VRRP_Instance(VI_1) Transition to MASTER STATE
  21. Sep 29 15:49:17 shr Keepalived_vrrp[5539]:VRRP_Instance(VI_1) Received lower prio advert, forcing new election
  22. Sep 29 15:49:18 shr Keepalived_vrrp[5539]:VRRP_Instance(VI_1) Entering MASTER STATE
  23. Sep 29 15:49:18 shr Keepalived_vrrp[5539]:VRRP_Instance(VI_1) setting protocol VIPs.
  24. Sep 29 15:49:18 shr Keepalived_vrrp[5539]:VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 10.10.195.212
  25. Sep 29 15:49:18 shr Keepalived_vrrp[5539]:Netlink reflector reports IP 10.10.195.212 added
  26. Sep 29 15:49:18 shrKeepalived_healthcheckers[5538]: Netlink reflector reports IP 10.10.195.212added
  27. 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)

  1. Sep 29 15:46:25 server1 Keepalived[18218]:Starting Keepalived v1.2.19 (09/25,2015)
  2. Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Netlink reflector reports IP 10.10.195.190added
  3. Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Netlink reflector reports IP 10.10.195.190added
  4. Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Registering Kernel netlink reflector
  5. Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Registering Kernel netlink command channel
  6. Sep 29 15:46:25 server1 Keepalived_healthcheckers[18220]:Opening file '/etc/keepalived/keepalived.conf'.
  7. Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Configuration is using : 6682 Bytes
  8. Sep 29 15:46:25 server1 Keepalived[18219]:Starting Healthcheck child process, pid=18220
  9. Sep 29 15:46:25 server1 Keepalived[18219]:Starting VRRP child process, pid=18221
  10. Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Netlink reflector reports IP 10.10.195.190 added
  11. Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Netlink reflector reports IP 10.10.195.190 added
  12. Sep 29 15:46:25 server1Keepalived_healthcheckers[18220]: Using LinkWatch kernel netlink reflector...
  13. Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Registering Kernel netlink reflector
  14. Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Registering Kernel netlink command channel
  15. Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Registering gratuitous ARP shared channel
  16. Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Opening file '/etc/keepalived/keepalived.conf'.
  17. Sep 29 15:46:25 server1 Keepalived_vrrp[18221]:Configuration is using : 36651 Bytes
  18. Sep 29 15:46:25 server1Keepalived_vrrp[18221]: Using LinkWatch kernel netlink reflector...
  19. Sep 29 15:46:25 server1Keepalived_vrrp[18221]: VRRP_Instance(VI_1) Entering BACKUP STATE
  20. 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)输出如下

  1. Oct 14 13:25:09 shr Keepalived_vrrp[26683]:VRRP_Instance(VI_1) sending 0 priority
  2. Oct 14 13:25:09 shr Keepalived_vrrp[26683]:VRRP_Instance(VI_1) removing protocol VIPs.
  3. Oct 14 13:25:09 shrKeepalived_healthcheckers[26682]: Netlink reflector reports IP 10.10.195.212removed
  4. Oct 14 13:25:09 shr Keepalived[26681]:Stopping Keepalived v1.2.19 (09/21,2015)

备机(BACKUP:10.10.195.190)输出如下

  1. Oct 14 13:19:58 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) Transition to MASTER STATE
  2. Oct 14 13:19:59 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) Entering MASTER STATE
  3. Oct 14 13:19:59 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) setting protocol VIPs.
  4. Oct 14 13:19:59 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for10.10.195.212
  5. Oct 14 13:19:59 server1 Keepalived_healthcheckers[30889]:Netlink reflector reports IP 10.10.195.212 added
  6. Oct 14 13:19:59 server1Keepalived_vrrp[30890]: Netlink reflector reports IP 10.10.195.212 added
  7. 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)输出如下信息:

  1. Oct 14 13:25:11 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) Received higher prio advert
  2. Oct 14 13:25:11 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) Entering BACKUP STATE
  3. Oct 14 13:25:11 server1Keepalived_vrrp[30890]: VRRP_Instance(VI_1) removing protocol VIPs.
  4. Oct 14 13:25:11 server1Keepalived_healthcheckers[30889]: Netlink reflector reports IP 10.10.195.212removed
  5. Oct 14 13:25:11 server1Keepalived_vrrp[30890]: Netlink reflector reports IP 10.10.195.212 removed

4. 查看虚拟ip

可以通过ip add show命令查看添加的虚拟ip:

  1. [shr@shr bin]$ip add show
  2. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu16436 qdisc noqueue
  3. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  4. inet 127.0.0.1/8 scope host lo
  5. 2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
  6. link/ether 00:0c:29:6b:f2:a8 brd ff:ff:ff:ff:ff:ff
  7. inet 10.10.195.53/24 brd 10.10.195.255 scope global eth0
  8. inet 10.10.195.212/32scope global eth0

5. 常见错误

5. 1常见错误一:

  1. /var/log/messages has thousands of errorslike this:
  2. Jun 28 09:18:32 rust Keepalived_vrrp:receive an invalid ip number count
  3. associated with VRID!
  4. Jun 28 09:18:32 rust Keepalived_vrrp: bogusVRRP packet received on eth0 !!!
  5. Jun 28 09:18:32 rust Keepalived_vrrp:VRRP_Instance(VI_1) Dropping received
  6. VRRP packet...
  7. The backup director starts up, but doesn'tlisten on the virtual addresses
  8. at all. Its /var/log/messages has thousands of errors like this:
  9. Jun 28 06:25:05 stye Keepalived_vrrp:receive an invalid ip number count
  10. associated with VRID!
  11. Jun 28 06:25:05 stye Keepalived_vrrp: bogusVRRP packet received on eth0 !!!
  12. Jun 28 06:25:05 stye Keepalived_vrrp:VRRP_Instance(VI_1) ignoring received
  13. advertisment...<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

解决方法:

改变配置文件/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中{左边没有空格。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年08月27日,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 1. 规划
    • 1.1服务器环境规划
    • 1.2 软件环境规划
  • 2. 负载服务器配置
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档