乐趣区

解决pushgateway-HA问题

项目地址: https://github.com/ning1875/dynamic-sharding

# dynamic-sharding 


![image](https://github.com/ning1875/dynamic-sharding/blob/master/images/log.jpg)


`dynamic-sharding`  基于 cosul 的 service 健康坚检测实现一致性哈希环动态分片:
一个典型应用场景就是 mock pushgateway 的 HA(pgw100% 的 HA 实现起来较为困难)

主要解决 pgw 单点问题 case, 实现原理如下: 
- 
- dynamic-sharding 服务启动会根据配置文件注册 pgw 服务到 consul 中
- 由 consul 定时对 pgw server 做 http check
- push 请求会根据请求 path 做一致性哈希分离 
- 当多个 pgw 中实例 oom 或异常重启,consul 会将 bad 实例标记为 down
- dynamic-sharding 轮询检查实例数量变化,rehash 将 job 分流
- dynamic-sharding 本身无状态, 可启动多个实例作为流量接入层和 pgw server 之间
- 扩容时同时也需要重启所有存量 pgw 服务


使用指南

build
$ git clone https://github.com/ning1875/dynamic-sharding.git
$ cd  dynamic-sharding/pkg/ && go build -o dynamic-sharding main.go 


修改配置文件
补充 dynamic-sharding.yml 中的信息:


启动 dynamic-sharding 服务
./dynamic-sharding --config.file=dynamic-sharding.yml

 
# 和 promtheus 集成 
Add the following text to your promtheus.yaml's scrape_configs section

scrape_configs:
  - job_name: pushgateway
    consul_sd_configs:
      - server: $cousul_api
        services:
          - pushgateway
    relabel_configs:
    - source_labels:  ["__meta_consul_dc"]
      target_label: "dc"



# 调用方调用 dynamic-sharding 接口即可 
eg: http://localhost:9292/

运维指南

pgw 节点故障 (无需关心)

eg: 启动了 4 个 pgw 实例, 其中一个宕机了, 则流量从 4 ->3, 以此类推 

pgw 节点恢复

eg: 启动了 4 个 pgw 实例, 其中一个宕机了, 过一会儿恢复了, 那么它会被 consul unregister 掉
避免出现和扩容一样的 case: 再次 rehash 的 job 会持续在原有 pgw 被 prome scrap,而且 value 不会更新 

扩容

 修改 yml 配置文件将 pgw servers 调整到扩容后的数量, 重启服务 dynamic-sharding 
!! 注意 同时也要重启所有存量 pgw 服务, 不然 rehash 的 job 会持续在原有 pgw 被 prome scrap,而且 value 不会更新

缩容

# 方法一
## 调用 cousul api  
curl -vvv --request PUT 'http://$cousul_api/v1/agent/service/deregister/$pgw_addr_$pgw_port'
eg: curl -vvv --request PUT 'http://localhost:8500/v1/agent/service/deregister/1.1.1.1_9091'

## 修改 yml 配置文件将 pgw servers 调整到缩容后的数量,避免服务重启时再次注册缩容节点

# 方法二
## 停止缩容节点服务,consul 会将服务踢出, 然后再注销
退出移动版