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.confreporting-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-100msindex-version = "tsi1" # tsi1 磁盘索引,inmem 内存索引需要大量内存query-log-enabled = true # 查询的日志,默认是 truecache-max-memory-size = "1g" # 分片缓存写入的最大内存大小,默认是 1g[coordinator]write-timeout = "20s" # 写入请求超时时间,默认为 10s[http]# bind-address = ":8086" # 绑定地址,需要绑定 ip:port 时使用auth-enabled = false # 认证开关,默认是 falselog-enabled = true # http 请求日志,默认是 trueaccess-log-path = "/var/log/influxdb"[logging]level = "info" # 日志等级,error、warn、info(默认)、debug
Docker 启动命令
# influxdb_1docker stop influxdb_1docker rm influxdb_1docker 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_2docker stop influxdb_2docker rm influxdb_2docker 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_3docker stop influxdb_3docker rm influxdb_3docker 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_4docker stop influxdb_4docker rm influxdb_4docker 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 centosRUN mkdir -p /var/log/proxyRUN yum install -y epel-releaseRUN yum install -y golangRUN rm -rf /var/cache/yum//*COPY /influx-proxy-2.5.6-linux-amd64/ influx-proxyWORKDIR influx-proxyEXPOSE 7076CMD ["/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_1docker rm influx_proxy_1docker 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.6docker stop influx_proxy_2docker rm influx_proxy_2docker 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_proxydocker rm nginx_influx_proxydocker 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




