#!/bin/bash
#用途：用于双机部署后的自动检查和手动检查
#注意：检查完后自行提高docker ps查看服务是否正常运行
#作者：叶海淋
#联系方式：13149093270
echo -e "\033[32m *****双机部署检查开始***** \033[0m"
echo -e "\033[32m ******请选择检查方法****** \033[0m"
cat <<eof
**********************
**    1.自动输入    **
**    2.手动输入    **
**********************
eof
echo -e "\033[31m 自动输入需要存在cipher.txt文件！\033[0m"
read -p "请选择检查方法(1或2):" state
while [[ $state -gt 2 ]] || [[ $state  -lt 1 ]]
do
echo -e "\033[31m 请输入正确的整数（1或2）！！！\033[0m"
cat <<eof
*************************
**      1.自动输入     **
**      2.手动输入     **
*************************
eof
echo -e "\n\033[31m 自动输入需要存在cipher.txt文件！\033[0m"
read -p "请选择检查方法(1或2):" state
done
case $state in
1|master)
    echo -e "\033[32m *****双机部署检查开始***** \033[0m"
cat <<eof
********************
**    1.主机      **
**    2.备机      **
********************
eof
read -p "请选择该机的主备状态(1或2):" state
while [[ $state -gt 2 ]] || [[ $state  -lt 1 ]]
do
echo -e "\n\033[31m 请输入正确的整数（1或2）！！！\033[0m"
cat <<eof
********************
**    1.主机      **
**    2.备机      **
********************
eof
read -p "请选择该机的主备状态(1或2):" state
done
#主备IP
Host=`ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' |awk 'NR==1 {print}'`
Standby=`cat /etc/rsyncd.conf|awk -F" = " 'NR==13{print $2}'`
vip=$(ip a | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' | awk 'NR==2{print}')
new=`cat /root/cipher.txt |awk -F ':' 'NR==2{print $2}'`
redis=`cat /root/cipher.txt |awk -F ':' 'NR==8{print $2}'`

#数据库检查
a=`docker exec mysql  mysql -uroot -p$new  -e  "show slave status\G" 2>/dev/null |awk -F ":" 'NR==12{print $2}'`
b=`docker exec mysql  mysql -uroot -p$new -e  "show slave status\G" 2>/dev/null |awk -F ":" 'NR==13{print $2}'`
if [[ "$b" = *Yes* ]] && [[ $a = $b ]]
then 
   echo -e "\n\033[32m 数据库组件安装成功 ！\033[0m"
else 
   echo -e "\n\033[31m 数据库组件安装失败！！！\033[0m"
fi
#redis检查
#主机
case $state in
1|master)
redis_role=`docker exec redis redis-cli -a $redis -e info replication 2>/dev/null| awk -F ":" 'NR==2{print $2}'`
redis_connected=`docker exec redis redis-cli -a $redis -e info replication 2>/dev/null|awk -F ":" 'NR==3{print $2}'| sed 's/[^0-9]//g'`
if [[ $redis_connected -ge 1 ]] && [[ "$redis_role" == *master* ]]
then
    echo -e "\n\033[32m redis主从同步成功！\033[0m"
else
    echo -e  "\n\033[31m redis主从同步失败！！！\033[0m"
fi
   ;;
2|slave)  
#备机
redis_role=`docker exec redis redis-cli -a $redis -e info replication 2>/dev/null| awk -F ":" 'NR==2{print $2}'`
redis_connected=`docker exec redis redis-cli -a $redis -e info replication 2>/dev/null|awk -F ":" 'NR==5{print $2}'`
if [[ "$redis_connected" == *up* ]] && [[ "$redis_role" == *slave* ]]
then
    echo -e "\n\033[32m redis主从同步成功！\033[0m"
else
    echo -e  "\n\033[31m redis主从同步失败！！！\033[0m"
fi
 ;;
   *)
echo -e "\033[31m 请输入正确的状态码！！！ \033[0m"
esac

#keepalived检查
keepalived_status=`systemctl status keepalived |grep running`
if [[ "$keepalived_status" == *running* ]]
then
    echo -e "\n\033[32m keepalived服务启动成功！ \033[0m"
else
    echo -e "\n\033[31m keepalived服务启动失败！！！\033[0m"
fi
sleep 30s
case $state in
1|master)
keepalived_vip=$(ip a | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' | awk 'NR==2{print}')
if [ "$keepalived_vip" = "$vip" ]
then
    echo -e "\n\033[32m 虚拟IP配置成功！\033[0m"
else
    echo  -e "\n\033[31m 虚拟IP配置失败！！！\033[0m"
fi
   ;;
2|slave)  
 echo -e "\n\033[32m 虚拟IP在主机显示 \033[0m"
 docker-compose -f /data/docker-compose.yml up -d >/dev/null 2>&1
 sleep 60s
 ;;
   *)
esac
#安全管理中心容器，订购页面容器检查
dock=`docker ps`
#privatecloud
 if [[ "$dock" == *8899* ]] 
then
    echo -e "\n\033[32m privatecloud服务配置成功！\033[0m"
else
    echo -e "\n\033[31m privatecloud服务配置失败！！！\033[0m"
 fi
#securemanagement
  if [[ "$dock" == *8888* ]] 
then
    echo -e "\n\033[32m securemanagement服务配置成功！\033[0m"
else
    echo -e "\n\033[31m securemanagement服务配置失败！！！\033[0m"
  fi

#json.json文件检查
file="/data/secureManagement/share/json.json"
if [ -f "$file" ]; then
   echo -e "\n\033[32m json文件存在 \033[0m"
else
   echo -e "\n\033[32m json文件不存在！\033[0m"
fi

#nginx检查
nginxs=`docker ps |grep nginx |awk '{print $1; exit}'`
nginx_run=`docker exec $nginxs service nginx status`
   if [[ "$dock" == *443* ]] && [[ "$nginx_run" == *running* ]]
then
    echo -e "\n\033[32m nginx服务配置成功！\033[0m"
else
    echo -e "\n\033[31m nginx服务配置失败！！！\033[0m"
   fi
#rsync检查
sleep 60s
case $state in
1|master)
#主机
rsync -av --delete rsync://aqzq@$Standby/share /data/secureManagement/share/ --password-file=/etc/rsyncd.password>/dev/null
if [[ $? = 0  ]]
then
    echo -e "\n\033[32m rsync服务配置成功！\033[0m"
else
    echo -e "\n\033[31m rsync服务配置失败！！！\033[0m"
fi
   ;;
2|slave)  
#备机
rsync -av --delete rsync://aqzq@$Host/share /data/secureManagement/share/ --password-file=/etc/rsyncd.password>/dev/null
if [[ $? = 0  ]]
then
    echo -e  "\n\033[32m rsync服务配置成功！\033[0m"
else
    echo -e "\n\033[31m rsync服务配置失败！！！\033[0m"
fi
 ;;
   *)
esac
   ;;
2|slave)  
echo -e "\033[32m *****双机部署检查开始***** \033[0m"
cat <<eof
********************
**    1.主机      **
**    2.备机      **
********************
eof
read -p "请选择该机的主备状态(1或2):" state
while [[ $state -gt 2 ]] || [[ $state  -lt 1 ]]
do
echo -e "\n\033[31m 请输入正确的整数（1或2）！！！\033[0m"
cat <<eof
********************
**    1.主机      **
**    2.备机      **
********************
eof
read -p "请选择该机的主备状态(1或2):" state
done
#主备IP
echo -e "\033[44;37m ***************************** \033[0m"
read -p "请输入主机的IP: " Host
read -p "请输入备机的IP: " Standby
read -p "请设置虚拟的IP: " vip
echo -n "请输入数据库root密码: "
stty -echo
read new
echo
echo -n "请输入redis的密码: "
read redis
echo
echo -e "\033[44;37m ***************************** \033[0m"

#数据库检查
a=`docker exec mysql  mysql -uroot -p$new  -e  "show slave status\G" 2>/dev/null |awk -F ":" 'NR==12{print $2}'`
b=`docker exec mysql  mysql -uroot -p$new -e  "show slave status\G" 2>/dev/null |awk -F ":" 'NR==13{print $2}'`
if [[ "$b" = *Yes* ]] && [[ $a = $b ]]
then 
   echo -e "\n\033[32m 数据库组件安装成功 ！\033[0m"
else 
   echo -e "\n\033[31m 数据库组件安装失败！！！\033[0m"
fi
#redis检查
#主机
case $state in
1|master)
redis_role=`docker exec redis redis-cli -a $redis -e info replication 2>/dev/null| awk -F ":" 'NR==2{print $2}'`
redis_connected=`docker exec redis redis-cli -a $redis -e info replication 2>/dev/null|awk -F ":" 'NR==3{print $2}'| sed 's/[^0-9]//g'`
if [[ $redis_connected -ge 1 ]] && [[ "$redis_role" == *master* ]]
then
    echo -e "\n\033[32m redis主从同步成功！\033[0m"
else
    echo -e  "\n\033[31m redis主从同步失败！！！\033[0m"
fi
   ;;
2|slave)  
#备机
redis_role=`docker exec redis redis-cli -a $redis -e info replication 2>/dev/null| awk -F ":" 'NR==2{print $2}'`
redis_connected=`docker exec redis redis-cli -a $redis -e info replication 2>/dev/null|awk -F ":" 'NR==5{print $2}'`
if [[ "$redis_connected" == *up* ]] && [[ "$redis_role" == *slave* ]]
then
    echo -e "\n\033[32m redis主从同步成功！\033[0m"
else
    echo -e  "\n\033[31m redis主从同步失败！！！\033[0m"
fi
 ;;
   *)
echo -e "\033[31m 请输入正确的状态码！！！ \033[0m"
esac

#keepalived检查
keepalived_status=`systemctl status keepalived |grep running`
if [[ "$keepalived_status" == *running* ]]
then
    echo -e "\n\033[32m keepalived服务启动成功！ \033[0m"
else
    echo -e "\n\033[31m keepalived服务启动失败！！！\033[0m"
fi
sleep 30s
case $state in
1|master)
keepalived_vip=$(ip a | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}' | awk 'NR==2{print}')
if [ "$keepalived_vip" = "$vip" ]
then
    echo -e "\n\033[32m 虚拟IP配置成功！\033[0m"
else
    echo  -e "\n\033[31m 虚拟IP配置失败！！！\033[0m"
fi
   ;;
2|slave)  
 echo -e "\n\033[32m 虚拟IP在主机显示 \033[0m"
  docker-compose -f /data/docker-compose.yml up -d >/dev/null 2>&1
 sleep 60s
 ;;
   *)

esac
#安全管理中心容器，订购页面容器检查
dock=`docker ps`
#privatecloud
 if [[ "$dock" == *8899* ]] 
then
    echo -e "\n\033[32m privatecloud服务配置成功！\033[0m"
else
    echo -e "\n\033[31m privatecloud服务配置失败！！！\033[0m"
 fi
#securemanagement
  if [[ "$dock" == *8888* ]] 
then
    echo -e "\n\033[32m securemanagement服务配置成功！\033[0m"
else
    echo -e "\n\033[31m securemanagement服务配置失败！！！\033[0m"
  fi

#json.json文件检查
file="/data/secureManagement/share/json.json"
if [ -f "$file" ]; then
   echo -e "\n\033[32m json文件存在 \033[0m"
else
   echo -e "\n\033[32m json文件不存在！\033[0m"
fi

#nginx检查
nginxs=`docker ps |grep nginx |awk '{print $1; exit}'`
nginx_run=`docker exec $nginxs service nginx status`
   if [[ "$dock" == *443* ]] && [[ "$nginx_run" == *running* ]]
then
    echo -e "\n\033[32m nginx服务配置成功！\033[0m"
else
    echo -e "\n\033[31m nginx服务配置失败！！！\033[0m"
   fi
#rsync检查
sleep 60s
case $state in
1|master)
#主机
rsync -av --delete rsync://aqzq@$Standby/share /data/secureManagement/share/ --password-file=/etc/rsyncd.password>/dev/null
if [[ $? = 0  ]]
then
    echo -e "\n\033[32m rsync服务配置成功！\033[0m"
else
    echo -e "\n\033[31m rsync服务配置失败！！！\033[0m"
fi
   ;;
2|slave)  
#备机
rsync -av --delete rsync://aqzq@$Host/share /data/secureManagement/share/ --password-file=/etc/rsyncd.password>/dev/null
if [[ $? = 0  ]]
then
    echo -e  "\n\033[32m rsync服务配置成功！\033[0m"
else
    echo -e "\n\033[31m rsync服务配置失败！！！\033[0m"
fi
 ;;
   *)
esac
 ;;
   *)
esac