工厂模式 list webview rspec path request underscorejs axure时间选择控件 java上传图片 kali重启网卡 判断bigdecimal是否为空 pythonlist python中sort函数 python配置环境 input函数python python搭建网站 python安装模块 搭建java开发环境 java重载和重写的区别 java接口类型 javafloat java实现栈 java文件路径 linux系统教程 linux镜像安装 乱码查看器 图片批量处理工具 mssql 多面硬币 音乐狂app c4dr19 adobe卸载工具 毕业证件照 ug拔模 jq循环 网络驱动 fastcgi 抽出滤镜下载 视频旋转软件 c4dr20
当前位置: 首页 > 学习教程  > 编程语言

clickhouse代理Chproxy

2021/1/13 19:32:00 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

为什么开发了Chproxy 由于各种原因,ClickHouse 的最大执行时间、最大并发语句可能会超过 max_execution_time 和max_concurrent_queries 的限制: max_execution_time 可能会因为当前实现的缺陷而被超过。 max_concurrent_queries 只针对每个节点的限制。…

为什么开发了Chproxy

由于各种原因,ClickHouse 的最大执行时间、最大并发语句可能会超过 max_execution_timemax_concurrent_queries 的限制:
max_execution_time 可能会因为当前实现的缺陷而被超过。
max_concurrent_queries 只针对每个节点的限制。如果是在集群节点上,是没法限制集群整体的并发查询数量。

这种 “泄漏” 的限制可能会导致所有集群节点的高资源使用率。遇到这个问题后,我们不得不在我们的 ClickHouse 集群前维护 2 个不同的 http 代理 —— 一个用于在集群节点间分散 INSERT 操作,另一个用于发送 SELECT 到一个专用节点,在该节点再通过某种方式进行限制。这样很不健壮,管理起来也很不方便,所以我们开发了 Chproxy。:)

安装 配置

cd /usr/local/chproxy/ && tar -xvzf chproxy-linux-amd64-v1.14.0.tar.gz
cat << EOF > /usr/local/chproxy/config.yml
hack_me_please: false
log_debug: true
server:
  http:
  		# chproxy监听的端口
      listen_addr: ":8321"
      # 允许访问的网段
      allowed_networks: ["172.0.0.0/8","192.0.0.0/8"]
      read_timeout: 3m
param_groups:
		# jdbc url参数配置
  - name: "test"
    params:
      - key: "max_query_size"
        value: "100000000"
      - key: "max_ast_elements"
        value: "10000000"
      - key: "max_expanded_ast_elements"
        value: "10000000"
users:
	# 用户信息[写入权限],使用此用户名和密码连接clickhouse
  - name: "insert"
    password: "123456"
    to_cluster: "write_cluster"
    to_user: "default"
    params: "test"
    allow_cors: true
    cache: "longterm"
    # 用户信息[只读权限],使用此用户名和密码连接clickhouse,如果没有可以不写
  - name: "readonly"
    password: "123456"
    to_cluster: "readonly-cluster"
    to_user: "readonly"
    cache: "shotterm"
    params: "test"
    allow_cors: true
    max_concurrent_queries: 200
    max_execution_time: 2m
clusters:
		# 集群信息[写入权限],注意替换为你自己的clickhouse地址
  - name: "write_cluster"
  	#clichouse集群地址,多个以逗号分隔
    nodes: [
      "mypc01:8123"
    ]
    # clickhouse 中你配置的用户名和密码
    users:
     - name: "default"
       password: "123456"
   #clichouse集群地址[只读],多个以逗号分隔,如果没有可以不写
  - name: "readonly-cluster"
    nodes: [
      "mypc01:8123"
    ]
    # clickhouse 中你配置的用户名和密码
    users:
     - name: "readonly"
       password: "123456"
 
caches:
		# chproxy自己的缓存,默认是在磁盘上
  - name: "longterm"
    dir: "/data1/chproxy/cache/"
    max_size: 950Mb
    expire: 30s
  - name: "shotterm"
    dir: "/data1/chproxy/cache-shot/"
    max_size: 950Mb
    expire: 30s
EOF 

启动

./chproxy --config  /usr/local/chproxy/config.yml

总结

  • chproxy就是为了实现clickhouse的负载均衡,比如insert用一个集群,select用另一个集群

参考

chproxy/README-CN.md at master · Vertamedia/chproxy
https://github.com/Vertamedia/chproxy/blob/master/README-CN.md


本文链接: http://www.dtmao.cc/news_show_600092.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?