昨天因为主备机切换,造成了跪机的大事故。。
操作过程是这样的,先发现日志不对,一直在报redis连接错误,而且出现了有些页面数据丢失。头儿就说叫我重启解决,那照理正式环境白天是不可以重启的,那就只能主备机切换了。谁知我主机一切,备机没起来不说,ssh都连不上了。。我想直接启服务都没办法启。。
猜测之下,我第一个怀疑是双机热备出现问题,所以先去/var/log/messages下看双机热备的日志了,但是没看出来有啥不对。。(后来才发现这个就是关键所在)
在双击热备的日志里看到了apache的目录,因为吃过一次启错apache的亏,所以我这次果断去找了这个apache是不是项目运行的apache。。才找到一半,就被叫过去了。。。
老大一直纠结连不上ssh,最后用测试服务器直接连。连上以后第一个问题是要重启服务,其实我已经重启过了,但是根本起不来,找老大解决帮忙,说是jdk编译版本的问题。web容器用的是tomcat8,项目代码用jdk1.6编译的,我觉得没啥问题啊。后来一看服务器上装的jdk版本是1.6和1.8两个,用的是1.6。改成1.8以后再重启tomcat,还是起不来,还是包jdk版本问题。
然后换成老版本的tomcat也解决不了。唉,想也不行啊!!如果真的是tomcat的问题,那我以前切换服务器早就会发现的啊!!
这时候发现连apache都启动不了。看了双击热备启动tomcat和apache的脚本,发现启动apache的脚本有问题,启动的apache路径不对。我重新写了apache的启动脚本
#!/bin/bash
# Startup script for Apache
#set -x
# Source function library.
. /etc/rc.d/init.d/functions
start_apache="/opt/apache2.2/bin/apachectl -k start"
stop_apache="/opt/apache2.2/bin/apachectl -k stop"
start() {
echo -n "Starting apache: "
${start_apache}
sleep 5
echo "apache start ok."
}
stop() {
echo -n "Shutting down apache: "
${stop_apache}
sleep 5
processName=httpd
killpidList=`ps -A --format='%p%P%C%x%a' -w --sort pid|grep "$processName"|grep -v grep|grep -v "$$" | awk '{ print $1}'`
for curpid in ${killpidList} ; do
echo "kill -9 ${curpid}"
kill -9 ${curpid}
done
echo "apache stop ok."
}
status() {
ps -ef|grep httpd |grep -vE 'sh|vi|grep'
if [ $? -eq 0 ];then
echo "Apache running!"
exit 0
else
echo "Apache stopped!"
exit 1
fi
}
# See how we were called
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 10
start
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0
手动用ifconfig命令配了地址以后,总算是可以了用双机热备切换服务了。
ifconfig bond0:1 192.168.1.17 netmask 255.255.255.0 up
但是又发现一个系统时间的问题,主机时间比备机晚了20分钟。用下面的命令修改了系统时间
date -s 时间 这个命令只是设置了时间,但是没有真的修改
hwclock -w 这个命令才是真的生效
总算是解决了,服务恢复,耗时3小时。。。代价是今天早上的一篇检讨。。。
后续有时间再了解一下怎么用ha托管应用的。