暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

切库工具(nacos)

IT那活儿 2022-06-18
1086
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!





适用场景



随着程序应用的微服务化推进,微服务管理程序如nacos、zookeeper、apollo、k8s平台等也逐渐被互联网公司广泛应用起来,本文我们主要带来nacos通过脚本对配置中心的配置进行修改
在系统版本迭代过程中,经常遇到测试环境的数据库只能满足对基础功能的验证,测试日结、月结或者性能分析,需要导入生产数据进行验证;整个过程需要手动 停服-切换配置-启服,过程繁琐而且影响测试进度。

结合需求,将切库工作写成脚本,通过Nacos API完成对配置的修改和注册服务的查询,通过Ansible完成对多节点的重启操作,提升运维效率。





脚本设计



1. 切库整体流程设计
2. Nacos API接口使用
1)获取Nacos上的配置
请求方式:POST
请求URL:/nacos/v1/cs/configs
请求参数:

2)查询服务列表
请求方式:GET
请求URL:/nacos/v1/ns/service/list
请求参数:





脚本内容



#!/bin/bash

if [ $# -ne 1 ]; then
echo -e "Usage: sh icoschangesettledb.sh db19 | db37 \n \n"
fi

# 1. stop all icos docker app
function stopAll_(){
echo "`date +"%Y%m%d %H:%M:%S"` : stopping all icos docker app "
ansible icos1,icos2,icos3 -m shell -a 'docker stop `docker ps -q`'
echo "`date +"%Y%m%d %H:%M:%S"` : stopped all icos docker app "
}

# 2. backup database table config_info
function backupRows_(){
ansible 10.xx.xx.xx -m shell -a "/usr/local/mysql/bin/mysql -uroot -p1234.Com nacos_config -S data/mysql/mysql.sock -e \" insert into config_info_chg_history select a.*,now() from config_info a where tenant_id='icos' and data_id='afs-global-datasource-config.yml' ;\""
echo "`date +"%Y%m%d %H:%M:%S"` : backup database table config_info ()successed "
}
# 3. delete rows and insert rows to config_info

function deleteInsert_(){
# afs-global-datasource-config.yml
curl -XPOST --header 'Content-Type: application/x-www-form-urlencoded' -d dataId=afs-global-datasource-config.yml --data-urlencode content@/etc/ansible/dbconficos/config_37_afs-global-datasource-config.yml 'http://10.xx.xx.xx:8848/nacos/v1/cs/configs?group=DEFAULT_GROUP&tenant=icos&type=yaml&username=nacos&password=nacos.com'
echo "`date +"%Y%m%d %H:%M:%S"` : update rows to config_info (change to 10.xx.xx.37 )successed "
}

function deleteInsert2_(){
# afs-global-datasource-config.yml
curl -XPOST --header 'Content-Type: application/x-www-form-urlencoded' -d dataId=afs-global-datasource-config.yml --data-urlencode content@/etc/ansible/dbconficos/config_19_afs-global-datasource-config.yml 'http://10.xx.xx.xx:8848/nacos/v1/cs/configs?group=DEFAULT_GROUP&tenant=icos&type=yaml&username=nacos&password=nacos.com'
echo "`date +"%Y%m%d %H:%M:%S"` : update rows to config_info (change to 10.xx.xx.19 )successed "
}

# 4. change app user password -"readonly@'%'"
function execSqls_(){
ansible 10.xx.xx.xx -m shell -a "/usr/local/mysql/bin/mysql -uroot -p1234.Com -S data/mysql/mysql.sock -e \" alter user readonly@'%' identified by '1234.com'; flush privileges;\""
echo "`date +"%Y%m%d %H:%M:%S"` : change app user password readonly successed "
}

# 5. start all icos docker app
function startAll_(){
ansible icos1,icos2,icos3 -m shell -a 'docker start `docker ps -qa`'
ansible icos1,icos2,icos3 -m shell -a 'docker ps'
echo "`date +"%Y%m%d %H:%M:%S"` : started all icos docker app "
}

# 6. watch for nacos registry successed
function watchNacos_(){
echo "waiting 60 seconds." && sleep 60
while [ 1 ]
do
ICOSCNT=`curl -X GET -s '10.xx.xx.xx:8848/nacos/v1/ns/service/list?pageNo=1&pageSize=20&namespaceId=icos&username=nacos&password=nacos.com'|jq ".count"`
echo "`date +"%Y%m%d %H:%M:%S"` : current nacos icos services count is "${ICOSCNT}
if [ ${ICOSCNT} -eq 11 ]; then
echo "`date +"%Y%m%d %H:%M:%S"` : current nacos icos services count is ok "
exit 0;
fi
sleep 5
done

}

if [ $1'F' = 'db37F' ]; then
stopAll_
backupRows_
deleteInsert_
execSqls_
startAll_
watchNacos_
elif [ $1'F' = 'db19F' ]; then
stopAll_
deleteInsert2_
startAll_
watchNacos_
else
echo -e "Usage: sh icoschangesettledb.sh , arguments must is db19 or db37 , try again \n \n"
fi





执行结果







总  结


对于运维工作,繁杂而重复的工作要及时沉淀成脚本工具,这也是当前阶段大力推崇的的自动化运维,将复杂的事情简单化、标准化,能够自动解决于用户在IT管理中的各类运维问题,最终实现提升运维效率、减少人为失误的目的。

END



本文作者:刘玉翀(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论