Nomad组件部署clickhouse-job

#作者:stackofumbrella

文章目录

首先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并清理缓存
相关推荐
麦兜和小可的舅舅9 小时前
ClickHouse Drop Table On Cluster 故障分析和原理解析
clickhouse·kafka
重生之绝世牛码2 天前
Linux软件安装 —— ClickHouse单节点安装(rpm安装、tar安装两种安装方式)
大数据·linux·运维·数据库·clickhouse·软件安装·clickhouse单节点
麦兜和小可的舅舅2 天前
Spark to ClickHouse由于DNS问题导致Stage重试的Task竞态分析和问题解决过程
clickhouse·spark
重生之绝世牛码3 天前
Linux软件安装 —— ClickHouse集群安装(集成Zookeeper)+ chproxy负载均衡
大数据·linux·数据库·clickhouse·软件安装·clickhouse集群安装·clickhouse负载均衡
无级程序员5 天前
clickhouse创建用户,登录出错的问题,code 516
linux·服务器·clickhouse
billy_gisboy5 天前
01-Windows+DockerDesktop部署ClickHouse
windows·clickhouse
billy_gisboy6 天前
02-Windows DockerDesktop部署ClickHouse,解决指定磁盘数据持久化问题与WSL2调优
windows·clickhouse
hkNaruto6 天前
【运维】低配服务器ClickHouse Docker部署故障复盘与优化配置指南
运维·服务器·clickhouse
有梦想有行动6 天前
ClickHouse的Partition和Part概念
linux·数据库·clickhouse