Giter Club home page Giter Club logo

dynamic-sharding's Introduction

k8s零基础入门运维课程

k8s纯源码解读教程(3个课程内容合成一个大课程)

k8s运维进阶调优课程

k8s管理运维平台实战

k8s二次开发课程

cicd 课程

prometheus全组件的教程

go语言课程

直播答疑sre职业发展规划

k8s从零基础入门到专家到运维大师

学习方向 分析进阶视频 教程地址 备注
01_k8s零基础入门实战 地址 地址
02_k8s纯源码解读课程,助力你变成k8s专家 地址 地址
03_k8s底层原理和源码讲解之精华篇 地址 地址
04_k8s底层原理和源码讲解之进阶篇 地址 地址

01 新手课程

02 源码解读课程

03 进阶二开课程

k8s 开发篇

学习方向 分析进阶视频 教程地址 备注
01_k8s运维大师课程 地址 地址
02_k8s-operator和crd实战开发 助你成为k8s专家 地址 地址
02_k8s二次开发之基于真实负载的调度器 地址 地址

prometheus监控从入门到专家之路

学习方向 分析进阶视频 教程地址 备注
01_prometheus零基础入门,grafana基础操作,主流exporter采集配置 地址 地址
02_prometheus全组件配置使用、底层原理解析、高可用实战 地址 地址
03_kube-prometheus和prometheus-operator实战和原理介绍 地址 地址
04_prometheus-thanos使用和源码解读 地址 地址
05_prometheus源码讲解和二次开发 地址 地址

golang运维开发之从0基础到运维平台

学习方向 分析进阶视频 教程地址 备注
01_golang基础课程 地址 地址
02_golang运维平台实战,服务树,日志监控,任务执行,分布式探测 地址 地址
03_golang运维开发实战课程之k8s巡检平台] 地址 地址

cicd实战

学习方向 分析进阶视频 教程地址 备注
01_tekton全流水线实战和pipeline运行原理源码解读 地址 地址

直播答疑sre职业发展规划

关于白嫖和付费

  • 白嫖当然没关系,我已经贡献了很多文章和开源项目,当然还有免费的视频
  • 但是客观的讲,如果你能力超强是可以一直白嫖的,可以看源码。什么问题都可以解决
  • 看似免费的资料很多,但大部分都是边角料,核心的东西不会免费,更不会有大神给你答疑
  • thanos和kube-prometheus如果你对prometheus源码把控很好的话,再加上k8s知识的话就觉得不难了

架构图

image

pgw是什么

项目介绍

pgw打点特点

  • 没有使用grouping对应的接口uri为
http://pushgateway_addr/metrics/job/<JOB_NAME>
  • 使用grouping对应的接口uri为
http://pushgateway_addr/metrics/job/<JOB_NAME>/<LABEL_NAME>/<LABEL_VALUE>
  • put/post方法区别在于 put只替换metrics和job相同的 post替换label全部相同的

pgw单点问题

如果简单把pgw挂在lb后面的问题

  • lb后面rr轮询:如果不加控制的让push数据随机打到多个pushgateway实例上,prometheus无差别scrape会导致数据错乱,表现如下

image image

  • 根本原因是在t1时刻 指标的值为10 t2时刻 值为20
  • t1时刻轮询打点到了pgw-a上 t2时刻打点到了pgw-b上
  • 而promethues采集的时候两边全都采集导致本应该一直上升的值呈锯齿状

如果对uri做静态一致性哈希+prome静态配置pgw

  • 假设有3个pgw,前面lb根据request_uri做一致性哈希
  • promethues scrape时静态配置3个pgw实例
  - job_name: pushgateway
    honor_labels: true
    honor_timestamps: true
    scrape_interval: 5s
    scrape_timeout: 4s
    metrics_path: /metrics
    scheme: http
    static_configs:
    - targets:
      - pgw-a:9091
      - pgw-b:9091

  • 结果是可以做到哈希分流,但无法解决某个pgw实例挂掉,哈希到这个实例上面的请求失败问题

解决方案是: 动态一致性哈希分流+consul service_check

image

  • dynamic-sharding服务启动会根据配置文件注册pgw服务到consul中
  • 由consul定时对pgw server做http check
  • push请求会根据请求path做一致性哈希分离,eg:
# 仅job不同
- http://pushgateway_addr/metrics/job/job_a
- http://pushgateway_addr/metrics/job/job_b
- http://pushgateway_addr/metrics/job/job_c
# label不同
- http://pushgateway_addr/metrics/job/job_a/tag_a/value_a
- http://pushgateway_addr/metrics/job/job_a/tag_a/value_b
  • 当多个pgw中实例oom或异常重启,consul check service会将bad实例标记为down - dynamic-sharding轮询检查实例数量变化
  • dynamic-sharding 会Watch pgw节点数量变化
  • 重新生成哈希环,rehash将job分流
  • 同时promethues使用consul服务发现的pgw实例列表,无需手动变更
  • 采用redirect而不处理请求,简单高效
  • dynamic-sharding本身无状态,可启动多个实例作为流量接入层和pgw server之间
  • 扩容时同时也需要重启所有存量pgw服务
  • 不足:没有解决promethues单点问题和分片问题 项目地址: https://github.com/ning1875/dynamic-sharding

使用指南

编译或下载

# 编译build
$ git clone https://github.com/ning1875/dynamic-sharding.git
$ cd  dynamic-sharding && make 
# 下载 :releases中直接下载tag包
# 如https://github.com/ning1875/dynamic-sharding/releases/download/v2.0/dynamic-sharding-2.0.linux-amd64.tar.gz

修改配置

# 修改配置文件
# 补充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会将服务踢出,然后再注销

使用python sdk时遇到的 urllib2.HTTPError: HTTP Error 307: Temporary Redirect 问题

原因

  • 查看代码得知python sdk在构造pgw实例时使用默认的handler方法,而其没有follow_redirect导致的
def push_to_gateway(gateway, job, registry, grouping_key=None, timeout=30,handler=default_handler):

解决方法

  • 使用requests库自定义一个handler,初始化的时候指定
def custom_handle(url, method, timeout, headers, data):
    def handle():
         h = {}
         for k, v in headers:
            h[k] = v
         if method == 'PUT':
            resp = requests.put(url, data=data, headers=h, timeout=timeout)
         elif method == 'POST':
            resp = requests.post(url, data=data, headers=h, timeout=timeout)
         elif method == 'DELETE':
            resp = requests.delete(url, data=data, headers=h, timeout=timeout)
         else:
            return
         if resp.status_code >= 400:
            raise IOError("error talking to pushgateway: {0} {1}".format(resp.status_code, resp.text))
    return handle
 
# push_to_gateway(push_addr, job='some_job', registry=r1, handler=custom_handle)

dynamic-sharding's People

Contributors

dependabot[bot] avatar ning1875 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

dynamic-sharding's Issues

English readme

Could it be possible to have a documentation on how to setup your pushgateway in HA mode ?

Thanks

讨论

为啥不使用代理模式,而要使用redirect来实现呢?

日志咨询

Pushgateway 本身性能很差,我们用单机的时候经常上报业务数据失败,用curl测试的时候有的时候时间需要20多秒才能成功,经常要重启pushgateway服务,否则会出现误报的情况。现在用集群感觉效果不错。想咨询一下日志,这两条的日志是什么意思,第二条97.53的时间可以理解用户端push成功总共花费的时间吗?谢谢!
May 18 10:15:42 pushgateway01 dynamic-sharding[2013]: 2023/05/18 10:15:42 [PushMetrics][request_path:/metrics/job/job-rec/instance/192.168.94.43][redirect_url:http://192.168.74.233:9092/metrics/job/job-rec/instance/192.168.94.43]

May 18 10:15:42 pushgateway01 dynamic-sharding[2013]: [GIN] 2023/05/18 - 10:15:42 | 307 | 97.53µs | 192.168.74.157 | POST "/metrics/job/job-rec/instance/192.168.94.43"

127.0.0.1:8500: connect: connection refused

图片

consul_server:
  # consul api 地址
  addr: localhost:8500
  username:
  password:
  # promethues中consul sd中pgw service name
  register_service_name: pushgateway
# 服务web addr
http_listen_addr: :9292
# pgw信息
pushgateway:
  port: 9091
  servers:
    - 10.0.28.239
    - 10.0.29.24

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.