consul集群部署
# 1,下载二进制
$ wget https://releases.hashicorp.com/consul/1.9.3/consul_1.9.3_linux_amd64.zip
$ unzip consul_1.9.3_linux_amd64.zip ; mv consul /usr/bin/
2
# 2,创建用户及目录
$ useradd consul
$ mkdir -p /data/consul/{config,data,log} && chown -R consul.consul /data/consul
2
# 3,配置文件
# 1,server
配置文件如下:
$ cat /data/consul/config/server.json
{
"datacenter": "consul_nginx",
"data_dir": "/data/consul/data/",
"node_name": "eryajf-test-consul-1",
"server": true,
"bootstrap_expect": 3,
"bind_addr": "{{ GetInterfaceIP \"eth0\" }}",
"client_addr": "0.0.0.0",
"log_json": true,
"log_level": "info",
"log_rotate_max_files": 10,
"log_rotate_duration": "24h",
"log_file": "/data/consul/log/",
"retry_join": [
"10.6.6.14",
"10.6.6.17",
"10.6.6.63"
],
"ui_config": {
"enabled": true
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
配置文件详情参考 (opens new window),上边的说明如下:
datacenter
:此标志控制运行代理的数据中心。如果未提供,则默认为dc1
。Consul 对多个数据中心有一流的支持,但它依赖于正确的配置。同一数据中心中的节点应位于单个 LAN 上。data_dir
:该标志为代理提供了一个数据目录来存储状态。node_name
:节点名字,一般为主机名,如果是三个节点,则往后顺写。server
:指定是否为 server 节点。bootstrap_expect
:在一个 datacenter 中期望提供的 server 节点数目,当该值提供的时候,consul 一直等到达到指定 sever 数目的时候才会引导整个集群,该标记不能和 bootstrap 公用。bind_addr
:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是 0.0.0.0。但如果主机有多个网卡,这个时候会报如下错误:consul[7559]: ==> Multiple private IPv4 addresses found. Please configure one with 'bind' and/or 'advertise'.
1client_addr
:Consul 将绑定客户端接口的地址,包括 HTTP 和 DNS 服务器。默认情况下,这是 127.0.0.1,仅允许环回连接。在 Consul 1.0 及更高版本中,这可以设置为要绑定到的以空格分隔的地址列表。log_json
:此标志使代理能够以 JSON 格式输出日志。默认为 false。log_level
:在 Consul 代理启动后显示的日志级别。默认为info
。可用的日志级别是trace
、debug
、info
、warn
和err
。您始终可以通过consul monitor
(opens new window)并使用任何日志级别连接到代理。此外,可以在配置重新加载期间更改日志级别。log_rotate_max_files
:指定要保留的旧日志文件存档的最大数量。默认为 0(不会删除任何文件)。设置为 -1 以在创建新日志文件时丢弃旧日志文件。log_rotate_duration
:指定日志在需要轮换之前应写入的最大持续时间。必须是持续时间值,例如 30s。默认为 24 小时。log_file
:将所有 Consul 代理日志消息写入文件。此值用作日志文件名的前缀。当前时间戳附加到文件名。如果值以路径分隔符结尾,consul-
则将附加到该值。如果文件名缺少扩展名,.log
则附加。例如,设置log-file
为/var/log/
将导致日志文件路径为/var/log/consul-{timestamp}.log
.log-file
可以-log-rotate-bytes
(opens new window)与-log-rotate-duration (opens new window)结合使用 , 以获得细粒度的日志轮换体验。retry_join
:指定将要置入集群的 IP 列表,如果失败,会自动重试,知道直到成功加入。ui_config
:此对象允许设置多个子键,用于控制 UI 中可用的显示或功能。在 Consul 1.9.0 中添加了使用此节配置 UI。enabled
:这将启用来自该代理的 Web UI 服务。布尔值,默认为 false。在-dev
模式下,默认为 true。其他参数一并介绍下:
dir
:这指定 Web UI 应该从外部目录提供,而不是构建在一个目录中。这允许定制或开发。content_path
:这指定了 Web UI 应该从中提供服务的 HTTP 路径。默认为/ui/
. 相当于-ui-content-path
(opens new window)标志
# 2,client
client 是 consul 客户端,客户端不保存数据,客户端将接收到的请求转发给 Server 端。Server 之间通过局域网或广域网通信实现数据一致性。
每个 Server 或 Client 都是一个 consul agent。
配置文件如下:
{
"datacenter": "consul_nginx",
"data_dir": "/data/consul/data/",
"node_name": "eryajf-test-consul-client-1",
"server": false,
"bind_addr": "{{ GetInterfaceIP \"eth0\" }}",
"client_addr": "0.0.0.0",
"log_json": true,
"log_level": "info",
"log_rotate_max_files": 10,
"log_rotate_duration": "24h",
"log_file": "/data/consul/log/",
"retry_join": ["10.6.6.14", "10.6.6.17", "10.6.6.63"]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
配置说明参考上边。
# 4,systemd 管理文件
添加配置:
$ cat >> /usr/lib/systemd/system/consul.service << EOF
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
[Service]
Type=notify
User=consul
Group=consul
ExecStart=/usr/bin/consul agent -config-dir=/data/consul/config/
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=process
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=10240
LimitNPROC=10240
[Install]
WantedBy=multi-user.target
EOF
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
启动:
$ systemctl daemon-reload
$ systemctl enable consul
$ systemctl start consul
2
3
启动之后就可以直接访问 web 端看到 server 节点了:
以后在慢慢更新 consul 相关的最佳实践!