InfluxDB集群

InfluxDB集群

InfluxDB官方的集群版本闭源收费, 资源允许的情况下可以考虑使用官方的集群版本, 这里我们采用第三方的开源方案influx-proxy, 详情见github项目地址:Wiki文档

Linux部署InfluxDB集群

准备两个服务节点(ip地址信息根据实际部署环境进行对应调整)

节点1: 192.168.1.101
节点2: 192.168.1.102

部署InfluxDB实例

在节点1上运行:

docker -d --name influxdb-1 --restart always --net iot --privileged=true \
    -p 8086:8086 -v /opt/db/influxdb:/var/lib/influxdb \
    influxdb:1.8.10

在节点2上运行:

docker -d --name influxdb-2 --restart always --net iot --privileged=true \
    -p 8086:8086 -v /opt/db/influxdb:/var/lib/influxdb \
    influxdb:1.8.10

分别在两个节点上面各运行一个influxdb的实例,/opt/db/influxdb是两个实例在各自服务器上的本地文件路径,该路径根据实际情况进行更改

这里的两个influxdb的实例是独立运行的两个节点,两个节点互不相干,之后会在这两个节点之上部署Influx Proxy,通过Influx Proxy来管理这两个influxdb的实例来实现集群的功能

部署Influx Proxy实例

在节点1上创建proxy.json配置文件,内容如下,配置为最小集群(2个influxdb节点)的示例配置:

{
    "circles": [
        {
            "name": "circle-1",
            "backends": [
                {
                    "name": "influxdb-1-1",
                    "url": "http://192.168.1.101:8086",
                    "username": "",
                    "password": ""
                }
            ]
        },
        {
            "name": "circle-2",
            "backends": [
                {
                    "name": "influxdb-2-1",
                    "url": "http://192.168.1.101:8086",
                    "username": "",
                    "password": ""
                }
            ]
        }
    ],
    "listen_addr": ":7076",
    "db_list": [],
    "data_dir": "data",
    "tlog_dir": "log",
    "hash_key": "idx",
    "flush_size": 10000,
    "flush_time": 1,
    "check_interval": 1,
    "rewrite_interval": 10,
    "conn_pool_size": 20,
    "write_timeout": 10,
    "idle_timeout": 10,
    "username": "",
    "password": "",
    "write_tracing": false,
    "query_tracing": false,
    "https_enabled": false,
    "https_cert": "",
    "https_key": ""
}

在节点1上启动Influx Proxy服务:

docker -d --name influx-proxy-1 --restart always --net iot \
    -p 7076:7076 -e TZ=Asia/Shanghai \
    -v ./proxy.json:/etc/influx-proxy/proxy.json \
    chengshiwen/influx-proxy:latest

circles属性表示配置了两个circle,两个cicle相当于互为副本,每个cicle各管理一个influxdb节点 在该配置中,业务服务通过访问 http://192.168.1.101:7076 实现influxdb的读写功能
当influx proxy收到写请求时,会把数据同时写到influxdb-1和influxdb-2两个节点,实现集群的功能
当influx proxy收到读请求时,任意找一个节点处理读请求,将读的结果进行返回

同理,在节点2上创建相同的proxy.json的配置文件,文件内容和节点1上的proxy.json保持一致,配置文件创建好之后,在节点2上启动Influx Proxy服务:

docker -d --name influx-proxy-2 --restart always --net iot \
    -p 7076:7076 -e TZ=Asia/Shanghai \
    -v ./proxy.json:/etc/influx-proxy/proxy.json \
    chengshiwen/influx-proxy:latest

这样节点1和节点2这两个节点组成了一个最小的influx proxy的集群,通过http://192.168.1.101:7076;http://192.168.1.102:7076进行InfluxDB集群的读写

2022-08-11
0