当前位置: 首页 > news >正文

关于中间件服务的配置管理,分为5个阶段

这是学习笔记的第 2185 篇文章

读完需要

9

分钟

速读仅需7分钟

一直以来对于中间件服务的配置管理是一个有些头疼的事情,但是头疼还不意味着解决不了,目前现状是:中间件配置的管理是手工方式,虽然保险,但是人为操作更难免出现问题,主要有以下的一些问题:

  • 中间件的配置信息很容易遗漏

  • 配置信息冗余,在加载配置文件时很难发现和排查

  • 关于时间自增的表维护在不同的年份,月份天数都不大一样,很容易遗漏

  • 中间件配置有了,但是因为遗忘或是配置错误没有生效

  • 中间件配置有了,但是分片配置存在问题,导致表部分写入失败

  • 配置不完整,有些表不连续

  • 配置和脚本执行分离,可能配置和实际情况脱节

  • 配置管理和分片管理较为繁琐,操作比较耗时

对于这种情况的改善,也是分了几个阶段:

1)实现周期表的自治管理,实现预创建,预删除,清理自动化管理

2)实现基于分布式环境的周期表扩展管理

3)实现基于分布式环境的配置自动化管理

4)实现配置和脚本的联动管理

5)实现分布式表的自动配置管理

 目前主要在完善到第3个阶段,脚本部分内容如下:

主要需要4个参数,调用形式为:

sh auto_config.sh tda_test_data 20200110 20200120 prepare

参数的含义为 tda_test_data为表名,是带有时间属性的表,实际的表为tda_test_data_20200110~tda_test_data_20200120

需要输入两个时间范围,其中20200110是基准时间,就是在配置文件中的最大时间,而20200120是截止时间,prepare是整个脚本的处理阶段,分为三个选项:prepare,dry_run,execute。

prepare阶段只是打印出相关的配置信息,做下配置的预检查,是否日期已经自包含等。

dry_run阶段是模拟整个过程,不会真正的变更文件内容,但是会模拟出变更后的配置文件内容

execute是在上两个阶段验证后进行执行阶段。
所以整个配置基于时间维度的管理可以实现方便快捷的配置管理,而且整个过程会自动备份,恢复起来也是妥妥的。 

部分脚本内容如下:

schema_conf_file='/usr/local/proxy/conf/schema.xml'
table_name=$1
table_name_seprator='_'
base_date=$2
end_date_str=$3
action_option=$4
time_flag=`date +%Y_%m_%d_%H_%S`




startdate=`date -d "+1 day ${base_date}" +%Y%m%d`
enddate=`date -d "+1 day ${end_date_str}" +%Y%m%d`




touch /tmp/schema.xml.${time_flag}_tmp
table_base_name=`echo ${table_name}${table_name_seprator}${base_date}`




function backup_file(){
cp ${schema_conf_file} ${schema_conf_file}.bak.${time_flag}
}




function config_parse(){
    while [[ ${startdate} < ${enddate} ]]
        do
            echo ${startdate} 
            table_tmp_name=`echo ${table_name}${table_name_seprator}${startdate}`
            if [ `grep -w  $table_tmp_name ${schema_conf_file}|wc -l` == 1 ];then
                echo '配置 '$table_tmp_name' 已存在,请检查后重试。。。'
                return
            fi
            grep -w  $table_base_name ${schema_conf_file} >> /tmp/schema.xml.${time_flag}_tmp
            sed -i "s/${base_date}/${startdate}/g" /tmp/schema.xml.${time_flag}_tmp
            echo
            startdate=`date -d "+1 day ${startdate}" +%Y%m%d`
    done
}




function dry_run(){
line_num=`grep -n  $table_base_name ${schema_conf_file}|awk -F: '{print $1}' `
sed  ''${line_num}' r '/tmp/schema.xml.${time_flag}_tmp'' $schema_conf_file|grep -C30 $table_base_name 
}




function append_to_file(){
line_num=`grep -n  $table_base_name ${schema_conf_file}|awk -F: '{print $1}' `
sed -i ''${line_num}' r '/tmp/schema.xml.${time_flag}_tmp'' $schema_conf_file
}




function grep_file(){
file_match_cnt=`grep -C20 $table_base_name $schema_conf_file|wc -l`
if [ $file_match_cnt = 0 ];then
  echo '没有匹配的配置时间范围,请检查后重试。。。'
else
  while [[ ${startdate} < ${enddate} ]]
     do
         table_tmp_name=`echo ${table_name}${table_name_seprator}${startdate}`
         if [ `grep -w  $table_tmp_name ${schema_conf_file}|wc -l` == 1 ];then
             echo '配置 '$table_tmp_name' 已存在,文件内容如下,请检查后重试。。。'
             grep -A5 $table_tmp_name $schema_conf_file
             return
         fi
         startdate=`date -d "+1 day ${startdate}" +%Y%m%d`
  done
echo 'CHECK  RESULT: OK '
grep -C10 $table_base_name $schema_conf_file
fi
}


#执行主函数
if [ ! $action_option ];then 
    action_option='prepare'
fi




#echo $action_option
if [ $action_option = 'prepare' ];then
   grep_file
else
   backup_file
   config_parse




   if [ $action_option = 'dry-run' -o $action_option = 'dry_run' ];then
     dry_run
   elif [ $action_option = 'execute' ];then
     append_to_file
   else
        echo 'input parameter error...'
   fi
fi




rm /tmp/schema.xml.${time_flag}_tmp


QQ群号:763628645

QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

订阅我的微信公众号“杨建荣的学习笔记”,第一时间免费收到文章更新。别忘了加星标,以免错过新推送提示。

1

   

近期热文

你可能也会对以下话题感兴趣。点击链接就可以查看。

  • 使用Python分析北京积分落户数据,分析完我陷入了深思

  • MySQL的主键命名挺任性,就这么定了

  • 华裔教授发现二次方程极简解法,我默默的做了下验算

  • 回答:我不小心把公司的数据库给删了,该不该离职?

  • 迁移到MySQL的业务架构演进实战

  • 数据库修改密码风险高,如何保证业务持续,这几种密码双活方案可以参考

  • MySQL业务双活的初步设计方案

  • 如何优化MySQL千万级大表,我写了6000字的解读

  • 一道经典的MySQL面试题,答案出现三次反转

  • 业务双活的数据切换思路设计(下)

  • 业务双活的数据切换思路设计(一)

  • MySQL中的主键和rowid,看似简单,其实有一些使用陷阱需要注意

  • 小白学MySQL要多久?我整理了10多个问题的答案

2

   

转载热文

你可能也会对以下话题感兴趣,文章来源于转载,点击链接就可以查看。

  • 去IOE or Not?

  • 拉里·佩奇(Larry Page)的伟大归来

  • 《吊打面试官》系列-Redis基础

  • 唯一ID生成算法剖析,看看这篇就够了

  • 关于大数据运维能力的一些思考

  • DBA菜鸟的进化简史:不忘初心,记工作中踩过的三个坑

  • 美女主持直播,被突发意外打断!湾区网友却高喊: 我懂!超甜

相关文章:

  • 一个诡异的MySQL慢日志问题
  • 关于MySQL中insert ignore,insert on duplicate和replace into,你可能没想过区别
  • 你可能不了解的《唐诗三百首》
  • 趣头条基于ClickHouse玩转每天1000亿数据量
  • 疏通厨房水槽的感悟
  • 《生活中的魔法数学》读后感
  • 《唐诗三百首》中的童年记录
  • 关于远程办公的一些思考
  • 从Oracle新特性看数据库发展
  • 用Python对2019年二手房价格进行数据分析
  • 一则慢日志监控误报的问题分析
  • MySQL备份失败,一波三折的问题分析和处理
  • 重启大法带给我的思考,原来不是简单的重启
  • 有时候解决问题比写代码更重要
  • 浅谈 CAP 和 Paxos 共识算法
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [译]前端离线指南(上)
  • 《剑指offer》分解让复杂问题更简单
  • Apache Spark Streaming 使用实例
  • Java小白进阶笔记(3)-初级面向对象
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • java中具有继承关系的类及其对象初始化顺序
  • Puppeteer:浏览器控制器
  • PV统计优化设计
  • python_bomb----数据类型总结
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Redis的resp协议
  • Sass Day-01
  • SSH 免密登录
  • Terraform入门 - 3. 变更基础设施
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Vue实战(四)登录/注册页的实现
  • vue数据传递--我有特殊的实现技巧
  • 关于List、List?、ListObject的区别
  • 猴子数据域名防封接口降低小说被封的风险
  • 如何进阶一名有竞争力的程序员?
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 写代码的正确姿势
  • 阿里云移动端播放器高级功能介绍
  • 我们雇佣了一只大猴子...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #数学建模# 线性规划问题的Matlab求解
  • ${ }的特别功能
  • (7)STL算法之交换赋值
  • (NSDate) 时间 (time )比较
  • (poj1.2.1)1970(筛选法模拟)
  • (SpringBoot)第二章:Spring创建和使用
  • (学习日记)2024.02.29:UCOSIII第二节
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)fock函数详解
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .net 4.0发布后不能正常显示图片问题
  • .NET Core 2.1路线图