Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

proxy只会检测库是否健康,当磁盘坏掉会有数据丢失问题吗 #48

Closed
yongjingwei opened this issue Jul 22, 2022 · 23 comments

Comments

@yongjingwei
Copy link

大佬,我们在使用插件测试的过程中无论是停止proxy和influxdb中一台多台,读写都没有任何问题,包括最终的数据一致性,我们是在6w/s点数据上报的情况下实测的,但是其中有一种一场需要请教下,比如部署的proxy和influxdb都没问题,但是磁盘坏了,这种情况prxoy只会监控influxdb是否健康,是不是还会向该influxdb读写数据,而这段数会因为写不进去出错

@chengshiwen
Copy link
Owner

是的。其实没有influx-proxy,只有influxdb,像磁盘坏了、磁盘满了、文件句柄数不够了,也会出现类似情况,客户端无法知晓是否写进去。最好的方式还是都要对influxdb做更完整的监控

@yongjingwei
Copy link
Author

目前我使用的是三个proxy配置相同的circle,每一个circle三个相同的influxdb数据库数据完全相同的部署方式,我用的是实例化部署,每一台虚拟机一个proxy和一个influxdb,比如我其中一台虚拟机坏了,磁盘坏了,导致prxoy和inflxudb数据丢失,如何重新把这组proxy和inflxudb再加入整个集群中,数据同步过去,目前想到的只能是手动先把其他正常的inflxudb数据拷贝过去,然后启动这组损坏的proxy和inflxudb,在拷贝数据这段时间产生的数据差异再通过另外两台proxy积攒的数据写入到inflxudb中,最终数据一致,重新组成三组完整集群,不知道目前这种方案是否存在漏洞或者还有啥别的方式,请教大佬

@chengshiwen
Copy link
Owner

目前我使用的是三个proxy配置相同的circle,每一个circle三个相同的influxdb数据库数据完全相同的部署方式,我用的是实例化部署,每一台虚拟机一个proxy和一个influxdb

这个有架构图不,一下没理解怎么部署的😂

@yongjingwei
Copy link
Author

公司限制了外网上传文件,简单点说就是一个proxy的json配置了三台influxdb,然后部署了三个proxy,这三个proxy的配置是一模一样的,只是起到了高可用,如果其中一个influxdb所在虚拟机磁盘换了,数据没了,我重新把这台influxdb部署起来时,如果把完整数据复制过去,因为磁盘坏了他没数据了

@chengshiwen
Copy link
Owner

总共只有3个influxdb吗?是都在同一个circle里,还是一共3个circle、一个circle里一个influxdb?

@yongjingwei
Copy link
Author

总共只有三个influxdb,一个circle里边三个influxdb,另外两个proxy配置的json里边也是这三个influxdb,总共就三个influxdb,三个proxy

@chengshiwen
Copy link
Owner

概念:

  • circle:一致性哈希环(circle),一个 circle 包含了若干个 influxdb 实例,共同存储了一份全量的数据,即每个 circle 都是全量数据的一个副本,各个 circle 数据互备。不同 circle 不能包含相同 influxdb 实例,每个 circle 包含的 influxdb 实例个数可以不相等。circle 只是一种逻辑划分,无实体存在,架构示意图配置了三个 circle
  • influxdb:influxdb 实例,以 url 进行区分,可以部署在同一服务器上以不同端口运行多个实例,一个 influxdb 实例只存储了一份全量数据的一部分数据

总共只有三个influxdb,一个circle里边三个influxdb,另外两个proxy配置的json里边也是这三个influxdb,总共就三个influxdb,三个proxy

如果是这个配置,就只有一份全量数据,分散在了三个influxdb上,如果一个influxdb磁盘坏了,都无法恢复。如果要做高可用,至少得两个circle

@yongjingwei
Copy link
Author

不好意思说错了,是你说的这种一个 circle只 包含了一个 influxdb 实例,这就是一个全量,部署了三个circle全量三份,不好意思说错了

@yongjingwei
Copy link
Author

其实就是想问一个副本因为磁盘问题数据丢失了如何重启后恢复该副本的数据

@chengshiwen
Copy link
Owner

几种方案
1、方案一:停机一个influxdb,然后把停机的influxdb的数据直接拷贝到待恢复的新influxdb上,把两个influxdb启动,proxy会把刚才因influxdb停机无法写入的数据重写。然后再调用 /resync接口,设置一个最近的tick时间,同步一下数据就行
2、方案二:不用停机,使用 /recovery接口,速度性能相对方案一慢些
3、方案三:复杂情况还可以使用 influx-tool transfer 命令来迁移,性能最高,但需要停 influx-proxy

@yongjingwei
Copy link
Author

我在调用[/recovery接口]总是报page not found page
http://127.0.0.1:7076/recovery?from_circle_id=0&to_circle_id=1 这个接口我的参数不对吗,
IP指的是任何一个circle代理的的地址吗,from_circle_id是不是/health接口查出来的id

@chengshiwen
Copy link
Owner

influx-proxy 要求 2.5.x,调用接口如下所示,需要 POST

curl -X POST 'http://127.0.0.1:7076/recovery?from_circle_id=0&to_circle_id=1'

IP指的是任何一个circle代理的的地址吗,from_circle_id是不是/health接口查出来的id

是的

@yongjingwei
Copy link
Author

我用的是3.0的,报page not found page

@yongjingwei
Copy link
Author

influxdb-v2这个分支

@yongjingwei
Copy link
Author

大佬我看了influxdb-v2看了这个版本的源码,似乎没有把一些接口加到这个版本中,而branch-2.5确实有,可否同步这些接口到influxdb-v2中

@chengshiwen
Copy link
Owner

后面计划集成到influxdb-v2中

@yongjingwei
Copy link
Author

期待大佬的这个功能

@yongjingwei
Copy link
Author

大佬请问是不是在支持2.0语法的influx-proxy中hash_key: backend key for consistent hash, including "idx", "exi", "name" or "url", default is idx, once changed rebalance operation is necessary这个分库分表功能没有了

@chengshiwen
Copy link
Owner

大佬请问是不是在支持2.0语法的influx-proxy中hash_key: backend key for consistent hash, including "idx", "exi", "name" or "url", default is idx, once changed rebalance operation is necessary这个分库分表功能没有了

代码写死为 "exi" 的 hash 方式

@yongjingwei
Copy link
Author

exi指的是什么,不太明白,请教下

@chengshiwen
Copy link
Owner

chengshiwen commented Dec 28, 2023

idx: default index, recommended when the number of backends <= 10, each additional backend causes 10% hash collision from 11th backend

exi: extended index, recommended, no hash collision will occur before idx <= 100000, which has been tested

@yongjingwei
Copy link
Author

那我怎么配置和部署数据库才能测分库的效果?backends 里边配置的个数必须大于10吗,不太明白该怎么测试验证,求指教

@chengshiwen
Copy link
Owner

backends 里至少两个就行

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants