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.rhkb.cn/news/206821.html

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

相关文章

【MySQL】JDBC编程

&#x1f451;专栏内容&#xff1a;MySQL⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、JDBC工作原理二、JDBC 使用1、准备工作2、使用实例3、手动输入 一、JDBC工作原理 JDBC是Java语言中用于与数据库进行交互…

Panalog 日志审计系统 前台RCE漏洞复现

0x01 产品简介 Panalog是一款日志审计系统&#xff0c;方便用户统一集中监控、管理在网的海量设备。 0x02 漏洞概述 Panalog日志审计系统 sy_query.php接口处存在远程命令执行漏洞&#xff0c;攻击者可执行任意命令&#xff0c;接管服务器权限。 0x03 复现环境 FOFA&#xf…

centos7配置tomcat

简介 Tomcat是一个使用Java编写的开源Web应用服务器,是由Apache Software Foundation管理的一个项目。它是一个轻量级的应用服务器,可以下载、安装和使用,而且还提供了许多高级功能,例如支持Java Servlet、JavaServer Pages (JSP)和JavaServer Faces (JSF) 等JavaEE技术,…

深度解析 Spring Security 自定义异常失效问题:源码剖析与解决方案

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

计算机视觉面试题-03

1、简单介绍一下sigmoid&#xff0c;relu&#xff0c;softplus&#xff0c;tanh&#xff0c;RBF及其应用场景 这里简单介绍几个激活函数及其应用场景&#xff1a; Sigmoid 函数&#xff08;Logistic 函数&#xff09;&#xff1a; 公式&#xff1a; s i g m a ( x ) 1 1 e …

Python生成exe文件

Python如何生成exe文件 在终端执行 pip install pyinstaller 在终端执行pyinstaller E:\fund_data\GetFund.py&#xff0c;运行结束后会在D:\Python\Python311\Scripts\dist\目录下生成GetFund.exe文件 3.双击exe文件运行&#xff0c;如果未出现预期结果&#xff0c;可以把e…

2023.11.23使用flask实现在指定路径生成文件夹操作

2023.11.23使用flask实现在指定路径生成文件夹操作 程序比较简单&#xff0c;实现功能&#xff1a; 1、前端输入文件夹 2、后端在指定路径生成文件夹 3、前端反馈文件夹生成状态 main.py from flask import Flask, request, render_template import osapp Flask(__name__)a…

STM32USART+DMA实现不定长数据接收/发送

STM32USARTDMA实现不定长数据接收 CubeMX配置代码分享实践结果 这一期的内容是一篇代码分享&#xff0c;CubeMX配置介绍&#xff0c;关于基础的内容可以往期内容 夜深人静学32系列11——串口通信夜深人静学32系列18——DMAADC单/多通道采集STM32串口重定向/实现不定长数据接收 …

【Java学习笔记】71 - JDBC入门

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter25/src/com/yinhai/dao_ 一、JDBC概述 1.基本介绍 1. JDBC为访问不同的数据库提供了统一的接口&#xff0c;为使用者屏蔽了细节问题。 2. Java程序员使用JDBC,可以连接任何提供了JDBC驱动…

C++ -- 每日选择题 -- Day2

第一题 1. 下面代码中sizeof(A)结果为&#xff08;&#xff09; #pragma pack(2) class A {int i;union U{char str[13];int i;}u;void func() {};typedef char* cp;enum{red,green,blue}color; }; A&#xff1a;20 B&#xff1a;21 C&#xff1a;22 D&#xff1a;24 答案及解析…

ssm+vue的仓库在线管理系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的仓库在线管理系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三…

游戏反Frida注入检测方案

在游戏安全对抗过程中&#xff0c;有不少外挂的实现基于对游戏内存模块进行修改&#xff0c;这类外挂通常会使用内存修改器&#xff0c;除此之外&#xff0c;还有一种门槛相对更高、也更难检测的「注入挂」。 据FairGuard游戏安全数据统计&#xff0c;在游戏面临的众多安全风险…

Apipost推出IDEA插件,代码写完直接调试

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件&#xff1a;Api…

【软件测试】白盒测试和黑盒测试

一、软件测试基本分类 一般地&#xff0c;我们将软件测试活动分为以下几类&#xff1a;黑盒测试、白盒测试、静态测试、动态测试、手动测试、自动测试等等。 黑盒测试 黑盒测试又叫功能测试、数据驱动测试或给予需求规格说明书的功能测试。这种测试注重于测试软件的功能性需…

python开发之个微批量删除好友

简要描述&#xff1a; 删除联系人 请求URL&#xff1a; http://域名地址/delContact 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wI…

探索前端设计的新境界——介绍IVueUI工具助力Vue页面设计

在快速发展的前端领域&#xff0c;Vue.js作为一款渐进式JavaScript框架&#xff0c;一直备受开发者喜爱。然而&#xff0c;在Vue前端开发的旅程中&#xff0c;页面设计常常是一个不可避免的挑战。今天&#xff0c;我要向大家介绍一款令Vue前端开发者受益匪浅的工具——www.ivue…

【微服务】java 规则引擎使用详解

目录 一、什么是规则引擎 1.1 规则引擎概述 1.2 规则引擎执行过程 二、为什么要使用规则引擎 2.1 使用规则引擎的好处 2.1.1 易于维护和更新 2.1.2 增强应用程序的准确性和效率 2.1.3 加快应用程序的开发和部署 2.1.4 支持可视化和可管理性 2.2 规则引擎使用场景 三、…

基于5G+物联网+SaaS+AI的农业大数据综合解决方案:PPT全文44页,附下载

关键词&#xff1a;智慧农业大数据&#xff0c;5G智慧农业&#xff0c;物联网智慧农业&#xff0c;SaaS智慧农业&#xff0c;AI智慧农业&#xff0c;智慧农业大数据平台 一、智慧农业大数据建设背景 1、应对全球人口快速增长带来的粮食生产压力&#xff0c;未来的粮食生产力必…

ERP软件对Oracle安全产品的支持

这里的ERP软件仅指SAP ECC和Oracle EBS。 先来看Oracle EBS&#xff1a; EBS的认证查询方式&#xff0c;和数据库认证是一样的。这个体验到时不错。 结果中和安全相关的有&#xff1a; Oracle Database VaultTransparent Data Encryption TDE被支持很容易理解&#xff0c;…

Android相机性能提高50%

文章目录 应用举例&#xff08;可以不看这一part&#xff0c;直接跳过看具体怎么做&#xff09;&#xff1a;Snapchat 通过 Camera2 Extensions API 将新相机功能的集成速度提高了 50%**Camera2 扩展 API 可以访问高级功能更多设备上的更多机会 正文&#xff1a;开始使用扩展架…