diff --git a/check_virus/README.md b/check_virus/README.md index 9c31e16..71c574a 100644 --- a/check_virus/README.md +++ b/check_virus/README.md @@ -1,7 +1,19 @@ +# 作用及用法 example: ```yaml - hosts: 10.111.32.155 roles: - {role: check_virus} ``` + + +# 问题 +1. 将 curl, wget 及 base64 保护起来的操作有如下几种方式: + * 计算出当前的命令的 md5 值,将其copy到 criminal 目录 + * 这里的问题就是,第二次执行的时候就会操作错误的命令(即非真正的命令) + * 解决上面的问题的办法是每次都安装一次相关命令(但是这不太可取) + * 或者在控制机上将相关命令copy过去,这个倒是一个不错的方法 + * 需要指定相关命令,如遇到系统版本不同的情况,还得为其准备相应的命令 + * 另外有一点就是即使大版本相同,小版本也可能会有些许变化,不过这个影响应该很小 + diff --git a/check_virus/templates/protect_cmd.sh b/check_virus/templates/protect_cmd.sh index 4c5fd6d..e820e15 100644 --- a/check_virus/templates/protect_cmd.sh +++ b/check_virus/templates/protect_cmd.sh @@ -20,7 +20,10 @@ protect_replacement_args="https://www.baidu.com" real_cmd_basename=$(basename ${real_cmd}) self_basename=$(basename ${0}) -check_real_cmd(){ +check_real_cmd_before_operation(){ + # 运行前检查 + # 环境变量 + # 参数等等 # 判断是否自调用 if [ $0 == ${real_cmd} ];then echo 'exit' @@ -49,9 +52,29 @@ check_real_cmd(){ exit 21 fi } +check_real_cmd(){ + check_real_cmd_before_operation +} + + +check_real_cmd_after_operation(){ + # 运行后检查 + # 对结果进行检查 + : +} +check_real_cmd_front_pipe(){ + # 检查是否在管道前 + # 检查父命令 + : +} +check_real_cmd_behind_pipe(){ + # 检查是否在管道后 + # 检查子命令 + : +} protect_cmd_check(){ check_real_cmd @@ -66,14 +89,23 @@ protect_cmd_check(){ # 或者是其它定义好的命令,比如发送邮件通知等等 for cmd_arg in ${*};do #echo ${cmd_arg} - arg=${cmd_arg#*//} - arg=${arg%%/*} - if [ ${#arg} -gt 50 ];then + local arg_host_without_proto=${cmd_arg#*//} + local arg_host=${arg_host_without_proto%%/*} + local arg_file=${cmd_arg##*/} + if [ ${#arg_host} -gt 50 ];then return 0 fi - if [ ${cmd_arg} == "-m200" ];then + if [[ "${arg_file}" =~ ".sh" ]];then return 0 - fi + fi + if [[ ${cmd_arg} =~ "-m" ]];then + #local m_value=${cmd_arg:2} + local m_value=$(echo ${cmd_arg} | grep -o '[0-9]\{1,\}') + if [ ${m_value} -gt 50 ];then + return 0 + fi + fi + done return 1 } @@ -110,6 +142,6 @@ if protect_cmd_check ${*};then protect_cmd_exec kill_parent_prog >&3 2>&3 else - ${real_cmd} ${*} + ${real_cmd} ${*} |& sed -e "s@${real_cmd}@${0}@" -e "s@${real_cmd_basename}@${self_basename}@" fi {%endraw%} diff --git a/check_virus/templates/protect_cmd_base64.sh b/check_virus/templates/protect_cmd_base64.sh index 295ba4e..e0a3a6f 100644 --- a/check_virus/templates/protect_cmd_base64.sh +++ b/check_virus/templates/protect_cmd_base64.sh @@ -21,6 +21,25 @@ protect_replacement_args="Don't play small smart" real_cmd_basename=$(basename ${real_cmd}) self_basename=$(basename ${0}) +check_real_cmd_behind_pipe(){ + # 检查是否在管道后 + # 检查子命令 + if [ -p /dev/stdout ];then + sibling_process=$(ps -ef | awk -v ppid=$PPID -v mypid=$$ '$3 == ppid && $2 != mypid {print $8}') + for sibling_exe in ${sibling_process};do + if [[ ${s_p_exe} =~ "bash" ]];then + echo "exit" + exit + fi + done + fi +} +check_real_cmd_before_operation(){ + # 运行前检查 + # 环境变量 + # 参数等等 + : +} check_real_cmd(){ # 判断是否自调用 if [ $0 == ${real_cmd} ];then @@ -49,6 +68,7 @@ check_real_cmd(){ echo 'exit' exit 21 fi + check_real_cmd_behind_pipe } protect_cmd_check(){ @@ -70,11 +90,11 @@ protect_cmd_check(){ fi done - cmd_result=$(${real_cmd} ${*}) - if echo "${cmd_result}" | grep -E "echo|curl|xargs|chattr|kill" ;then + cmd_result=$(${real_cmd} ${*} |& sed -e "s@${real_cmd}@${0}@" -e "s@${real_cmd_basename}@${self_basename}@") + if echo "${cmd_result}" | grep -E "echo|curl|xargs|chattr|kill" &> /dev/null ;then return 0 else - echo ${cmd_result} + #echo ${cmd_result} return 1 fi } @@ -111,8 +131,9 @@ else #${real_cmd} ${*} #OLD_IFS=${IFS} #export IFS=" " - for ret_line in ${cmd_result};do - echo ${ret_line} - done + #for ret_line in ${cmd_result};do + # echo ${ret_line} + #done + echo "${cmd_result}" fi {%endraw%} diff --git a/dockerFiles/ingress-nginx-controller/Dockerfile b/dockerFiles/ingress-nginx-controller/Dockerfile new file mode 100644 index 0000000..b540b8e --- /dev/null +++ b/dockerFiles/ingress-nginx-controller/Dockerfile @@ -0,0 +1 @@ +FROM k8s.gcr.io/ingress-nginx/controller:v0.35.0 diff --git a/docker_install/tasks/boot_docker.yml b/docker_install/tasks/boot_docker.yml index b2c99ba..81158ed 100644 --- a/docker_install/tasks/boot_docker.yml +++ b/docker_install/tasks/boot_docker.yml @@ -12,6 +12,7 @@ notify: - systemctl_reload +- meta: flush_handlers #- name: debug var docker_install_result # debug: # msg: '{{docker_install_result}}' diff --git a/k8s_node_install/files/k8s-ipvs.modules b/k8s_node_install/files/k8s-ipvs.modules index 46571aa..1f7cbbc 100644 --- a/k8s_node_install/files/k8s-ipvs.modules +++ b/k8s_node_install/files/k8s-ipvs.modules @@ -8,7 +8,8 @@ ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr for kernel_module in ${ipvs_modules}; do /sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1 - if [ $? -ne 0 ]; then + #if [ $? -ne 0 ]; then + if [ $? -eq 0 ]; then /sbin/modprobe ${kernel_module} fi done diff --git a/scripts/ceph/parted_disk.sh b/scripts/ceph/parted_disk.sh new file mode 100644 index 0000000..d5b385b --- /dev/null +++ b/scripts/ceph/parted_disk.sh @@ -0,0 +1,20 @@ +# 此脚本是用来创建 osd 的,这里显式指定了 --block.db 等参数 +#devs=(sdb sdc sdd) +#devs=(sdb ) +devs=(sdb sdc sdd) + +for disk in ${devs[*]};do + parted /dev/${disk} mklabel gpt + parted /dev/${disk} mkpart primary 0% 30GB + parted /dev/${disk} mkpart primary 30GB 100% + pvcreate /dev/${disk}1 + vgcreate ceph-${disk} /dev/${disk}1 + lvcreate -n ceph-block.db -L 2048m ceph-${disk} + lvcreate -n ceph-block.wal -L 2048m ceph-${disk} + ceph-volume lvm prepare --bluestore --data /dev/${disk}2 --block.db ceph-${disk}/ceph-block.db --block.wal ceph-${disk}/ceph-block.wal &> /tmp/ceph-prepare-${disk}.out + #grepvim + osd_num=$(grep -o "osd.[0-9]\{1,3\}" /tmp/ceph-prepare-${disk}.out | head -n 1 |awk -F'.' '{print $NF}') + osd_uuid=$(grep client.bootstrap-osd /tmp/ceph-prepare-${disk}.out |head -n 1 |awk '{print $NF}') + ceph-volume lvm activate --bluestore ${osd_num} ${osd_uuid} + +done diff --git a/scripts/ceph/remove_osd.sh b/scripts/ceph/remove_osd.sh new file mode 100644 index 0000000..1e6c003 --- /dev/null +++ b/scripts/ceph/remove_osd.sh @@ -0,0 +1,14 @@ +#!/bin/bash +export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin + +osd_num=$1 + +ceph osd out ${osd_num} +systemctl stop ceph-osd@${osd_num} + +ceph osd purge ${osd_num} --yes-i-really-mean-it + +ceph osd crush remove osd.${osd_num} +ceph auth del osd.${osd_num} +ceph osd rm ${osd_num} + diff --git a/scripts/hive/check_distcp_failed.sh b/scripts/hive/check_distcp_failed.sh new file mode 100644 index 0000000..8f5cf6f --- /dev/null +++ b/scripts/hive/check_distcp_failed.sh @@ -0,0 +1,29 @@ + +# 这个是临时检测哪个表 distcp 失败, rebuild 失败的脚本, 临时的命令,不太正规,只是实现了一个复杂的命令而已 +cat dbs.txt_all |while read line; do + cd ${line} + cat ${line}_tbs.txt |while read tb; do + if grep "${line}.${tb}" distcp_success.txt > /dev/null;then + if grep "${line}.${tb}" distcp_failed.txt > /dev/null;then + sed -i "/${line}.${tb}/d" distcp_failed.txt + fi + else + echo ${line}.${tb} + fi + done + cd - +done + +cat dbs.txt_all |while read line; do + cd ${line} + cat ${line}_tbs.txt |while read tb; do + if grep "${line}.${tb}" rebuild_table_success.txt > /dev/null;then + if grep "${line}.${tb}" rebuild_table_failed.txt > /dev/null;then + sed -i "/${line}.${tb}/d" rebuild_table_failed.txt + fi + else + echo ${line}.${tb} + fi + done + cd - +done diff --git a/scripts/hive/hive_migrate_fix_retry_table_info.sh b/scripts/hive/hive_migrate_fix_retry_table_info.sh new file mode 100644 index 0000000..08f92e9 --- /dev/null +++ b/scripts/hive/hive_migrate_fix_retry_table_info.sh @@ -0,0 +1,19 @@ +# 这也是个临时的脚本,只是把 failed 的表写到 tbs.txt 中,让主脚本把 failed 的表重试 +dt=$(date +%Y%m%d%H%M%S) +cat dbs.txt_all | while read line;do + cd ${line} + if [ -f ${line}_tbs_all.txt ];then + : + else + + mv ${line}_tbs.txt ${line}_tbs_all.txt + fi + if [ -f distcp_failed.txt ];then + awk -F. '{print $NF}' distcp_failed.txt > ${line}_tbs.txt + #mv distcp_failed.txt ${dt} + else + : + fi + cd - + +done diff --git a/scripts/hive/hive_migrate_from_25_to_34.sh b/scripts/hive/hive_migrate_from_25_to_34.sh new file mode 100644 index 0000000..ff0ec11 --- /dev/null +++ b/scripts/hive/hive_migrate_from_25_to_34.sh @@ -0,0 +1,190 @@ +#!/bin/bash +# date: 2020/09/17 +# author: wanghaifeng@geotmt.com + +# 这个是迁移 32.25 的 hive 表到 32.34 集群上时写的脚本 +# 此脚本的操作方式是直接复制表的数据,然后建表,修复分区,比之前 export , distcp, import 要高效 +# 脚本使用时,需要先将旧集群的库,表等信息,写入文本,然后操作这些文本,来节省每次都用beeline 查询的等待时间 +# 脚本匆忙写就,有一些问题: +# 1. 当运行完一次后,想要重试时,这个尚未很好的实现,默认的是这个表只要在 success 文件中,就不会重试,也就是说只会重试那些在 failed 文件中的表 +# 2. 有一些表比较特殊,可能没有考虑周全,遇到此类表时,需要单独进行处理。 +# 3. 另有一些变量,如 hdfs 的 namespace 是是写死的,并未采用变量 + +old_url='jdbc:hive2://hadoop25.geotmt.com:2181,hadoop26.geotmt.com:2181,hadoop206.geotmt.com:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2' +#new_url='jdbc:hive2://hadoop35.geotmt.com:2181,hadoop34.geotmt.com:2181,hadoop36.geotmt.com:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2' +new_url='jdbc:hive2://hadoop35.geotmt.com:10000' + +new_hdfs_host=hdfs://10.111.32.34:8020 +old_hdfs_nm=geocluster +new_hdfs_nm=testcluster +dt=$(date +%Y%m%d%H%M%S) +dbs_txt=dbs.txt +tbs_txt=tbs.txt +tb_create_info=create_info.txt + +hive_create_db(){ + # 生成创建数据库的语句 + create_db_statment=$(cat ${dbs_txt} | while read db_name; do + echo "create database if not exists ${db_name};" + done) + + # 新集群上创建库 + beeline --outputformat=vertical --silent=true -u "${new_url}" -e "${create_db_statment}" +} + +hive_get_db_and_table(){ + # 将所有库名存放到 一个文本文件中 + local db_txt=${dbs_txt} + local tb_txt=${tbs_txt} + #local my_tb_create_info=${tb_create_info} + beeline --outputformat=vertical --silent=true -u "${old_url}" -e "show databases;" | awk '$1!=""{print $2}' > ${db_txt} + + # 根据库名得到所有表名 + cat ${db_txt} | while read line; do + [ -d ${line} ] || mkdir -p ${line} + beeline --outputformat=vertical --silent=true -u "${old_url}" -e "show tables from ${line};" |awk '$1!=""{print $2}' > ${line}/${line}_${tb_txt} + done + + # 得到所有表的建表语句 + cat ${db_txt} |while read line;do + cat ${line}/${line}_${tb_txt} |while read tb;do + # 末尾没有分号 + beeline --outputformat=csv2 --showHeader=false --silent=true -u "${old_url}" -e "show create table ${line}.${tb};" > ${line}/${tb}_${tb_create_info} + #break + done + #break + done +} + +hive_data_distcp(){ + local distcp_success_log=$1 + local distcp_failed_log=$2 + local distcp_source_url=$3 + local distcp_dest_url=$4 + +} + +distcp_success_log=distcp_success.txt +distcp_failed_log=distcp_failed.txt +rebuild_table_success_log=rebuild_table_success.txt +rebuild_table_failed_log=rebuild_table_failed.txt +# 在新集群建表,并复制数据 +#cat dbs.txt_all |while read line;do +cat ${dbs_txt} |while read line;do + cat ${line}/${line}_${tbs_txt} |while read tb;do + # 末尾没有分号 + #beeline --outputformat=csv2 --showHeader=false --silent=true -u "${old_url}" -e "show create table ${line}.${tb};" > ${line}/${tb}_create_info.txt + + # beeline 重定向的文件是 csv2 的,不是纯文本的,其中有些特殊符号 + # 这个变量的值类似 'hdfs://geocluster/services/data/hive/warehouse/kylin_cal_dt' + touch ${line}/${distcp_success_log} + touch ${line}/${distcp_failed_log} + touch ${line}/${rebuild_table_success_log} + touch ${line}/${rebuild_table_failed_log} + tb_create_info=$(cat ${line}/${tb}_create_info.txt) + # 如果表的创建语句文件不存在,就进入下次循环 + if [ -n "${tb_create_info}" ];then + : + else + echo "${dt} ${line}.${tb}" >> ${line}/table_info_is_empty.txt + continue + fi + # 获取表的 location + old_full_hdfs_url=$(echo "${tb_create_info}" |grep -A 1 LOCATION |grep hdfs) + old_hdfs_path_tmp=${old_full_hdfs_url#*${old_hdfs_nm}} + old_hdfs_path=${old_hdfs_path_tmp%\'} + + # 如果 location 不存在的话,报错 + if [ -n "${old_hdfs_path}" ];then + : + else + echo "${dt} ${line}.${tb}" >> ${line}/table_path_is_error.txt + continue + fi + + # 判断是否已经 distcp 完成,未完成则开始 distcp + if grep "${line}.${tb}" ${line}/${distcp_success_log} > /dev/null;then + echo "the ${line}.${tb} already distcp successed." + else + hdfs dfs -mkdir -p /tmp/distcp_log/distcp_${line} + hadoop distcp \ + -Dmapreduce.job.name=distcp_${line} \ + -update -delete -log /tmp/distcp_log/distcp_${line} \ + -numListstatusThreads 40 \ + -pb \ + ${old_hdfs_path} ${new_hdfs_host}${old_hdfs_path} &>> /tmp/distcp_${line}.out + #${source_hdfs_dir}/${db} ${dest_hdfs_dir}/${db} &>> /tmp/distcp_${db}.out + distcp_stat=$? + fi + # 完成后根据状态,生成日志 + distcp_stat=${distcp_stat:-0} + if [ ${distcp_stat} == 0 ];then + if grep "${line}.${tb}" ${line}/${distcp_success_log} &> /dev/null;then + : + else + echo "${dt} ${line}.${tb}" >> ${line}/${distcp_success_log} + fi + #if [ -f ${line}/${distcp_failed_log} ];then + if grep "${line}.${tb}" ${line}/${distcp_failed_log} &> /dev/null;then + sed -i "/${line}.${tb}/d" ${distcp_failed_log} + fi + #fi + else + # 错了的话,就直接进行下一个 + #echo "${dt} ${line}.${tb}" >> ${line}/${distcp_failed_log} + # 当目录为空时 distcp 会报错,但是表应该继续创建才对 + #continue + if grep "${line}.${tb}" ${line}/${distcp_failed_log} &> /dev/null;then + sed -i "/${line}.${tb}/c ${dt} ${line}.${tb}" ${line}/${distcp_failed_log} + fi + fi + #create_table_statement_tmp=$(cat ${line}/${tb}_create_info.txt) + #create_table_statement=${tb_create_info/hdfs:\/\/geocluster/hdfs://dpcluster} + # 获取建表语句 + #create_table_statement=${tb_create_info//hdfs:\/\/geocluster/hdfs://testcluster} + create_table_statement=${tb_create_info//hdfs:\/\/${old_hdfs_nm}/hdfs://${new_hdfs_nm}} + create_table_statement=${create_table_statement/CREATE TABLE/CREATE TABLE IF NOT EXISTS} + create_table_statement=${create_table_statement/CREATE EXTERNAL TABLE/CREATE EXTERNAL TABLE IF NOT EXISTS} + + # 判断是否已建表,未建则执行命令进行创建 + if grep "${line}.${tb}" ${line}/${rebuild_table_success_log} &> /dev/null;then + echo "the ${line}.${tb} already rebuild successed." + continue + else + beeline -n hdfs --outputformat=csv2 --silent=true -u "${new_url}" -e "${create_table_statement}; msck repair table ${line}.${tb};" + rebuild_table_stat=$? + fi + #touch ${line}/${rebuild_table_failed_log} + # 记录或更新日志 + rebuild_table_stat=${rebuild_table_stat:-0} + if [ ${rebuild_table_stat} == 0 ];then + if grep "${line}.${tb}" ${line}/${rebuild_table_success_log} &> /dev/null;then + : + else + echo "${dt} ${line}.${tb}" >> ${line}/${rebuild_table_success_log} + fi + #if [ -f ${line}/${rebuild_table_failed_log} ];then + if grep "${line}.${tb}" ${line}/${rebuild_table_failed_log} &> /dev/null; then + sed -i "/${line}.${tb}/d" ${line}/${rebuild_table_failed_log} + fi + #fi + else + #echo "${dt} ${line}.${tb}" >> ${line}/${rebuild_table_failed_log} + #echo "${dt} ${line}.${tb}" >> ${line}/${rebuild_table_failed_log} + if grep "${line}.${tb}" ${line}/${rebuild_table_failed_log} > /dev/null; then + sed -i "/${line}.${tb}/c ${dt} ${line}.${tb}" ${line}/${rebuild_table_failed_log} + fi + fi + + #break + done + #break +done + + +#beeline --outputformat=vertical --silent=true -u "${old_url}" -e "show databases;" | while read db_info db_name; do +# if [ -n "${db_name}" ];then +# #beeline --outputformat=vertical --silent=true -u "${old_url}" -e "show create database ${db_name}; describe database ${db_name};" +# beeline --outputformat=vertical --silent=true -u "${old_url}" -e "describe database ${db_name};" +# fi +#done diff --git a/scripts/hive/hive_table_count.sh b/scripts/hive/hive_table_count.sh new file mode 100644 index 0000000..00135d7 --- /dev/null +++ b/scripts/hive/hive_table_count.sh @@ -0,0 +1,18 @@ +# 遍历所有表,对各表执行 count() 检测迁移后的表与当前表是否一致 +# 这个只是在新集群上执行的 +# 实际运行时,这个运行的时候,再把此脚本复制一份修改了 beeline 的 -u 参数,再在旧集群上运行,两个集群同时执行查询 +# 最后使用 diff 对比两个结果文件 +> /tmp/new_cluster_table_line.out + +#cat dbs.txt_all | while read line; do +cat dbs.txt | while read line; do + + cat ${line}/${line}_tbs.txt | while read tb; do + tb_create_info=$(cat ${line}/${tb}_create_info.txt) + tb_first_field_tmp=$(echo "${tb_create_info}" | grep -i string | head -n 1 | awk '{print $1}') + tb_first_field=${tb_first_field_tmp:1: -1} + tb_first_field=${tb_first_field:-1} + tb_line=$(beeline -n hdfs --showHeader=false --outputformat=csv2 --silent=true -u jdbc:hive2://hadoop35.geotmt.com:10000 -e "select count(${tb_first_field}) from ${line}.${tb};") + echo "${line}.${tb} ${tb_line}" >> /tmp/new_cluster_table_line.out + done +done diff --git a/scripts/keepalived/mysql/check_mysql.sh b/scripts/keepalived/mysql/check_mysql.sh new file mode 100644 index 0000000..8bb23c4 --- /dev/null +++ b/scripts/keepalived/mysql/check_mysql.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin +#prog="/usr/local/mysql5.6/bin/mysql" +prog=`which mysql` +m_user=root +m_host="127.0.0.1" +stat='show slave status\G' + + +sql() { + $prog --defaults-file=/etc/keepalived/.my.cnf -u${m_user} mysql -e "$1" +} + + +#sql "show databases;" &> /dev/null +#s1=$? +sql "select User,Host from user;" &>/dev/null +s2=$? + +if [ ${s2} != 0 ];then + exit ${s2} +else + exit 0 +fi diff --git a/scripts/keepalived/mysql/mysql_backup.sh b/scripts/keepalived/mysql/mysql_backup.sh new file mode 100644 index 0000000..4081632 --- /dev/null +++ b/scripts/keepalived/mysql/mysql_backup.sh @@ -0,0 +1,41 @@ +#!/bin/bash +export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin + +LOGFILE=/var/log/keepalived-mysql-state.log +echo "[Backup]" >> $LOGFILE +date >> $LOGFILE + +prog=`which mysql` +m_user=root +m_port=3307 +m_host="127.0.0.1" +stat='show slave status\G' +#cmd3=$(/usr/bin/mysqladmin -u${m_user} -p${m_pass} -h${m_host} -P${m_port} ping 2> /dev/null| grep -c "alive") + +#[ ${cmd3} != 1 ] && exit 13 + +sql() { + $prog --defaults-file=/etc/keepalived/.my.cnf -u${m_user} -P${m_port} mysql -Bse "$1" +} + +sql2() { + $prog --defaults-file=/etc/keepalived/.my.cnf -u${m_user} -P${m_port} mysql -e "$1" +} + +declare -a list=($(sql "select db,name from mysql.event;")) +#list=$(sql "select db,name from mysql.event;") +#echo $list |awk '{print $1,$2}' + +#echo ${list[@]} +num=$(echo ${#list[@]}) + +stat=$(for ((i=0;i<${num};i+=2));do + j=$[i+1] + echo "ALTER EVENT ${list[$i]}.${list[$j]} DISABLE ON SLAVE;" +# echo $i +done) +#echo $stat + +sql2 "set global event_scheduler=0; set sql_log_bin=0;select @@sql_log_bin; $stat" >> $LOGFILE +echo "----------------------" >> $LOGFILE + diff --git a/scripts/keepalived/mysql/mysql_master.sh b/scripts/keepalived/mysql/mysql_master.sh new file mode 100644 index 0000000..e36f03b --- /dev/null +++ b/scripts/keepalived/mysql/mysql_master.sh @@ -0,0 +1,41 @@ +#!/bin/bash +export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin + +LOGFILE=/var/log/keepalived-mysql-state.log +echo "[Master]" >> $LOGFILE +date >> $LOGFILE + +prog=`which mysql` +m_user=root +m_host="127.0.0.1" +stat='show slave status\G' +#cmd3=$(/usr/bin/mysqladmin -u${m_user} -p${m_pass} -h${m_host} -P${m_port} ping 2> /dev/null| grep -c "alive") + +#[ ${cmd3} != 1 ] && exit 13 + +sql() { + $prog --defaults-file=/etc/keepalived/.my.cnf -u${m_user} -P${m_port} mysql -Bse "$1" +} + +sql2() { + $prog --defaults-file=/etc/keepalived/.my.cnf -u${m_user} -P${m_port} mysql -e "$1" +} + +declare -a list=($(sql "select db,name from mysql.event;")) +#list=$(sql "select db,name from mysql.event;") +#echo $list |awk '{print $1,$2}' + +#echo ${list[@]} +num=$(echo ${#list[@]}) + +stat=$(for ((i=0;i<${num};i+=2));do + j=$[i+1] + echo "ALTER EVENT ${list[$i]}.${list[$j]} ENABLE;" +# echo $i +done) +#echo $stat + +sql2 "set global event_scheduler=1; set sql_log_bin=0;select @@sql_log_bin; $stat" >> $LOGFILE + +echo "----------------------" >> $LOGFILE + diff --git a/scripts/kvm/reboot_vm.sh b/scripts/kvm/reboot_vm.sh new file mode 100644 index 0000000..c14c134 --- /dev/null +++ b/scripts/kvm/reboot_vm.sh @@ -0,0 +1,11 @@ +virsh list | tail -n +3 | head -n -1 | awk '{print $2}' | while read line;do + vm_pid=$(ps aux |grep -v grep | grep ${line} |awk '{print $2}') + echo "${line} pid is ${vm_pid}" + echo "kill ${vm_pid}" + kill ${vm_pid} + sleep 5 + echo "virsh start ${line}" + virsh start ${line} + [ $? == 0 ] && echo "${line} boot successed." || echo "${line} boot failed." + sleep 2 +done diff --git a/supervisor_pip/tasks/supervisor_local_packet_install.yml b/supervisor_pip/tasks/supervisor_local_packet_install.yml index a2fdf09..ce1c984 100644 --- a/supervisor_pip/tasks/supervisor_local_packet_install.yml +++ b/supervisor_pip/tasks/supervisor_local_packet_install.yml @@ -6,6 +6,7 @@ local_action: module: shell cmd: tar tf {{item}} |head -n 1 |awk -F'/' '{print $1}' + warn: false #register: {{ item.split('/')[-1].split('-')[0]}} #register: "{{packet_name}}" register: packet_vars