目前平台有些遗留应用还是使用的influxdb保存监控数据, influxdb为单实例, 随时可能出现单机故障, 考虑到influxdb还将运行很长一段时间, 因此需要扩展成HA机制, 这里选择influxdb-relay方案
这里需要说明的是, relay不会同步两个influxdb实例之间的数据,它只提供双写的能力,即在某个实例出现问题后还能将数据正常写入另一个正常的实例, 保证数据不丢失.如果想在问题实例上同步这部分数据话需要人工介入.
架构
1 | ┌─────────────────┐ |
共涉及到3个应用
- Influxdb: influxdb实例
- Influxdb-relay: 代理influxdb的写流量, 通过双写机制保证数据写入到2个influxdb数据库中,读流量还是从lb直接转到influxdb实例,不会经过relay
- loadBalancer: 对influxdb的读写流量都通过该服务进行代理到influxdb relay, 选择nginx即可,其它需要访问influxdb服务的配置参数都需要指定该应用的地址
新增实例
线上influxdb的版本为:
InfluxDB v1.7.4 (git: 1.7 ef77e72f435b71b1ad6da7d6a6a4c4a262439379)
部署机器: 192.168.1.5
需要在一台机器上部署一个influxdb新实例: 192.168.1.6
1 | wget https://dl.influxdata.com/influxdb/releases/influxdb_1.7.4_amd64.deb |
两个实例使用的配置文件如下, 具体的参数配置可以根据情况定:
cat /etc/influxdb/influxdb.conf
1 | reporting-disabled = false |
实例启停方式:
1 | systemctl start influxd.service |
启动新的influxdb实例后,需要将线上数据导入到该实例.
relay
relay服务会对统一接入的流程进行转发, 可直接docker部署,目前只有一个实例, 可扩容成2个,配置相同.
配置文件做为configmap的形式挂载到容器中, 内容如下:
1 | [[http]] |
同时,生成一个relay的svc,名为influxdb-relay-headless.sensego,端口号9096
nginx
从架构图中可以看出, 需要部署一个proxy层来代理influxdb的读写流量, 这里选择nginx
nginx做为容器部署, 一个实例即可
配置文件如下:
1 | worker_processes 8; |
数据迁移
由于influxdb只是保存metrics数据, 数据量大概在300G左右
不是特别敏感, 因此可以不停机进行备份,
这里采用的是在某个时间点进行全量备份,之后再通过增量备份来导入在操作期间写入的数据
虽然influxdb支持远程备份,建议在192.168.1.5本地进行备份,然后复制到新节点上
备份
1 | # 先全量备份 |
恢复
1 | # 在172.16.104.203上做本地恢复 |
到此,influxdb由单机点扩容到双节点, 避免了单机故障