news 2026/1/29 12:14:29

Nomad组件部署clickhouse-job

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nomad组件部署clickhouse-job

#作者:stackofumbrella

文章目录

  • 首先nomad组件配置meta、host_volume
  • 启动nomad并查询meta
  • clickhouse配置
  • 配置clickhouse.hcl指定node部署

首先nomad组件配置meta、host_volume

# /etc/nomad.d/nomad.hcl datacenter = "dc1" data_dir = "/opt/nomad/data" # 启用 Server 模式 server { enabled = true bootstrap_expect = 3 server_join { retry_join = [ "192.168.123.70", "192.168.123.71", "192.168.123.72" ] } } # 启用 Client 模式(允许本机运行任务) client { enabled = true servers = [ "192.168.123.70:4647", "192.168.123.71:4647", "192.168.123.72:4647" ] # Host Volumes —— 业务需要的持久化目录必须在client上声明 host_volume "ck-data" { path = "/shaxiang/ck/data" read_only = false } host_volume "ck-config" { path = "/shaxiang/ck/conf" read_only = false } host_volume "ck-users" { path = "/shaxiang/ck/user" read_only = false } # node_class = "worker" # ✅ meta 必须在这里!作为 client 的子配置 meta { job_constraint = "shard-2" } } # 绑定地址 addresses { http = "0.0.0.0" rpc = "0.0.0.0" serf = "0.0.0.0" } ports { http = 4646 rpc = 4647 serf = 4648 } consul { address = "127.0.0.1:8500" auto_advertise = true }

启动nomad并查询meta

/etc/systemd/system/nomad.service [Unit] Description=Nomad After=network.target [Service] Type=simple User=root ExecStart=/usr/local/bin/nomad agent -config=/etc/nomad.d Restart=on-failure [Install] WantedBy=multi-user.target systemctl daemon-reload systemctl enable nomad systemctl start nomad systemctl status nomad 查询命令 nomad node status [options] [<node-id>] 不带参数:列出所有节点 带 <node-id>:查看指定节点的详细信息 nomad node status -json [<node-id>] | jq '.Meta.job_constraint' 会输出配置的meta的volume视为正常 nomad node status -verbose [<node-id>] | grep ck #查看你的host_volume是否声明 ck-config false /shaxiang/ck/conf ck-data false /shaxiang/ck/data ck-users false /shaxiang/ck/user

clickhouse配置

首先使用run启动ck的容器,ps查看配置文件(config、users),cp到主机。
docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse-server:25.10

配置clickhouse.hcl指定node部署

# 定义一个 Nomad Job,名字为 clickhouse01 job "clickhouse01" { datacenters = ["dc1"] # 指定 Job 运行的数据中心 type = "service" # Job 类型为 service(长期运行的服务) priority = 100 # 调度优先级 # 定义 Task Group(任务组),名字同样为 clickhouse01 group "clickhouse01" { count = 1 # 期望部署的 Task 数量 # ======== Host Volume 定义 ======== # volume 必须在 group 内部、task 之前定义 volume "ck-data" { type = "host" # 本地宿主机目录 source = "ck-data" # 指定 host_volume 名称(非绝对路径) read_only = false # 可读写 } volume "ck-config" { type = "host" source = "ck-config" # 对应 client 上声明的 host_volume 名称 read_only = false # 配置文件需要写权限时设为 false } volume "ck-users" { type = "host" source = "ck-users" read_only = false } # ======== 节点约束 ======== # 仅在 meta.job_constraint = "shard-2" 的节点上运行 constraint { attribute = "${meta.job_constraint}" value = "shard-2" } # ======== 网络配置 ======== network { mode = "host" # 使用宿主机网络 port "http" { static = 8123 } # HTTP 服务端口 port "tcp" { static = 9000 } # TCP 服务端口 } # ======== Task 定义 ======== task "clickhouse" { #定义具体容器名称以及日志文件名称 driver = "docker" # 使用 Docker 驱动 # Docker 配置 config { image = "registry.cn-hangzhou.aliyuncs.com/ali_cloud_images/clickhouse-server:25.10" # 镜像 ports = ["http", "tcp"] # 端口映射,和 network 部分对应 } # ======== 挂载 Volume ======== volume_mount { volume = "ck-data" # 对应上面定义的 volume 名称 destination = "/var/lib/clickhouse" # 容器内部路径 } volume_mount { volume = "ck-config" destination = "/etc/clickhouse-server/config.d" # 配置文件目录 } volume_mount { volume = "ck-users" destination = "/etc/clickhouse-server/users.d" # 用户权限文件目录 } # ======== 环境变量 ======== env { CLICKHOUSE_PASSWORD = "ck@123" # ClickHouse 用户密码 } # ======== 资源限制 ======== resources { cpu = 2000 # CPU 单位为 MHz(2 核) memory = 4096 # 内存单位为 MB(4 GB) } # ======== 服务注册和健康检查 ======== service { name = "clickhouse01" # Nomad/Consul 注册服务名称 port = "http" # 对应 network 定义的 http 端口 check { # 健康检查 name = "alive" type = "http" # HTTP 检查 path = "/ping" # 检查路径 interval = "20s" # 每 20 秒检查一次 timeout = "10s" # 超时 10 秒 } } } } }

nomad job validate
验证Job文件语法和逻辑

作用
检查 .nomad 文件是否符合 HCL 语法
验证资源请求、网络、卷、约束等配置是否合法
不会连接 Nomad 集群,纯本地校验(安全!)

基本用法
nomad job validate clickhouse.hcl
成功输出示例
Job validation successful.

nomad job run (run之前对应的目录要给到权限)
提交并运行Job

作用
将 Job 提交到 Nomad 集群
触发调度器分配任务到 Client 节点
如果 Job 已存在,则执行 滚动更新(默认策略)
基本用法
nomad job run clickhouse.hcl

nomad job status [<job-name>]

用来查看 Nomad 中指定 Job 的整体状态。
输出信息包括:
Job ID、Name、Type、Datacenter 等基本信息
Task Group 的数量和状态(Queued、Starting、Running、Failed 等)
Placement Failure(如果调度失败,会显示具体原因)
最新 Deployment 状态
用途:快速判断整个 Job 是否正常运行或有调度问题。

nomad alloc status [<Allocation-id>]

用来查看某个具体Allocation的详细状态。
Allocation 是 Job 中实际运行的任务实例,每个 Task Group 的每个副本都会生成一个 allocation。
输出信息包括:
Allocation ID、对应 Job ID、Node ID
Client Status(pending、running、lost 等)
资源分配情况(CPU、Memory)
Task 内部状态(task name、driver、port 映射、volume mount)
Allocation Addresses(实际宿主机 IP + 端口)

nomad job stop -purge [<job-name>] 停止job并清理缓存
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/28 2:13:08

一键部署:用GTE+SeqGPT打造智能知识库

一键部署&#xff1a;用GTESeqGPT打造智能知识库 1. 为什么你需要一个“能听懂话”的知识库&#xff1f; 你有没有遇到过这样的情况&#xff1a; 在公司内部Wiki里搜“怎么重置数据库连接”&#xff0c;结果跳出一堆Java配置文件和Spring Boot启动日志&#xff1b; 在客服知识…

作者头像 李华
网站建设 2026/1/29 3:30:45

零基础掌握卫星轨道计算:SGP4算法从入门到实战

零基础掌握卫星轨道计算&#xff1a;SGP4算法从入门到实战 【免费下载链接】sgp4 Simplified perturbations models 项目地址: https://gitcode.com/gh_mirrors/sg/sgp4 卫星轨道预测是航天工程的核心技术之一&#xff0c;而SGP4算法作为国际通用的卫星轨道计算标准&…

作者头像 李华
网站建设 2026/1/28 2:12:34

SSD1306命令解析:核心要点通俗解释

以下是对您提供的博文内容进行 深度润色与结构优化后的技术文章 。整体风格更贴近一位资深嵌入式系统工程师在技术社区中分享实战经验的口吻&#xff1a;语言自然、逻辑递进、重点突出&#xff0c;去除了AI生成痕迹和模板化表达&#xff1b;强化了“为什么这么设计”“哪里容…

作者头像 李华
网站建设 2026/1/28 2:12:30

GLM-TTS长文本合成卡顿?分段处理更流畅

GLM-TTS长文本合成卡顿&#xff1f;分段处理更流畅 你是否也遇到过这样的情况&#xff1a;在使用 GLM-TTS 合成一段 300 字的会议纪要、培训讲稿或有声书章节时&#xff0c;界面长时间无响应&#xff0c;进度条卡在 78%&#xff0c;GPU 显存占用飙高&#xff0c;最终生成的音频…

作者头像 李华
网站建设 2026/1/28 2:12:24

unet image Face Fusion如何应对复杂光照?参数优化实战案例

unet image Face Fusion如何应对复杂光照&#xff1f;参数优化实战案例 1. 为什么复杂光照让人脸融合“翻车”&#xff1f; 你有没有试过&#xff1a;明明选了两张很清晰的人脸图&#xff0c;结果融合出来不是脸发灰、就是肤色不一致&#xff0c;甚至眼睛周围泛白、下巴像打了…

作者头像 李华
网站建设 2026/1/29 11:40:46

MGeo模型推理延迟优化:从2s降到200ms的五种方法

MGeo模型推理延迟优化&#xff1a;从2s降到200ms的五种方法 1. 为什么地址匹配要快&#xff1f;真实场景里的“一秒之差” 你有没有遇到过这样的情况&#xff1a;用户在电商App里填收货地址&#xff0c;系统要实时判断他输入的新地址和历史地址是否重复&#xff1b;或者物流调…

作者头像 李华