社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
本文源自官方部署文档和其他网友的一些资料,有不对之处请帮助改正。
以下是单数据中心的部署架构图
所有的要部署consul的host都必须包含如下几部(systemd的配置是可选的)
如果是linux主机,可是使用curl工具在官网https://releases.hashicorp.com/consul/下载consul的release zip包,版本先去官网查一下选择最新的即可。
CONSUL_VERSION="1.5.1"
curl --silent --remote-name https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip
解压缩下载的包。改变consul的拥有者为root组root用户。将consul可执行文件移动到/ usr / local / bin /。 检查consul是否可用。
unzip consul_${CONSUL_VERSION}_linux_amd64.zip
sudo chown root:root consul
sudo mv consul /usr/local/bin/
consul --version
启用consul命令的自动补全功能
consul -autocomplete-install
complete -C /usr/local/bin/consul consul
创建一个唯一的非特权系统用户来运行Consul并创建其数据目录。(可选)
sudo useradd consul
sudo mkdir --parents /opt/consul
sudo chown --recursive consul:consul /opt/consul
Systemd使用默认使用documented sane ,所以只有非默认值需要在配置文件中配置。
在/etc/systemd/system/ 路径下创建 consul.service文件
sudo touch /etc/systemd/system/consul.service
将如下配置添加到consul.service文件:
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/consul.d/consul.hcl
[Service]
User=consul
Group=consul
ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d/
ExecReload=/usr/local/bin/consul reload
KillMode=process
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
为[Unit]节设置以下参数:
Description
- 用于描述consul server
Documentation
- 链接到consul文档
Requires
- 配置网络服务的需要依赖
After
- 在consul server启动之前,配置网络服务启动时的排序依赖性
ConditionFileNotEmpty
- 在consul服务启动之前检查配置文件是否为空
为[Service]节设置以下参数:
User
, Group
- 使用consul用户运行consul
ExecStart
- 使用agent参数和配置文件的路径启动consul
ExecReload
-向consul发送重载信号以触发consul配置文件的重新加载
KillMode
- 将consul作为一个单独的进程
Restart
- 重启consul,除非它返回完整的退出代码
LimitNOFILE
- 为文件描述符设置上限
为[Install]节设置以下参数:
WantedBy
- 创建对使用多用户运行级别启动consul时的弱依赖
Consul默认documented sane ,所以只有非默认值才需要设置在配置文件中。可以从多个文件中读取配置,并按词汇顺序加载。
Consul server代理配置通常情况下是client代理配置的超集。 所以我们在consul.hcl中指定所有Consul代理使用的公共配置,并在server.hcl中指定server特定的配置。
生成配置文件
创建consul.d文件夹,在 /etc/consul.d/下创建一个名为
consul.hcl的配置文件,将文件夹和文件的拥有者付给consul用户,将文件的权限改为consul用户可读写,consul组可写,其他用户组无权限。
sudo mkdir --parents /etc/consul.d
sudo touch /etc/consul.d/consul.hcl
sudo chown --recursive consul:consul /etc/consul.d
sudo chmod 640 /etc/consul.d/consul.hcl
在consul.hcl的配置文件添加如下配置
datacenter = "dc1"
data_dir = "/opt/consul"
encrypt = "Luj2FZWwlt8475wD1WtwUQ=="
将datacenter值替换为将用于部署Consul集群的数据中心的标识符。将encrypt参数值替换为运行consul keygen命令的输出(该台机器上必须已经安装了consul可执行文件)。 顺便解释下这几参数的意义:
datacenter
- consul agenct运行所在的数据中心。data_dir
- consul agent 存储状态信息的数据目录。encrypt
- 指定用于加密Consul网络传输的密钥。
自动加入集群
retry_join参数通过使用DNS地址,IP地址或cloud auto-join configuration使所有的consul agent自动形成集群。
将retry_join参数添加到consul.hcl配置文件中
retry_join = ["172.16.0.11"]
将retry_join的值替换为consul agent启动时要加入的另一个agent的地址。
Performance 节
performance
节允许调整Consul中不同子系统的性能。
将Performance配置添加到consul.hcl配置文件中
performance {
raft_multiplier = 1
}
raft_multiplier
- 该参数是整型的倍数,用于缩放Raft timing 参数。设置为1时将会使Raft达到最优的性能。Raft和raft_multiplier设置的更多信息,请参server performance文档。
Telemetry
telemetry
节为Consul指定了各种配置,以便将指标发布到上游系统。
如果您决定为Consul配置各种观测数据,可参阅Monitoring and Metrics guide
在/etc/consul.d/ 路径下的创建一个server.hcl 文件。
sudo mkdir --parents /etc/consul.d
sudo touch /etc/consul.d/server.hcl
sudo chown --recursive consul:consul /etc/consul.d
sudo chmod 640 /etc/consul.d/server.hcl
添加如下配置到server.hcl中:
server = true
bootstrap_expect = 3
将bootstrap_expect的值替换为要使用的consul server的值,一般情况下为3-5个。
server - 此标志用于控制consul agent是处于server模式还是client模式。
bootstrap-expect - 此标志提供datacenter中预期的server数。 该值可以不提供,如果提供则必须与集群中其他server设置的数量一致。
Consul的管理界面
Consul具有基于Web的用户界面,允许使用图形用户界面查看所有sever,node,intention等等。
注意:应该考虑在特定的Consul host而不是所有的host上运行Consul UI。
(可选)将UI配置添加到server.hcl配置文件以启用Consul UI:
ui = true
Consul client agent通常只是server agenct所需配置的子集。 所有Consul client都可以使用创建Consul server时创建的consul.hcl文件。 如果添加了特定的配置(如host 标识符),则需要单独设置这些配置。
使用sudo su - consul 切换到consul用户。
如果系统有systemd工具并且按照上述步骤配置了/etc/systemd/system/consul.service文件,则可以使用如下命令启动consul
sudo systemctl enable consul
sudo systemctl start consul
sudo systemctl status consul
如果系统没有systemd,则使用命令
consul agent -config-dir=/etc/consul.d/
启动consul
在部署过程中有几个需要注意:
1 . 所有consul agent配置相同的encrypt,否则启动时会出现无法encrypt错误。
2 . 在某个agent更改了配置,必须删除/opt/consul下面的所有的文件然后重启consul,否则新配置不会生效。
3. 可以在任意部署了consul agent的机器上运行consul members 查看集群中所有节点的状态。
上述步骤主要描述了如何搭建一个consul集群,如果是单机运行consul,则可以使用
$ consul agent -dev
==> Starting Consul agent...
==> Consul agent running!
Version: 'v1.5.1'
Node ID: '18339e2f-2b5e-cfa8-3ebe-a60cba24bb2a'
Node name: 'Kaitlins-MBP'
Datacenter: 'dc1' (Segment: '<all>')
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false
==> Log data will now stream in as it occurs:
2019/06/12 12:39:11 [DEBUG] agent: Using random ID "18339e2f-2b5e-cfa8-3ebe-a60cba24bb2a" as node ID
2019/06/12 12:39:11 [DEBUG] tlsutil: Update with version 1
2019/06/12 12:39:11 [DEBUG] tlsutil: OutgoingRPCWrapper with version 1
2019/06/12 12:39:11 [DEBUG] tlsutil: IncomingRPCConfig with version 1
2019/06/12 12:39:11 [DEBUG] tlsutil: OutgoingRPCWrapper with version 1
2019/06/12 12:39:11 [INFO] raft: Initial configuration (index=1): [{Suffrage:Voter ID:18339e2f-2b5e-cfa8-3ebe-a60cba24bb2a Address:127.0.0.1:8300}]
2019/06/12 12:39:11 [INFO] raft: Node at 127.0.0.1:8300 [Follower] entering Follower state (Leader: "")
2019/06/12 12:39:11 [INFO] serf: EventMemberJoin: Kaitlins-MBP.dc1 127.0.0.1
2019/06/12 12:39:11 [INFO] serf: EventMemberJoin: Kaitlins-MBP 127.0.0.1
2019/06/12 12:39:11 [INFO] consul: Handled member-join event for server "Kaitlins-MBP.dc1" in area "wan"
2019/06/12 12:39:11 [INFO] consul: Adding LAN server Kaitlins-MBP (Addr: tcp/127.0.0.1:8300) (DC: dc1)
2019/06/12 12:39:11 [DEBUG] agent/proxy: managed Connect proxy manager started
2019/06/12 12:39:11 [INFO] agent: Started DNS server 127.0.0.1:8600 (tcp)
2019/06/12 12:39:11 [INFO] agent: Started DNS server 127.0.0.1:8600 (udp)
2019/06/12 12:39:11 [INFO] agent: Started HTTP server on 127.0.0.1:8500 (tcp)
2019/06/12 12:39:11 [INFO] agent: started state syncer
2019/06/12 12:39:11 [INFO] agent: Started gRPC server on 127.0.0.1:8502 (tcp)
2019/06/12 12:39:11 [WARN] raft: Heartbeat timeout from "" reached, starting election
2019/06/12 12:39:11 [INFO] raft: Node at 127.0.0.1:8300 [Candidate] entering Candidate state in term 2
2019/06/12 12:39:11 [DEBUG] raft: Votes needed: 1
2019/06/12 12:39:11 [DEBUG] raft: Vote granted from 18339e2f-2b5e-cfa8-3ebe-a60cba24bb2a in term 2. Tally: 1
2019/06/12 12:39:11 [INFO] raft: Election won. Tally: 1
2019/06/12 12:39:11 [INFO] raft: Node at 127.0.0.1:8300 [Leader] entering Leader state
2019/06/12 12:39:11 [INFO] consul: cluster leadership acquired
2019/06/12 12:39:11 [INFO] consul: New leader elected: Kaitlins-MBP
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!