Consul是HashiCorp开发的一个现代化服务发现平台,允许通过DNS和HTTP接口注册服务。它还提供Service Mesh功能,支持通过TLS建立安全连接,并提供服务间授权。此外,Consul还提供API Gateway用于管理服务访问,以及KV(键值)存储用于保存服务配置。
在本指南中,我们将逐步介绍在AlmaLinux 9上安装多服务器Consul集群的方法。
前提条件
要完成本指南,请确保满足以下条件:
- 两台或更多处于同一网络的AlmaLinux服务器。
- 一个具有管理员权限的非root用户。
系统设置
在第一步中,你将为Consul安装准备AlmaLinux服务器,包括:
- 配置Firewalld开放端口。
- 将SELinux配置为Permissive模式。
配置Firewalld
在安装软件包之前,你必须先在Consul服务器上开放端口。对于基于RHEL的操作系统,你将使用Firewalld来开放端口。
执行以下命令以在AlmaLinux服务器上开放8300、8301、8302、8400、8500和8600端口。如果成功,你应该会看到success的输出。
sudo firewall-cmd --permanent --zone=public --add-port={8300,8301,8302,8400,8500,8600}/tcp
现在,使用以下命令重新加载firewalld使配置生效。
sudo firewall-cmd --reload
最后,使用以下命令验证你的firewalld规则。确保端口8300、8301、8302、8400、8500、8600在你的firewalld中可用。
sudo firewall-cmd --zone=public --list-all

将SELinux设置为Permissive
配置firewalld之后,你将把默认的SELinux模式更改为permissive。这将在不阻止操作的情况下生成SELinux错误日志。
执行以下命令将SELinux模式设置为permissive。
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
然后重启你的服务器使配置生效。
sudo reboot
现在你已经完成了所有AlmaLinux服务器的配置,可以开始安装Consul了。

通过DNF安装Consul
Consul是一个服务网络平台,支持多种操作系统。Consul还为Linux发行版(包括基于RHEL的发行版)提供软件包仓库。在这一步中,你将通过DNF从Consul仓库安装Consul。
首先,执行以下命令安装一些基础软件包。输入y继续安装。
sudo dnf install dnf-plugins-core nano

现在运行以下DNF命令将Consul仓库添加到你的AlmaLinux服务器。然后验证每台服务器上可用的仓库列表。
sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo dnf repolist
以下输出证明你已成功将HashiCorp仓库添加到系统中。

接下来,执行以下命令安装Consul。输入y继续安装。
sudo dnf install consul

安装完成后,运行以下命令查找consul二进制文件并检查其版本。
which consul
consul version
以下输出确认Consul二进制文件位于_/bin/consul_,当前Consul版本为1.17。

配置Consul
至此,你已经在所有AlmaLinux服务器上安装了Consul。让我们开始配置多服务器Consul集群。本示例将使用三台AlmaLinux服务器。
| Hostname | IP Address |
|---|---|
| consul1 | 192.168.10.41 |
| consul2 | 192.168.10.42 |
| consul3 | 192.168.10.43 |
首先,在每台服务器上执行以下命令停止consul服务。
sudo systemctl stop consul
切换到consul1服务器,运行以下命令为Consul集群生成一个新密钥。请务必保存好生成的密钥。
consul keygen

在所有Consul服务器上,使用以下nano编辑器命令打开默认的Consul配置文件_/etc/consul.d/consul.hcl_。
sudo nano /etc/consul.d/consul.hcl
将默认配置替换为以下内容,请注意以下参数:
- server:True表示该节点将作为Consul服务器运行。
- advertise_addr:更改为相应Consul服务器的IP地址。
- bootstrap_expect:你的集群中应有多少台服务器。
- encrypt:每台服务器必须使用相同的密钥。
- retry_join:将Consul集群IP地址输入到此参数中。
# Full configuration options can be found at https://www.consul.io/docs/agent/config
# datacenter
datacenter = "kitty-dc1"
# data_dir
# This flag provides a data directory for the agent to store state.
data_dir = "/opt/consul"
# client_addr
# The address to which the Consul will bind client interfaces, including the HTTP and DNS
# servers.
client_addr = "0.0.0.0"
# ui
# Enables the built-in web UI server and the required HTTP routes.
ui_config{
enabled = true
}
# default domain
domain = "consul"
# enable dns_config
dns_config{
enable_truncate = true
only_passing = true
}
# server
# This flag is used to control if an agent is in server or client mode. When provided,
# an agent will act as a Consul server. Each Consul cluster must have at least one
# server and ideally no more than 5 per datacenter. All servers participate in the Raft
# consensus algorithm to ensure that transactions occur in a consistent, linearizable
# manner. Transactions modify cluster state, which is maintained on all server nodes to
# ensure availability in the case of node failure. Server nodes also participate in a
# WAN gossip pool with server nodes in other datacenters. Servers act as gateways to
# other datacenters and forward traffic as appropriate.
server = true
# Advertise addr - if you want to point clients to a different address than bind or LB.
advertise_addr = "192.168.10.41"
# bootstrap_expect
# This flag provides the number of expected servers in the datacenter.
bootstrap_expect=3
# encrypt
# Specifies the secret key to use for encryption of Consul network traffic.
encrypt = "jFtV8jj4h1hnXGqTllWH+sOqLo/tw9xnnfDHcVxVnYg="
# retry_join
retry_join = ["192.168.10.41", "192.168.10.42", "192.168.10.43"]
完成后保存并退出文件。
接下来,运行以下命令验证Consul配置。如果你的语法正确,应该会看到输出'Configuration is valid'。
sudo consul validate /etc/consul.d/

现在运行以下命令启动并启用consul服务。
sudo systemctl start consul
sudo systemctl enable consul
然后使用以下命令验证consul以确保服务正在运行。
sudo systemctl status consul
在以下输出中,你应该看到Consul正在consul1服务器上运行。

在以下输出中,你应该看到Consul正在consul2服务器上运行。

在以下输出中,你应该看到Consul正在consul3服务器上运行。

与Consul集群交互
现在你已经在AlmaLinux服务器上配置好了Consul集群,可以通过consul命令行验证和与Consul集群进行交互。
检查Consul集群
运行以下命令检查集群中可用的Consul服务器。
consul members
在本示例中,Consul集群由三台服务器组成:consul1、consul2和consul3。

你还可以使用以下命令验证集群中的peer列表。
consul operator raft list-peers
下面你可以看到每台Consul服务器的详细信息,包括ID、状态、voter和RaftProtocol版本。

向Consul添加KV(键值)存储
接下来,运行以下consul命令创建一个新的键值数据库。在本示例中,你将创建一个新键db_name,其值为testdb。
consul kv put consul/configuration/db_name testdb
现在运行以下命令获取db_name的值。
consul kv get consul/configuration/db_name
你应该会得到值testdb,如下所示:

与Consul DNS交互
在本指南中,你已启用了Consul DNS。要检查Consul DNS配置,请使用以下dig命令。
dig @127.0.0.1 -p 8600 consul.service.consul
在本示例中,你已在集群中配置了Consul服务器,其域名与consul相同。以下确认域名consul.service.consul具有A记录192.168.10.41、192.168.10.42、192.168.10.43。

访问Consul Web UI(用户界面)
最后,打开你的Web浏览器并访问Consul服务器IP地址的8500端口,例如:http://192.168.10.41:8500/ui/ 以获取Consul Web管理面板。
下面你应该能看到Consul集群中的可用服务器。

现在,点击Nodes菜单以获取每台服务器的详细信息。

然后点击Key/Value菜单以查看Consul服务器上可用的KV列表。

总结
总结来说,你已经完成了在AlmaLinux 9上使用三台服务器逐步安装Consul集群的操作。你已在集群中启用了Consul Web UI和Consul DNS。最后,你还学习了一些与Consul集群、键值存储和DNS交互的基本命令。
从这里开始,你可以启用ACL(访问控制列表)并为Consul服务器和客户端之间的连接实施TLS。