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

AlmaLinux 9配置Firewalld

将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了。

AlmaLinux 9设置SELinux为Permissive

通过DNF安装Consul

Consul是一个服务网络平台,支持多种操作系统。Consul还为Linux发行版(包括基于RHEL的发行版)提供软件包仓库。在这一步中,你将通过DNF从Consul仓库安装Consul。

首先,执行以下命令安装一些基础软件包。输入y继续安装。

sudo dnf install dnf-plugins-core nano

AlmaLinux 9安装基础软件包

现在运行以下DNF命令将Consul仓库添加到你的AlmaLinux服务器。然后验证每台服务器上可用的仓库列表。

sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo dnf repolist

以下输出证明你已成功将HashiCorp仓库添加到系统中。

添加HashiCorp仓库

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

sudo dnf install consul

安装Consul

安装完成后,运行以下命令查找consul二进制文件并检查其版本。

which consul
consul version

以下输出确认Consul二进制文件位于_/bin/consul_,当前Consul版本为1.17

验证Consul版本

配置Consul

至此,你已经在所有AlmaLinux服务器上安装了Consul。让我们开始配置多服务器Consul集群。本示例将使用三台AlmaLinux服务器。

HostnameIP Address
consul1192.168.10.41
consul2192.168.10.42
consul3192.168.10.43

首先,在每台服务器上执行以下命令停止consul服务。

sudo systemctl stop consul

切换到consul1服务器,运行以下命令为Consul集群生成一个新密钥。请务必保存好生成的密钥。

consul keygen

生成Consul集群密钥

在所有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配置

现在运行以下命令启动并启用consul服务。

sudo systemctl start consul
sudo systemctl enable consul

然后使用以下命令验证consul以确保服务正在运行。

sudo systemctl status consul

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

Consul在consul1服务器上运行

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

Consul在consul2服务器上运行

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

Consul在consul3服务器上运行

与Consul集群交互

现在你已经在AlmaLinux服务器上配置好了Consul集群,可以通过consul命令行验证和与Consul集群进行交互。

检查Consul集群

运行以下命令检查集群中可用的Consul服务器。

consul members

在本示例中,Consul集群由三台服务器组成:consul1、consul2和consul3。

查看Consul集群成员

你还可以使用以下命令验证集群中的peer列表。

consul operator raft list-peers

下面你可以看到每台Consul服务器的详细信息,包括ID、状态、voter和RaftProtocol版本。

查看Consul Raft peers

向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 KV键值存储操作

与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 DNS查询

访问Consul Web UI(用户界面)

最后,打开你的Web浏览器并访问Consul服务器IP地址的8500端口,例如:http://192.168.10.41:8500/ui/ 以获取Consul Web管理面板。

下面你应该能看到Consul集群中的可用服务器。

Consul Web UI管理面板

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

Consul节点列表

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

查看Consul KV数据库

总结

总结来说,你已经完成了在AlmaLinux 9上使用三台服务器逐步安装Consul集群的操作。你已在集群中启用了Consul Web UI和Consul DNS。最后,你还学习了一些与Consul集群、键值存储和DNS交互的基本命令。

从这里开始,你可以启用ACL(访问控制列表)并为Consul服务器和客户端之间的连接实施TLS。