暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

InfluxDB 集群代理 Influx Proxy,Docker 部署全流程

e影 2021-11-19
4366
简介

InfluxDB 是一个时间序列数据库,用于处理海量写入与负载查询。InfluxDB旨在用作涉及大量时间戳数据的任何用例(包括DevOps监控,应用程序指标,物联网传感器数据和实时分析)的后端存储。


Influx Proxy 是一个基于高可用、一致性哈希的 InfluxDB 集群代理服务,实现了 InfluxDB 高可用集群的部署方案,具有动态扩/缩容、故障恢复、数据同步等能力。连接到 Influx Proxy 和连接原生的 InfluxDB Server 没有显著区别 (支持的查询语句列表),对上层客户端是透明的,上层应用可以像使用单机的 InfluxDB 一样使用,Influx Proxy 会处理请求的转发,并对各个 InfluxDB 集群节点进行管理。Influx Proxy 基于饿了么开源的 Influx-Proxy,并进一步开发和优化,支持了更多的特性,移除了 Python、Redis 依赖,解决了受限于一个数据库、需要额外配置 KEYMAPS 、数据负载不均衡的问题。


架构




Influx-proxy 集群代理服务 2*2集群(Docker)


Influxdb 配置

# influxdb.conf


reporting-disabled = true # 禁用报告,默认为 false
[meta]
dir = "/root/influxdb/meta" # 元信息目录
[data]
dir = "/root/influxdb/data" # 数据目录
wal-dir = "/root/influxdb/wal" # 预写目录
wal-fsync-delay = "10ms" # SSD 设置为 0s,非 SSD 推荐设置为 0ms-100ms
index-version = "tsi1" # tsi1 磁盘索引,inmem 内存索引需要大量内存
query-log-enabled = true # 查询的日志,默认是 true
cache-max-memory-size = "1g" # 分片缓存写入的最大内存大小,默认是 1g
[coordinator]
write-timeout = "20s" # 写入请求超时时间,默认为 10s
[http]
# bind-address = ":8086" # 绑定地址,需要绑定 ip:port 时使用
auth-enabled = false # 认证开关,默认是 false
log-enabled = true # http 请求日志,默认是 true
access-log-path = "/var/log/influxdb"
[logging]
level = "info" # 日志等级,error、warn、info(默认)、debug


Docker 启动命令

# influxdb_1
docker stop influxdb_1
docker rm influxdb_1
docker run -it -d -p 8086:8086 \
--name influxdb_1 \
--expose 8090 --expose 8099 \
-v /home/influxdb/influxdb_1/data:/root/influxdb/data \
-v /home/influxdb/influxdb_1/meta:/root/influxdb/meta \
-v /home/influxdb/influxdb_1/wal:/root/influxdb/wal \
-v /home/influxdb/influxdb_1/log:/var/log/influxdb \
-v /home/influxdb/influxdb.conf:/etc/influxdb/influxdb.conf \
influxdb:1.8

# influxdb_2
docker stop influxdb_2
docker rm influxdb_2
docker run -it -d -p 8087:8086 \
--name influxdb_2 \
--expose 8090 --expose 8099 \
-v /home/influxdb/influxdb_2/data:/root/influxdb/data \
-v /home/influxdb/influxdb_2/meta:/root/influxdb/meta \
-v /home/influxdb/influxdb_2/wal:/root/influxdb/wal \
-v /home/influxdb/influxdb_2/log:/var/log/influxdb \
-v /home/influxdb/influxdb.conf:/etc/influxdb/influxdb.conf \
influxdb:1.8



# influxdb_3
docker stop influxdb_3
docker rm influxdb_3
docker run -it -d -p 8088:8086 \
--name influxdb_3 \
--expose 8090 --expose 8099 \
-v /home/influxdb/influxdb_3/data:/root/influxdb/data \
-v /home/influxdb/influxdb_3/meta:/root/influxdb/meta \
-v /home/influxdb/influxdb_3/wal:/root/influxdb/wal \
-v /home/influxdb/influxdb_3/log:/var/log/influxdb \
-v /home/influxdb/influxdb.conf:/etc/influxdb/influxdb.conf \
influxdb:1.8


# influxdb_4
docker stop influxdb_4
docker rm influxdb_4
docker run -it -d -p 8089:8086 \
--name influxdb_4 \
--expose 8090 --expose 8099 \
-v /home/influxdb/influxdb_4/data:/root/influxdb/data \
-v /home/influxdb/influxdb_4/meta:/root/influxdb/meta \
-v /home/influxdb/influxdb_4/wal:/root/influxdb/wal \
-v /home/influxdb/influxdb_4/log:/var/log/influxdb \
-v /home/influxdb/influxdb.conf:/etc/influxdb/influxdb.conf \
influxdb:1.8


Influx-proxy

文档地址:https://github.com/chengshiwen/influx-proxy/wiki

下载地址:https://github.com/chengshiwen/influx-proxy/releases/download/v2.5.6/influx-proxy-2.5.6-linux-amd64.tar.gz

制作镜像

influx-proxy-2.5.6-linux-amd64.tar.gz 解压缩,在文件夹 influx-proxy-2.5.6-linux-amd64 同一级目录下,创建 Dockerfile 文件,如下。

FROM centos
RUN mkdir -p /var/log/proxy
RUN yum install -y epel-release
RUN yum install -y golang
RUN rm -rf /var/cache/yum//*
COPY /influx-proxy-2.5.6-linux-amd64/ influx-proxy
WORKDIR influx-proxy
EXPOSE 7076
CMD ["/influx-proxy/influx-proxy"]


build influx-proxy 镜像

# Dockerfile 同级执行 build 命令
docker build -t influx-proxy:2.5.6 .

 influx-proxy 配置文件 proxy.json


{
"circles": [
{
"name": "circle-1",
"backends": [
{
"name": "influxdb-1-1",
"url": "http://192.168.1.148:8086",
"username": "",
"password": "",
"auth_encrypt": false
},
{
"name": "influxdb-1-2",
"url": "http://192.168.1.148:8087",
"username": "",
"password": "",
"auth_encrypt": false
}
]
},
{
"name": "circle-2",
"backends": [
{
"name": "influxdb-2-1",
"url": "http://192.168.1.148:8088",
"username": "",
"password": "",
"auth_encrypt": false
},
{
"name": "influxdb-2-2",
"url": "http://192.168.1.148:8089",
"username": "",
"password": "",
"auth_encrypt": false
}
]
}
],
"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": "",
"auth_encrypt": false,
"write_tracing": false,
"query_tracing": false,
"https_enabled": false,
"https_cert": "",
"https_key": ""
}


docker run,启动 influx-proxy

docker stop influx_proxy_1
docker rm influx_proxy_1
docker run -it -d -p 7076:7076 \
--name influx_proxy_1 \
-v /home/influxdb/proxy.json:/influx-proxy/proxy.json \
-v /home/influxdb/influx_proxy_1/data:/influx-proxy/data \
influx-proxy:2.5.6


docker stop influx_proxy_2
docker rm influx_proxy_2
docker run -it -d -p 7077:7076 \
--name influx_proxy_2 \
-v /home/influxdb/proxy.json:/influx-proxy/proxy.json \
-v /home/influxdb/influx_proxy_2/data:/influx-proxy/data \
influx-proxy:2.5.6


nginx

nginx.conf

user  root;
worker_processes 2;


error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
}


http {
include /etc/nginx/mime.types;
default_type application/octet-stream;


log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';


access_log /var/log/nginx/access.log main;

port_in_redirect off;

sendfile on;
tcp_nopush on;
tcp_nodelay on;


keepalive_timeout 65;
client_body_timeout 12;
client_header_timeout 12;
send_timeout 10;


include /etc/nginx/conf.d/*.conf;


upstream myserver {
server 192.168.1.148:7076;
server 192.168.1.148:7077;
}


server {
listen 8080;
server_name localhost;


#charset koi8-r;
#access_log logs/host.access.log main;


location / {
proxy_redirect off;
proxy_pass http://myserver;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}


#error_page 404 /404.html;


# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}


}
}


docker run 启动 nginx

docker stop nginx_influx_proxy
docker rm nginx_influx_proxy
docker run -it -d -p 8080:8080 \
--name nginx_influx_proxy \
-v /home/influxdb/nginx.conf:/etc/nginx/nginx.conf \
-v /home/influxdb/nginx/logs:/var/log/nginx \
nginx

查询所有 influxdb 实例的健康状态

http://127.0.0.1:8080/health

部署完成。


参考 :

https://github.com/chengshiwen/influx-proxy/wiki?v=1#%E6%8E%A5%E5%8F%A3-query





👇



文章转载自e影,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论