Influxdb是一个开源分布式时序、事件和指标数据库,使用 Go 语言编写,无需外部依赖。该组件在蓝鲸的功能定位是存储蓝鲸监控处理后的时序指标数据,在社区版属于单节点,在企业版属于双节点,由etcd+tsdbproxy+influxdb组成双写的架构。
在某企业的生产环境上,由于监控纳管的节点比较多,influxdb读写数据频繁,造成influxdb运行节点的机器内存不足,经常造成服务异常,因此,决定将influxdb节点迁移到内存充足的机器上,保证蓝鲸平台稳定运行。
前期准备
- 迁移方案的确定与测试,通过测试验证整理出升级步骤详情;
- 评估迁移的影响范围和风险,建立应对措施和回退方案;
- 申请变更窗口,安排相关人员,保证迁移后验证蓝鲸功能正常;
迁移方案
模块迁移属于蓝鲸运维工程师的必备技能之一,这里先讲解一下模块迁移的一般方法和思路:
- 若是迁移模块至新机器,需先初始化新机器环境,配置中控机到新机器免密,在新机器安装并启动consul服务
- 停止旧机器模块服务,删除$INSTALL_PATH/.intall_module的模块标签,停止相关计划任务
- 修改install.config模块定义文件,同步脚本和src文件
- 在目标迁移机器安装相应的模块,这里可以参考蓝鲸集成安装服务的脚本$CTRL_DIR/bk_install逻辑判断安装和初始化的步骤本$CTRL_DIR/bk_install逻辑判断安装和初始化的步骤
- 判断其它服务对迁移模块的依赖,这里可以参考架构图模块之间的依赖关系或查找其它模块的配置文件依赖,如这里以匹配job模块为例:grep -i job /data/src/*/support-files/templates/*,重新渲染依赖的模块配置文件,重启依赖的服务
- 若是迁移至新机器,判断迁移的模块是否需要连接mysql,判断方法同上,若有则initdata mysql授权
这里我需要迁移的目标机器已是蓝鲸原有的服务器,且迁移的是数据库,所以实际的迁移步骤会稍有不同,以下是迁移步骤详情:
Step1:备份需要迁移节点的数据库,并将备份目录拷贝至新节点,备份命令如下:
for i in `ls /data/bkee/public/influxdb/data`;do influxd backup -host 127.0.0.1:8088 -database $i /data/backup/influxdb_$(date +%Y-%m-%d);done
influxd backup -host 127.0.0.1:8088 /data/backup/influxdb_meta
Step2:迁移influxdb角色
停止需要迁移的influxdb节点;
systemctl stop influxdb
systemctl disable influxdb
清理crontab(influxdb tsdbproxy)
修改中控机install.config(删除旧节点,在新节点添加influxdb),在新节点安装influxdb服务;
cd /data/install
./bkeec stop bkdata #停止监控数据写入
./bkeec sync common
./bkeec sync influxdb
直接ssh新节点直接安装influxdb
. /data/install/control.rc
. /data/install/install.rc
install_influxdb (如没计划任务手动添加crontab)
start_influxdb
start_tsdbproxy
检查influxdb服务解析是否正常
先删除旧机器/data/bkee/etc/consul.d/influxdb.json
中控机./bkeec update consul
dig influxdb.service.consul是否正常
Step3:还原数据到迁移后的数据库
进入新节点同步过去的influxdb备份文件目录
for db in $(ls *.rp_* | sed 's/\.rp_.*//' | sort -u); do influxd restore -database $db -datadir /data/bkee/public/influxdb/data /data/backup/influxdb_$(date +%Y-%m-%d); done
influxd restore -metadir /data/bkee/public/influxdb/meta /data/backup/influxdb_meta
Step4:重新渲染依赖模块、重启服务
在中控机下执行:
source /data/install/utils.fc
./bkeec render bkdata
./bkeec render tsdbproxy
./bkeec stop bkdata
./bkeec start bkdata
./bkeec stop tsdbproxy
./bkeec start tsdbproxy
另外,还需要验证注册在etcd集群的influxdb节点
ssh $ETCD_IP
endpoint=http://192.168.102.171:2379,http://192.168.102.173:2379,http://192.168.102.174:2379 #这里是三如ETCD的IP
查看注册的两个节点
etcdctl --endpoints $endpoint get /backends/local/url
etcdctl --endpoints $endpoint get /backends/local1/url
如果是错误节点URL,配置指向新节点的URL
etcdctl --endpoints $endpoint set /backends/local1/url http://192.168.102.175:5260 #新节点influxdb的IP
Step5:验证数据写入
influx -host influxdb.service.consul -port 5260 -precision rfc3339 #在influxdb新节点执行
select * from "_internal"."monitor"."write" order by "time" desc limit 2
检查
针对于蓝鲸平台的变更操作,需要在变更后仔细检查平台每项功能,保证平台服务正常,按照整理的checklist逐项检查,如平台后台服务、SaaS基本功能等。
总结
蓝鲸模块迁移是蓝鲸运维必不可少的技能,理解蓝鲸架构和安装脚本原理才能更好掌握模块迁移的方法,一定要在测试环境先验证自己的方法步骤,才能避免正式环境迁移出错。
作者:何立彰
﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌