chengshiwen / influx-proxy

InfluxDB Proxy with High Availability and Consistent Hash
https://github.com/chengshiwen/influx-proxy/wiki
MIT License
354 stars 112 forks source link

文档中描述的“influx-proxy 收到请求,选择一个所有 influxdb 实例都正常运行、状态健康的 circle” #8

Closed Iyxh897 closed 3 years ago

Iyxh897 commented 3 years ago

您好,我看完文档后有个疑惑。 1.假设现在有两个influxdb示例,分别为A和B,一个influx-proxy下配置两个circle,第一个circle分配A实例,第二个circle分配B实例。此时进行读操作,文档描述中写着“选择一个所有influxdb实例都正常运行、状态健康的circle”,这个选择的逻辑是怎样的呢。 基于上述的假设,这个选择的逻辑是当两个circle都健康的时候,默认选择一个,还是说他们之间有负载均衡

chengshiwen commented 3 years ago

“选择一个所有influxdb实例都正常运行、状态健康的circle”,这个逻辑已经优化:

  1. 对于集群语句,例如show measurements,则会查询所有circle的所有实例的measurements,然后做合并去重返回;如果有不正常运行的influxdb实例,返回数据中会返回"backends unavailable"错误。此采用“并集策略”,更好一些,因为在删除measurement时,可能存在异步删除的情况,如果通过circle查measurement会出现不一致的现象
  2. 对于单实例语句,例如select * from example,则会随机选择一个circle,找到对应的存储influxdb实例,如果该实例健康,则会查询后返回结果;如果不健康,则再随机选择剩下circle中的一个,直到找到一个健康的influxdb实例;如果全部circle对应的influxdb都不健康,则返回"backends unavailable"错误

目前不支持负载均衡的策略,就是纯粹随机