nomad
文章目录
说明
192.168.33.55 consul-agent(-server) nomad-server
192.168.33.56 consul-agent(-server) nomad-server
192.168.33.57 consul-agent(-server) nomad-server
192.168.33.88 consul-agent(-server=false)
[55,56,57,88].each do |i|
config.vm.define "n#{i}" do |node|
node.vm.network "private_network", ip: "192.168.33.#{i}"
node.vm.synced_folder "/data/vagrant/shell", "/shell"
node.vm.network :forwarded_port, guest: 22, host: "2#{i}22", host_ip: "0.0.0.0"
node.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
node.vm.provision "shell", inline: <<-SHELL
echo "vagrant:vagrant" | sudo chpasswd
mkdir -p /data
chown -R vagrant:vagrant /data
hostnamectl set-hostname n#{i}
SHELL
end
end
下载
# download nomad
curl -Ls https://releases.hashicorp.com/nomad/0.9.1/nomad_0.9.1_linux_amd64.zip -o nomad.zip
unzip nomad.zip
sudo chmod +x nomad
sudo mv nomad /usr/local/bin
# download consul
curl -Ls https://releases.hashicorp.com/consul/1.4.4/consul_1.4.4_linux_amd64.zip -o consul.zip
unzip consul.zip
sudo chmod +x consul
sudo mv consul /usr/local/bin
# sudo mkdir -p /etc/consul.d
# sudo mkdir -p /etc/nomad.d
# sudo mkdir -p /data/consul
# sudo mkdir -p /data/nomad
consul集群
server
# 单机模式
# /usr/local/bin/consul agent -dev
# /usr/local/bin/consul agent -server -bootstrap-expect 1 -data-dir /data/consul -bind=10.10.49.193 -ui -client 0.0.0.0
/usr/local/bin/consul keygen
# 替换"encrypt": "goplCZgdmOFMZ2Q43To0jw=="
# sudo vi /etc/consul.d/config.json
# ==> Multiple private IPv4 addresses found. Please configure one with 'bind' and/or 'advertise'.
sudo /usr/local/bin/consul agent -config-dir /etc/consul.d/
{
"bootstrap_expect": 3,
"server": true,
"client_addr": "0.0.0.0",
"datacenter": "east-aws",
"data_dir": "/data/consul",
"dns_config": {
"enable_truncate": true,
"only_passing": true
},
"encrypt": "goplCZgdmOFMZ2Q43To0jw==",
"leave_on_terminate": true,
"log_level": "INFO",
"log_file": "/var/log/consul/",
"rejoin_after_leave": true,
"ui": true,
"enable_debug": false,
"retry_join": [
"192.168.33.55",
"192.168.33.56",
"192.168.33.57"
],
"retry_interval": "30s",
"start_join": [
"192.168.33.55",
"192.168.33.56",
"192.168.33.57"
],
"disable_update_check": true
}
## 查看端口情况
sudo netstat -tunlp |grep consul
tcp 0 0 192.168.33.55:8300 0.0.0.0:* LISTEN 5687/consul
tcp 0 0 192.168.33.55:8301 0.0.0.0:* LISTEN 5687/consul
tcp 0 0 192.168.33.55:8302 0.0.0.0:* LISTEN 5687/consul
tcp6 0 0 :::8500 :::* LISTEN 5687/consul
tcp6 0 0 :::8600 :::* LISTEN 5687/consul
udp 0 0 192.168.33.55:8301 0.0.0.0:* 5687/consul
udp 0 0 192.168.33.55:8302 0.0.0.0:* 5687/consul
udp6 0 0 :::8600 :::* 5687/consul
## 查看集群节点
consul operator raft list-peers
Node ID Address State Voter RaftProtocol
n55 66c5b93f-24e9-fa4e-9f65-6bbd6376a1b6 192.168.33.55:8300 leader true 3
n56 bc46826a-de43-fe99-79cf-91cac82e5fa1 192.168.33.56:8300 follower true 3
n57 20e7c41b-71c3-4025-e89e-0d715412d552 192.168.33.57:8300 follower true 3
client
## 启动
./consul agent -data-dir="/data/consul" -bind=192.168.33.88 \
-retry-join=192.168.33.55 \
-retry-join=192.168.33.56 \
-retry-join=192.168.33.57 \
-retry-interval=10s \
-datacenter="east-aws" \
-server=false \
-log-level="INFO" \
-client=0.0.0.0
####
####
### 查看端口
sudo netstat -tunlp |grep consul
tcp 0 0 192.168.33.88:8301 0.0.0.0:* LISTEN 28326/./consul
tcp6 0 0 :::8500 :::* LISTEN 28326/./consul
tcp6 0 0 :::8600 :::* LISTEN 28326/./consul
udp 0 0 192.168.33.88:8301 0.0.0.0:* 28326/./consul
udp6 0 0 :::8600 :::* 28326/./consul
## 查看成员
consul members
Node Address Status Type Build Protocol DC Segment
n55 192.168.33.55:8301 alive server 1.4.4 2 east-aws <all>
n56 192.168.33.56:8301 alive server 1.4.4 2 east-aws <all>
n57 192.168.33.57:8301 alive server 1.4.4 2 east-aws <all>
n88 192.168.33.88:8301 alive client 1.4.4 2 east-aws <default>
systemd
[Unit]
Description=Consul Startup process
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash -c '/usr/local/bin/consul agent -bind=192.168.33.55 -config-dir /etc/consul.d/'
ExecStop=/usr/local/bin/consul leave
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStartSec=0
[Install]
WantedBy=default.target
sudo vi /lib/systemd/system/consul.service;
sudo systemctl daemon-reload
sudo systemctl enable consul.service
sudo systemctl start consul.service
sudo systemctl status consul.service
端口
- 8600 dns
- 8500 http
- 8501 https
- 8502 grpc
- 8300 server
- 8301 serf_lan
- 8302 serf_wan
HTTP API
#############################
# kv - Key/Value存储
# agent - Agent控制
# catalog - 管理nodes和services
# health - 管理健康监测
# session - Session操作
# acl - ACL创建和管理event - 用户Events
# status - Consul系统状态
# /v1/agent/checks : 返回本地agent注册的所有检查(包括配置文件和HTTP接口)
# /v1/agent/services : 返回本地agent注册的所有 服务
# /v1/agent/members : 返回agent在集群的gossip pool中看到的成员
# /v1/agent/self : 返回本地agent的配置和成员信息/v1/agent/join/<address> : 触发本地agent加入node/v1/agent/force-leave/<node>>: 强制删除node
# /v1/agent/check/register : 在本地agent增加一个检查项,使用PUT方法传输一个json格式的数据/v1/agent/check/deregister/<checkID> : 注销一个本地agent的检查项/v1/agent/# check/pass/<checkID> : 设置一个本地检查项的状态为passing/v1/agent/check/warn/<checkID> : 设置一个本地检查项的状态为warning/v1/agent/check/fail/<checkID> : 设置一个本地检查项的状态为critical
# /v1/agent/service/register : 在本地agent增加一个新的服务项,使用PUT方法传输一个json格式的数据/v1/agent/service/deregister/<serviceID> : 注销一个本地agent的服务项
# /v1/catalog/register : Registers a new node, service, or check/v1/catalog/deregister : Deregisters a node, service, or check/v1/catalog/datacenters : Lists known datacenters
# /v1/catalog/nodes : Lists nodes in a given DC
# /v1/catalog/services : Lists services in a given DC
# /v1/catalog/service/<service> : Lists the nodes in a given service
# /v1/catalog/node/<node> : Lists the services provided by a node
# /v1/healt/node/<node>: 返回node所定义的检查,可用参数?dc=
# /v1/health/checks/<service>: 返回和服务相关联的检查,可用参数?dc=
# /v1/health/service/<service>: 返回给定datacenter中给定node中service
# /v1/health/state/<state>: 返回给定datacenter中指定状态的服务,state可以是"any", "unknown", "passing", "warning", or "critical",可用参数?dc=
# /v1/session/create: Creates a new session
# /v1/session/destroy/<session>: Destroys a given session
# /v1/session/info/<session>: Queries a given session
# /v1/session/node/<node>: Lists sessions belonging to a node
# /v1/session/list: Lists all the active sessions
# /v1/acl/create: Creates a new token with policy
# /v1/acl/update: Update the policy of a token
# /v1/acl/destroy/<id>: Destroys a given token
# /v1/acl/info/<id>: Queries the policy of a given token
# /v1/acl/clone/<id>: Creates a new token by cloning an existing token
# /v1/acl/list: Lists all the active tokens
# /v1/status/leader : 返回当前集群的Raft leader
# /v1/status/peers : 返回当前集群中同事
#############################
# 获取服务
curl -s http://127.0.0.1:8500/v1/catalog/services |jq
# 集群成员
curl -s http://127.0.0.1:8500/v1/agent/members |jq
# kv
# kv 新增
curl --request PUT --data "hehe" http://127.0.0.1:8500/v1/kv/my-key
# kv 查询
curl -s http://127.0.0.1:8500/v1/kv/my-key |jq -r '.[].Value' |base64 -d
# kv 删除
curl --request DELETE http://127.0.0.1:8500/v1/kv/my-key
# 服务注册
curl -X PUT -d '{"id":"tomcat1","name":"tomcat","address":"192.168.33.101","port":9999,"tags":["dev"],"checks":[{"http":"http://192.168.33.101:9999","interval":"1s"}]}' http://127.0.0.1:8500/v1/agent/service/register
curl -X PUT -d '{"id":"tomcat2","name":"tomcat","address":"192.168.33.102","port":9999,"tags":["dev"],"checks":[{"http":"http://192.168.33.102:9999","interval":"1s"}]}' http://127.0.0.1:8500/v1/agent/service/register
curl -X PUT -d '{"id":"tomcat3","name":"tomcat","address":"192.168.33.109","port":9999,"tags":["dev"],"checks":[{"http":"http://192.168.33.109:9999","interval":"1s"}]}' http://127.0.0.1:8500/v1/agent/service/register
# 服务查询
curl -s http://127.0.0.1:8500/v1/catalog/service/tomcat\?pretty
# 检查服务
curl -s http://127.0.0.1:8500/v1/health/service/tomcat\?pretty | grep -A 2 Status
curl -GLs http://127.0.0.1:8500/v1/health/checks/tomcat --data-urlencode 'pretty' | grep -A 3 Status
# 取消注册服务
curl -X PUT http://127.0.0.1:8500/v1/agent/service/deregister/my-service-id
# dns发现
dig @127.0.0.1 -p 8600 tomcat.service.consul SRV
#################################################
# bootstrap server
sudo docker run -d -p 18300:8300 -p 18330:8301 -p 18360:8302 -p 18500:8500 -p 18600:8600 --name docker-consul-0 consul agent -server -bootstrap
# 获取 docker-consul-0 的 IP 地址
# docker inspect -f '{{.NetworkSettings.IPAddress}}' docker-consul-0`
sudo docker run -d -p 18301:8300 -p 18331:8301 -p 18361:8302 -p 18501:8500 -p 18601:8600 --name docker-consul-1 consul agent -server -join=`sudo docker inspect -f '{{.NetworkSettings.IPAddress}}' docker-consul-0`
sudo docker run -d -p 18302:8300 -p 18332:8301 -p 18362:8302 -p 18502:8500 -p 18602:8600 --name docker-consul-2 consul agent -server -join=`sudo docker inspect -f '{{.NetworkSettings.IPAddress}}' docker-consul-0`
sudo docker run -d -p 18303:8300 -p 18333:8301 -p 18363:8302 -p 18503:8500 -p 18603:8600 --name docker-consul-3 consul agent -server -join=`sudo docker inspect -f '{{.NetworkSettings.IPAddress}}' docker-consul-0`
sudo docker run -d -p 18304:8300 -p 18334:8301 -p 18364:8302 -p 18504:8500 -p 18604:8600 --name docker-consul-4 consul agent -client -join=`sudo docker inspect -f '{{.NetworkSettings.IPAddress}}' docker-consul-0`
nomad集群
server
sudo vi /etc/nomad.d/server.conf
log_level = "DEBUG"
data_dir = "/data/nomad"
name = "client1"
bind_addr = "0.0.0.0"
advertise {
http = "192.168.33.51"
rpc = "192.168.33.51"
serf = "192.168.33.51"
}
ports {
http = 4646
rpc = 4647
serf = 4648
}
client {
enabled = true
servers = ["192.168.33.51:4647"]
options {
"driver.raw_exec.enable" = "1"
}
}
server {
enabled = true
bootstrap_expect = 1
}
/usr/local/bin/nomad agent -config=/etc/nomad.d
systemd
参考
上次更新 2019-01-05
原始文档 查看本文 Markdown 版本 »