首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
30 篇文章
1
迁移到MySQL的业务架构演进实战
2
如何优化MySQL千万级大表,我写了6000字的解读
3
MySQL中的SQL优化建议那么多,该如何有的放矢
4
说几点关于数据库的见解
5
迁移至MySQL的数据流转流程优化
6
引入TiDB方案的一些思考
7
MySQL数据克隆的用户权限设计
8
MySQL逻辑数据恢复体系的设计
9
MySQL随机恢复的设计思路
10
从Oracle到MySQL,金融核心场景在线换库落地实战
11
基于Maxwell的MySQL数据传输服务整体设计
12
MySQL数据库升级的一些坑
13
数据架构选型必读:4月数据库产品技术解析
14
基于数据库中间件配置的几类问题
15
关于中间件服务的配置管理,分为5个阶段
16
MySQL中10多张表关联要做优化,怎么理解逻辑幂等
17
关于MySQL拓扑关系的梳理
18
对于新技术栈落地和架构思维的建议
19
MyCAT让人诟病的配置文件,说说破局的思路
20
MySQL多活数据消费服务设计方案
21
数据双向复制中的6个数据冲突场景和解决思路
22
MySQL双主模式下是如何避免数据回环冲突的
23
一个MySQL服务CPU 100%的优化案例反思
24
MySQL表添加了一个字段,竟然导致数据无法写入,反思
25
MySQL周期表管理太繁琐,通过Python自定义工具方法优雅解决
26
MySQL业务双活的初步设计方案
27
数据库修改密码风险高,如何保证业务持续,这几种密码双活方案可以参考
28
一道经典的MySQL面试题,答案出现三次反转
29
​业务双活的数据切换思路设计(下)
30
基于Consul的MySQL高可用服务,健康检查怎么做?这里有一个完整脚本

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

部分脚本内容如下:

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

下一篇
举报
领券