首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >关于中间件服务的配置管理,分为5个阶段

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

作者头像
jeanron100
发布2020-01-17 15:44:09
发布2020-01-17 15:44:09
1.2K0
举报

这是学习笔记的第 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是在上两个阶段验证后进行执行阶段。 所以整个配置基于时间维度的管理可以实现方便快捷的配置管理,而且整个过程会自动备份,恢复起来也是妥妥的。

部分脚本内容如下:

代码语言:javascript
复制
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群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档