Influx集群解决方案(Influx Proxy篇)

InFluxDB 集群搭建

本次搭建使用influx proxy

介绍

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

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

架构说明

  • 在改造我们的系统中我们相当于要实现以下步骤

    在这里插入图片描述

实现步骤

Influx1.8环境

Influx1.8+Influx Proxy +SpringBoot +Ngnix

SpringBoot搭建
  • 引入依赖

    <dependency><groupId>org.influxdb</groupId><artifactId>influxdb-java</artifactId><version>2.6</version>
    </dependency>
    
  • java代码(参考https://github.com/influxdata/influxdb-java)

    // Create an object to handle the communication with InfluxDB.
    // (best practice tip: reuse the 'influxDB' instance when possible)
    final String serverURL = "http://127.0.0.1:8086", username = "root", password = "root";
    final InfluxDB influxDB = InfluxDBFactory.connect(serverURL, username, password);// Create a database...
    // https://docs.influxdata.com/influxdb/v1.7/query_language/database_management/
    String databaseName = "NOAA_water_database";
    influxDB.query(new Query("CREATE DATABASE " + databaseName));
    influxDB.setDatabase(databaseName);// ... and a retention policy, if necessary.
    // https://docs.influxdata.com/influxdb/v1.7/query_language/database_management/
    String retentionPolicyName = "one_day_only";
    influxDB.query(new Query("CREATE RETENTION POLICY " + retentionPolicyName+ " ON " + databaseName + " DURATION 1d REPLICATION 1 DEFAULT"));
    influxDB.setRetentionPolicy(retentionPolicyName);// Enable batch writes to get better performance.
    influxDB.enableBatch(BatchOptions.DEFAULTS.threadFactory(runnable -> {Thread thread = new Thread(runnable);thread.setDaemon(true);return thread;})
    );// Close it if your application is terminating or you are not using it anymore.
    Runtime.getRuntime().addShutdownHook(new Thread(influxDB::close));// Write points to InfluxDB.
    influxDB.write(Point.measurement("h2o_feet").time(System.currentTimeMillis(), TimeUnit.MILLISECONDS).tag("location", "santa_monica").addField("level description", "below 3 feet").addField("water_level", 2.064d).build());influxDB.write(Point.measurement("h2o_feet").time(System.currentTimeMillis(), TimeUnit.MILLISECONDS).tag("location", "coyote_creek").addField("level description", "between 6 and 9 feet").addField("water_level", 8.12d).build());// Wait a few seconds in order to let the InfluxDB client
    // write your points asynchronously (note: you can adjust the
    // internal time interval if you need via 'enableBatch' call).
    Thread.sleep(5_000L);// Query your data using InfluxQL.
    // https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/#the-basic-select-statement
    QueryResult queryResult = influxDB.query(new Query("SELECT * FROM h2o_feet"));System.out.println(queryResult);
    // It will print something like:
    // QueryResult [results=[Result [series=[Series [name=h2o_feet, tags=null,
    //      columns=[time, level description, location, water_level],
    //      values=[
    //         [2020-03-22T20:50:12.929Z, below 3 feet, santa_monica, 2.064],
    //         [2020-03-22T20:50:12.929Z, between 6 and 9 feet, coyote_creek, 8.12]
    //      ]]], error=null]], error=null]
    
Ngnix搭建(搭建中)

请参考 custom.conf

服务器搭建与数据库部署

使用docker来搭建对应的influxdb信息

本地存在两台服务器(请确保influx1可以访问到influx2 同一局域网)

influx1: 192.168.137.130

influx2: 192.168.137.131

  1. docker-compose代码

    version: "3.5"services:influx-proxy:image: chengshiwen/influx-proxy:latestcontainer_name: influx-proxyports:- 7076:7076environment:- TZ=Asia/Shanghaivolumes:- ./proxy.json:/etc/influx-proxy/proxy.jsonrestart: unless-stoppednetworks:- influx_netinfluxdb-1:image: influxdb:1.8container_name: influxdb-1restart: unless-stoppednetworks:- influx_netvolumes:- ./influxdb1/influxdb.conf:/etc/influxdb/influxdb.conf- ./influxdb1/meta:/var/lib/influxdb/meta- ./influxdb1/data:/var/lib/influxdb/data- ./influxdb1/wal:/var/lib/influxdb/walports:- "8086:8086"command: ["influxd", "--config", "/etc/influxdb/influxdb.conf"]influxdb-2:image: influxdb:1.8container_name: influxdb-2restart: unless-stoppednetworks:- influx_netvolumes:- ./influxdb2/influxdb.conf:/etc/influxdb/influxdb.conf- ./influxdb2/meta:/var/lib/influxdb/meta- ./influxdb2/data:/var/lib/influxdb/data- ./influxdb2/wal:/var/lib/influxdb/walports:- "8087:8086"command: ["influxd", "--config", "/etc/influxdb/influxdb.conf"]networks:influx_net:
    
  2. proxy.json代码

    {"circles": [{"name": "circle-1","backends": [{"name": "influxdb-1-1","url": "http://192.168.137.130:8086","username": "","password": ""},{"name": "influxdb-1-2","url": "http://192.168.137.130:8087","username": "","password": ""}]},{"name": "circle-2","backends": [{"name": "influxdb-2-1","url": "http://192.168.137.131:8086","username": "","password": ""},{"name": "influxdb-2-2","url": "http://192.168.137.131:8087","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,"pprof_enabled": false,"https_enabled": false,"https_cert": "","https_key": ""
    }
    
  3. influx.conf配置

    #这里只放出几处需要修改的 其他按照默认即可 如果生产环境可以考虑把internal禁掉# Determines whether the Flux query endpoint is enabled.flux-enabled = true  (如果需要支持flux语句 请设置为true)
    
  4. 测试

    curl -XPOST 'http://127.0.0.1:7076/query' --data-urlencode 'q=CREATE DATABASE "testdb"'
    sudo curl -XPOST 'http://127.0.0.1:7076/api/v2/write?bucket=testdb&precision=s' --data-binary 'mem,host=host1 used_percent=25 1700469476'
    sudo curl -XPOST 'http://127.0.0.1:7076/api/v2/write?bucket=testdb&precision=s' --data-binary 'mem2,host=host2 used_percent=23 1700469476'
    sudo curl -XPOST 'http://127.0.0.1:7076/api/v2/write?bucket=testdb&precision=s' --data-binary 'mem3,host=host3 used_percent=24 1700531670'sudo curl -XPOST 'http://127.0.0.1:7076/api/v2/query' \-H 'Accept:application/csv' \-H 'Content-type:application/vnd.flux' \-d 'from(bucket:"testdb")|> range(start:-5m)|> filter(fn:(r) => r._measurement == "mem")'
    

Influx2.5环境

SpringBoot搭建
  • 引入依赖

    <dependency><groupId>com.influxdb</groupId><artifactId>influxdb-client-java</artifactId><version>6.3.0</version>
    </dependency>
    
  • Java代码

    public class influxProxyTest {public static void main(String[] args) {String url = "http://192.168.137.130:7076";String token = "testinfo";String org = "admin";String bucket = "analyse";InfluxDBClient client = InfluxDBClientFactory.create(url, token.toCharArray(), org, bucket);QueryApi queryApi = client.getQueryApi();String flux = "from(bucket:\"analyse\")\n" +"|> range(start:-5d)\n" +"|> filter(fn:(r) => r._measurement == \"mem\")";List<FluxTable> list = queryApi.query(flux, org);for (FluxTable fluxTable:list){List<FluxRecord> records = fluxTable.getRecords();for (FluxRecord fluxRecord:records){System.out.println(fluxRecord.getValue());}}}
    
Ngnix搭建(实现中)

请参考 custom.conf

服务器搭建与数据库部署

使用docker来搭建对应的influxdb信息

本地存在两台服务器(请确保influx1可以访问到influx2 同一局域网)

influx1: 192.168.137.130

influx2: 192.168.137.131

  1. docker-compose代码

    version: "3.5"services:influx-proxy:image: chengshiwen/influx-proxy:3.0.0-previewcontainer_name: influx-proxyports:- 7076:7076environment:- TZ=Asia/Shanghaivolumes:- ./proxy.json:/etc/influx-proxy/proxy.jsonrestart: unless-stoppednetworks:- influx_netinfluxdb-1:image: influxdb:2.5.1container_name: influxdb-1restart: unless-stoppedports:- "8086:8086"networks:- influx_netvolumes:- ./influxdb1:/var/lib/influxdb2influxdb-2:image: influxdb:2.5.1container_name: influxdb-2restart: unless-stoppedports:- "8087:8086"networks:- influx_netvolumes:- ./influxdb2:/var/lib/influxdb2networks:influx_net:
    
  2. proxy.json代码

    {"circles": [{"name": "circle-1","backends": [{"name": "influxdb-1-1","url": "http://192.168.137.130:8086","token": ""},{"name": "influxdb-1-2","url": "http://192.168.137.130:8087","token": ""}]},{"name": "circle-2","backends": [{"name": "influxdb-2-1","url": "http://192.168.137.131:8086","token": ""},{"name": "influxdb-2-2","url": "http://192.168.137.131:8087","token": ""}]}],"dbrp": {"separator": "/","mapping": {"mydb": "admin/analyse", "mydb/myrp": "admin/analyse"}},"listen_addr": ":7076","data_dir": "data","flush_size": 10000,"flush_time": 1,"check_interval": 1,"rewrite_interval": 10,"conn_pool_size": 20,"write_timeout": 10,"write_tracing": false,"query_tracing": false,"token": "","pprof_enabled": false,"https_enabled": false,"https_cert": "","https_key": ""
    }
    
  3. 测试

    数据写入
    sudo curl -XPOST 'http://192.168.137.130:7076/api/v2/write?org=admin&bucket=analyse&precision=s' --data-binary 'mem,host=host3 used_percent=241 1700531671'
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/181431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Salesforce服务云和营销云重大创新!通过大数据和AI赋能为客户提供非凡体验

4月6日&#xff0c;Salesforce宣布推出新的Service Cloud和Marketing Cloud功能&#xff0c;通过AI驱动的数字化语音、移动离线访问相关信息、Intelligence和CDP创新&#xff0c;使客户体验更加人性化。借助Salesforce与人工智能相结合的强大创新&#xff0c;企业可以提供个性化…

初探HarmonyOS路由跳转

最近的鸿蒙新闻也是很大声势&#xff0c;鸿蒙的纯血版一出&#xff0c;各大互联网大厂都坐不住了&#xff0c;纷纷加入其中。这意味鸿蒙将来会取代大部分Android用户&#xff0c;这也是程序员的一篇大好前程。如今的Android开发行业已经夕阳西下了。 网上有关HarmonyOS的资料几…

分析:为什么有些pdf打开之后无法编辑?

pdf文件大家应该都经常接触&#xff0c;但是不知道大家会遇到这种情况&#xff1a;有些PDF文件打开之后无法编辑&#xff1f;是什么原因呢&#xff1f;今天我们来分析一下都是那些原因导致的。 首先我们可以考虑一下&#xff0c;PDF文件中的内容是否是图片&#xff0c;如果确认…

安全狗入选《2024中国企业服务云图(精选版)》多个细分领域

近日&#xff0c;由吴中区人民政府、苏州市工信局指导&#xff0c;崔牛会主办&#xff0c;苏州太湖国家旅游度假区管委会协办的2023中国SaaS大会在苏州顺利举办。 作为国内云原生安全领导厂商&#xff0c;安全狗突出的多项安全能力也在大会上受到认可。 厦门服云信息科技有限…

前后端分离开发出现的跨域问题

先说说什么是跨域。 请求的URL地址中的协议、域名、端口号中的任意一个与当前URL不同就是跨域。 比如&#xff1a; 当前页面的URL请求的URL是否跨域原因htttp://localhost:8080htttps://localhost:8080是协议不同htttp://localhostll:8080htttp://localhost:8080是域名不同htt…

【电路笔记】-电阻串联

电阻串联 文章目录 电阻串联1、概述2、电阻串联3、串联电阻电压4、电阻串联示例15、分压电路6、电阻串联示例27、电阻串联的应用8、总结 当电阻器以菊花链方式连接在一条线上时&#xff0c;电阻器被称为串联连接&#xff0c;从而导致共同电流流过它们。 1、概述 各个电阻器可以…

vue3中的Fragment、Teleport、Suspense新组件

Fragment组件 在Vue2中: 组件必须有一个根标签 在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中 好处: 减少标签层级, 减小内存占用 <template><div style"font-size: 14px;"><p> 组件可以没有根标签</p&g…

ubuntu22.04新机使用(换源,下载软件,安装显卡驱动,锁屏长亮)

换源 国内有很多Ubuntu的镜像源&#xff0c;包括阿里的、网易的&#xff0c;还有很多教育网的源&#xff0c;比如&#xff1a;清华源、中科大源。推荐使用中科大源&#xff0c;快得很。 /etc/apt/sources.list编辑/etc/apt/sources.list文件, 在文件最前面添加以下条目(操作前…

【Vue】绝了!还有不懂生命周期的?

生命周期 Vue.js 组件生命周期&#xff1a; 生命周期函数&#xff08;钩子&#xff09;就是给我们提供了一些特定的时刻&#xff0c;让我们可以在这个周期段内加入自己的代码&#xff0c;做一些需要的事情; 生命周期钩子中的this指向是VM 或 组件实例对象 在JS 中&#xff0c;…

Update this scope and remove the “systemPath“

问题 解析&#xff1a; 在特定的指定路径上查找系统相关性。这大大降低了可移植性&#xff0c;因为如果您将工件部署在一个与您的环境不同的环境中&#xff0c;代码将无法工作。 解决&#xff1a; 1 使用官方maven仓库的第三方jar包 2 如果官方仓库不存在jar包&#xff0c;…

模拟退火算法应用——求解TSP问题

仅作自己学习使用 一、问题 旅行商问题(TSP) 是要求从一个城市出发&#xff0c;依次访问研究区所有的城市&#xff0c;并且只访问一次不能走回头路&#xff0c;最后回到起点&#xff0c;求一个使得总的周游路径最短的城市访问顺序。 采用模拟退火算法求解TSP问题&#x…

接口测试【加密解密攻防完整版】实战教程详解

一、对称加密 对称加密算法是共享密钥加密算法&#xff0c;在加密解密过程中&#xff0c;使用的密钥只有一个。发送和接收双方事先都知道加密的密钥&#xff0c;均使用这个密钥对数据进行加密和解密。 数据加密&#xff1a;在对称加密算法中&#xff0c;数据发送方将明文 (原…

【JavaScript】3.3 JavaScript工具和库

文章目录 1. 包管理器2. 构建工具3. 测试框架4. JavaScript 库总结 在你的 JavaScript 开发之旅中&#xff0c;会遇到许多工具和库。这些工具和库可以帮助你更有效地编写和管理代码&#xff0c;提高工作效率。在本章节中&#xff0c;我们将探讨一些常见的 JavaScript 工具和库&…

linux安装minIo(亲测可用)

一、创建文件夹 进入opt文件夹 cd /opt/创建minio文件夹&#xff1b; mkdir minio赋予权限 chmod 777 minio/执行完后查看目录 进到minio文件夹 创建bin目录 mkdir bin创建data目录 mkdir data创建log touch minio.log创建start.sh文件&#xff0c;并写入数据(不会vi或…

微信公众号扫码授权登录源码 / PHP微信扫码关注公众号并授权登录源码

源码简介&#xff1a; 在当今的互联网时代&#xff0c;微信公众号已成为众多企业与用户之间进行交流和沟通的重要工具&#xff0c;其中包括用户的登录认证。通过关注公众号登录&#xff0c;不仅可以为公众号带来流量&#xff0c;还能够实现用户与公众号粉丝之间的一一对应关系…

数据治理模型的三个模块

数据接入模块 大数据工程的数据来源包含企业内部数据和企业外部数据&#xff0c;其中企业内部数据由资源服务平台、综合资源库、各业务系统生产库中的结构化数据和文件服务器上的文本、图片等非结构化数据组成&#xff0c;其中包括人财物记录、财物报表、原材料、顾客信息、气…

【SpringBoot篇】登录校验 — JWT令牌

文章目录 &#x1f339;简述JWT令牌⭐JWT特点 &#x1f33a;JWT使用流程&#x1f6f8;JWT令牌代码实现&#x1f354;JWT应用 &#x1f339;简述JWT令牌 JWT全称为JSON Web Token&#xff0c;是一种用于身份验证的开放标准。它是一个基于JSON格式的安全令牌&#xff0c;主要用于…

跨越威胁的传说:揭秘Web安全的七大恶魔

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

CVE-2022-4886 ingress命令注入复现与分析

安装 安装ingress-nginx wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.4/deploy/static/provider/cloud/deploy.yamlk apply -f deploy.yaml 原理 nginx.ingress.kubernetes.io/rewrite-target标签会在nginx配置进行插入字符串&#…

Linux - 动静态库(下篇)

前言 在上篇博客当中&#xff0c;对静态库是什么&#xff0c;怎么使用&#xff0c;简单实现自己的静态库&#xff0c;这些做了描述&#xff0c;具体请看上篇博客&#xff1a; 本篇博客将会对 动态库是什么&#xff0c;怎么使用&#xff0c;简单实现自己的动态库&#xff0c…