Influxdb是一个开源分布式时序、事件和指标数据库,使用 Go 语言编写,无需外部依赖。该组件在蓝鲸的功能定位是存储蓝鲸监控处理后的时序指标数据,在社区版属于单节点,在企业版属于双节点,由etcd+tsdbproxy+influxdb组成双写的架构。mysql
在某企业的生产环境上,因为监控纳管的节点比较多,influxdb读写数据频繁,形成influxdb运行节点的机器内存不足,常常形成服务异常,所以,决定将influxdb节点迁移到内存充足的机器上,保证蓝鲸平台稳定运行。sql
模块迁移属于蓝鲸运维工程师的必备技能之一,这里先讲解一下模块迁移的通常方法和思路:数据库
这里我须要迁移的目标机器已经是蓝鲸原有的服务器,且迁移的是数据库,因此实际的迁移步骤会稍有不一样,如下是迁移步骤详情:json
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角色ssh
中止须要迁移的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基本功能等。
蓝鲸模块迁移是蓝鲸运维必不可少的技能,理解蓝鲸架构和安装脚本原理才能更好掌握模块迁移的方法,必定要在测试环境先验证本身的方法步骤,才能避免正式环境迁移出错。
做者:何立彰
﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌