docker-compose 搭建 InfluxDB Cluster

InfluxDB Cluster 官网

GitHub:https://github.com/chengshiwen/influxdb-cluster
Wiki 文档:https://github.com/chengshiwen/influxdb-cluster/wiki
下载地址:https://github.com/chengshiwen/influxdb-cluster/releases

架构

InfluxDB Cluster 安装由两组独立的进程组成:Data 节点和 Meta 节点。集群内的通信如下所示:

网络架构图

端口说明
Meta 节点通过 TCP 协议和 Raft 共识协议相互通信,默认都使用端口 8089,此端口必须在 Meta 节点之间是可访问的。默认 Meta 节点还将公开绑定到端口 8091 的 HTTP API,influxd-ctl 命令使用该 API。

Data 节点通过绑定到端口 8088 的 TCP 协议相互通信。Data 节点通过绑定到 8091 的 HTTP API 与 Meta 节点通信。这些端口必须在 Meta 节点和 Data 节点之间是可访问的。

在集群内,所有 Meta 节点都必须与所有其它 Meta 节点通信。所有 Data 节点必须与所有其它 Data 节点和所有 Meta 节点通信。

服务器说明

IP 角色
172.16.16.119 influxdb-meta-01
172.16.16.120 influxdb-meta-02, influxdb-data-01
172.16.16.121 influxdb-meta-03, influxdb-data-02

1.Meta 节点要求
InfluxDB Cluster 需要 至少三个 Meta 节点 和 奇数个 Meta 节点 以实现高可用和冗余。不建议超过三个 Meta 节点,除非您的服务器之间的通信存在长期可靠性问题。

2.Data 节点要求
InfluxDB Cluster 需要 至少两个 Data 节点 才能实现高可用性和冗余。您需要配置自己的负载均衡器以将客户端流量发送到端口 8086(HTTP API 的默认端口)。

部署前准备

# 3台服务器都需要做如下准备 
1. 安装 docker 
2. 安装 docker-compose
3. 同步时间
4. 关闭防火墙
5. 关闭 selinux
6. 添加 hosts 解析 (重要)
cat >> /etc/hosts << EOF
172.16.16.119 influxdb-meta-01
172.16.16.120 influxdb-meta-02 influxdb-data-01
172.16.16.121 influxdb-meta-03 influxdb-data-02
EOF

部署 Meta 节点

# 在 172.16.16.119 上 部署 influxdb-meta-01
mkdir -p /data/docker-compose/influxdb-meta-01
cd /data/docker-compose/influxdb-meta-01

cat >> docker-compose.yml << EOF 
version: "3.5"
services:
  influxdb-meta-01:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-meta
    container_name: influxdb-meta-01
    hostname: influxdb-meta-01
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 3G
    network_mode: "host"
    volumes:
      - ./data:/var/lib/influxdb
EOF

docker-compose up -d

# 在 172.16.16.120 上 部署 influxdb-meta-02
mkdir -p /data/docker-compose/influxdb-meta-02
cd /data/docker-compose/influxdb-meta-02

cat >> docker-compose.yml << EOF 
version: "3.5"
services:
  influxdb-meta-02:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-meta
    container_name: influxdb-meta-02
    hostname: influxdb-meta-02
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 3G
    network_mode: "host"
    volumes:
      - ./data:/var/lib/influxdb
EOF

docker-compose up -d

# 在 172.16.16.121 上 部署 influxdb-meta-03
mkdir -p /data/docker-compose/influxdb-meta-03
cd /data/docker-compose/influxdb-meta-03

cat >> docker-compose.yml << EOF 
version: "3.5"
services:
  influxdb-meta-03:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-meta
    container_name: influxdb-meta-03
    hostname: influxdb-meta-03
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 3G
    network_mode: "host"
    volumes:
      - ./data:/var/lib/influxdb
EOF

docker-compose up -d

部署 Data 节点

# 在 172.16.16.120 上 部署 influxdb-data-01
mkdir /data/docker-compose/influxdb-data-01
cd /data/docker-compose/influxdb-data-01

cat >> docker-compose.yml << EOF 
version: "3.5"
services:
  influxdb-data-01:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-data
    container_name: influxdb-data-01
    hostname: influxdb-data-01
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 3G
    network_mode: "host"
    volumes:
      - ./data:/var/lib/influxdb
EOF 

docker-compose up -d

# 在 172.16.16.121 上 部署 influxdb-data-02
mkdir /data/docker-compose/influxdb-data-02
cd /data/docker-compose/influxdb-data-02

cat >> docker-compose.yml << EOF 
version: "3.5"
services:
  influxdb-data-02:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-data
    container_name: influxdb-data-02
    hostname: influxdb-data-02
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 3G
    network_mode: "host"
    volumes:
      - ./data:/var/lib/influxdb
EOF 

docker-compose up -d

启动集群

# 在 172.16.16.119 上操作
docker exec -it influxdb-meta-01 bash
influxd-ctl add-meta influxdb-meta-01:8091
influxd-ctl add-meta influxdb-meta-02:8091
influxd-ctl add-meta influxdb-meta-03:8091
influxd-ctl add-data influxdb-data-01:8088
influxd-ctl add-data influxdb-data-02:8088
influxd-ctl show

测试

# 在 172.16.16.119 上操作
# 创建数据库
curl -XPOST "http://influxdb-data-01:8086/query" --data-urlencode "q=CREATE DATABASE mydb WITH REPLICATION 2"

# 写入数据
curl -XPOST "http://influxdb-data-01:8086/write?db=mydb" \
-d 'cpu,host=server01,region=uswest load=42 1434055562000000000'

curl -XPOST "http://influxdb-data-02:8086/write?db=mydb&consistency=all" \
-d 'cpu,host=server02,region=uswest load=78 1434055562000000000'

curl -XPOST "http://influxdb-data-02:8086/write?db=mydb&consistency=quorum" \
-d 'cpu,host=server03,region=useast load=15.4 1434055562000000000'

# 查询数据
curl -G "http://influxdb-data-02:8086/query?pretty=true" --data-urlencode "db=mydb" \
--data-urlencode "q=SELECT * FROM cpu WHERE host='server01' AND time < now() - 1d"

# 分析数据
curl -G "http://influxdb-data-02:8086/query?pretty=true" --data-urlencode "db=mydb" \
--data-urlencode "q=SELECT mean(load) FROM cpu WHERE region='uswest'"

posted @ 2022-11-08 17:50  klvchen  阅读(1299)  评论(0编辑  收藏  举报