文章目录
第一章:Docker-Compose 简介
一、什么是 Docker-Compose?
在容器化技术中,Dockerfile 可以帮助我们定义和管理一个单独的应用容器。然而,在实际工作中,我们往往需要多个容器协同工作,来完成某个完整的应用或服务。这时就需要一种方式来管理和编排多个容器。Docker Compose 正是 Docker 官方提供的一个强大工具,专门用于多容器服务的编排和管理。
1.1 Docker Compose 的概念
Docker Compose 是 Docker 官方的开源项目,它的主要功能是实现对多个 Docker 容器的快速编排。通过 Docker Compose,用户可以在一个配置文件(通常为 docker-compose.yml
)中定义多个相关的服务容器(称为一个 project 项目),并通过一个命令来启动和管理这些容器。
例如,在构建一个完整的 Web 应用时,可能会需要:
- 一个 Web 服务容器(例如,Nginx 或 Node.js 容器)
- 一个数据库服务容器(例如,MySQL 或 PostgreSQL 容器)
- 甚至还可以包括一个缓存容器(如 Redis)
所有这些服务可以通过 Compose 统一定义、管理和启动,而无需手动逐一操作每个容器。
1.2 Docker Compose 的分层结构
Docker Compose 的架构可以分为三个层次:
-
工程(project): 一个 Docker Compose 项目代表了所有与当前应用相关的服务。项目由运行目录下的所有文件组成,通常包括
docker-compose.yml
和一些环境变量文件。默认情况下,项目名即为当前目录名,但也可以通过配置文件或命令行参数进行修改。 -
服务(service): 一个服务定义了一个容器的运行配置。每个服务包含容器运行的镜像、启动命令、端口映射、环境变量、依赖关系等。服务通常与实际应用模块一一对应,比如 Web 服务、数据库服务等。
-
容器(container): 每个服务在实际运行时,会启动一个或多个容器实例。虽然 Compose 定义了容器的运行,但它本身不负责负载均衡或服务发现,这些功能需要借助其他工具(如 Consul、Nginx)来实现。
1.3 Docker Compose 的优点
-
简化多容器管理: 在 Compose 中,所有容器的配置都集中在一个
docker-compose.yml
文件中,这使得管理和编排变得非常方便,只需一个命令就可以启动和停止所有相关容器。 -
跨平台支持: Compose 是用 Python 编写的,利用 Docker 提供的 API 来管理容器。因此,只要平台支持 Docker API,就可以在该平台上使用 Compose 进行编排。
-
依赖关系管理: Compose 能够管理服务之间的依赖关系,例如让数据库服务在 Web 服务启动之前先启动。
二、Docker Compose 的核心文件:docker-compose.yml
Docker Compose 使用 docker-compose.yml
文件来定义项目中的所有服务。这个文件是 YAML 格式的,简单明了,可以通过少量的配置描述多个服务的容器、依赖关系和运行参数。
一个典型的 docker-compose.yml
文件包含以下内容:
version: "3"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: rootpassword
在这个示例中,docker-compose.yml
定义了两个服务:
- web 服务: 使用 Nginx 作为 Web 服务器,暴露 80 端口,并将本地
html
目录挂载到 Nginx 容器内的静态文件目录中。 - db 服务: 使用 MySQL 作为数据库服务,并设置了 MySQL 的 root 用户密码。
2.1 Compose 文件版本
docker-compose.yml
文件的开头有一个 version
字段,用于指定 Compose 文件的版本。不同版本的 Compose 文件支持的功能有所不同,常用的版本有:
version: "3"
是目前较为常用的版本,兼容性较好。version: "2"
适用于一些较旧的 Docker 环境。
2.2 服务定义
每个服务(如 web
和 db
)定义了以下重要的参数:
- image: 指定容器使用的镜像。
- ports: 容器与主机之间的端口映射,格式为
主机端口:容器端口
。 - volumes: 主机与容器之间的卷挂载,便于数据持久化或共享文件。
- environment: 指定容器的环境变量,通常用于传递配置项。
2.3 服务之间的依赖
在复杂项目中,不同的服务可能有依赖关系。例如,Web 服务需要依赖数据库服务,这时可以通过 depends_on
字段定义服务之间的依赖关系,确保服务按顺序启动。
services:
web:
image: nginx
depends_on:
- db
db:
image: mysql
在这个例子中,web
服务会等待 db
服务启动后再启动。
第二章:Docker Compose 部署指南
一、Docker Compose 环境安装
Docker Compose 是一个独立于 Docker 的工具,因此在安装了 Docker 之后,还需要单独安装 Docker Compose。
1.1 安装步骤
首先确保已经安装 Docker,然后按照以下步骤安装 Docker Compose:
# 下载 Docker Compose 二进制文件
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 添加可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看版本信息,确认安装成功
docker-compose --version
如果需要安装新版本,例如 2.26.0
,可以执行以下命令:
# 下载新的 Docker Compose 版本
sudo curl -L "https://github.com/docker/compose/releases/download/2.26.0/docker-compose-linux-aarch64" -o /usr/local/bin/docker-compose
# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
通过 docker-compose --version
来验证是否安装成功。
二、YAML 文件格式及编写注意事项
YAML 是 Docker Compose 使用的配置文件格式,其语法简单明了,易于理解和使用。
2.1 YAML 基础语法
- 大小写敏感:YAML 文件中的内容区分大小写。
- 缩进:通过缩进表示层级关系,缩进只能使用空格,不能使用 tab 键。通常推荐使用 2 个空格。
- 注释:使用
#
进行注释。 - 符号:符号(如
:
、-
等)后面必须加一个空格。
2.2 YAML 数据结构
YAML 支持几种数据结构:
-
对象映射(字典):键值对的形式,例如:
animal: pets
-
序列(数组):表示列表数据,例如:
- Cat - Dog - Fish
-
布尔值:表示
true
或false
,例如:debug: true
2.3 YAML 示例
languages:
- Java
- Python
- Go
resources:
cpu: "2"
memory: "1024M"
swap: "2048M"
disk: "60G"
三、Docker Compose 配置常用字段
docker-compose.yml
文件中包含多个配置字段,用于定义服务、网络、卷等内容。
3.1 常用字段描述
字段 | 描述 |
---|---|
build | 指定 Dockerfile 的路径,用于构建镜像。 |
image | 指定服务使用的镜像。 |
command | 覆盖容器的默认启动命令。 |
container_name | 设置容器的自定义名称。 |
ports | 宿主机与容器之间的端口映射。 |
volumes | 挂载宿主机目录或卷到容器。 |
environment | 配置环境变量,传递给容器。 |
depends_on | 定义服务的依赖关系,确保按顺序启动。 |
networks | 定义服务加入的网络。 |
restart | 设置容器的重启策略,例如 always 、on-failure 。 |
3.2 示例
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
四、Docker Compose 常用命令
Docker Compose 提供了一系列命令,用于管理和控制容器化的服务。
命令 | 描述 |
---|---|
build | 构建服务镜像。 |
ps | 列出当前运行的容器。 |
up | 启动并创建容器。 |
down | 停止并删除容器、网络和数据卷。 |
logs | 查看容器的日志输出。 |
exec | 在容器内执行命令。 |
restart | 重启服务。 |
4.1 常用命令示例
-
启动服务:
docker-compose up -d
-
查看容器:
docker-compose ps
-
停止服务并删除资源:
docker-compose down
五、Docker Compose 项目结构
在实际使用中,Docker Compose 项目通常包含多个配置文件和目录。以下是一个典型的 Docker Compose 项目结构示例:
/opt/compose_nginx/
├── docker-compose.yml # Docker Compose 配置文件
├── nginx
│ ├── Dockerfile # Nginx Dockerfile
│ ├── nginx-1.12.0.tar.gz # Nginx 源码包
│ └── run.sh # Nginx 启动脚本
└── wwwroot
└── index.html # 网站首页文件
5.1 创建依赖文件
mkdir -p /opt/compose_nginx/nginx /opt/compose_nginx/wwwroot
cd /opt/compose_nginx/nginx
cp nginx-1.12.0.tar.gz ./
创建 run.sh
文件:
vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
创建 Dockerfile
文件:
vim Dockerfile
# 使用 CentOS 基础镜像
FROM centos:7
MAINTAINER this is nginx image <hmj>
# 安装依赖
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
# 解压 Nginx 源码
ADD nginx-1.12.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.0
# 编译并安装 Nginx
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install
# 环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
# 暴露端口
EXPOSE 80 443
# 配置 Nginx 前台运行
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod +x /run.sh
CMD ["/run.sh"]
创建 index.html
文件:
echo "<h1>This is a test web page</h1>" > /opt/compose_nginx/wwwroot/index.html
5.2 编写 docker-compose.yml
文件
version: '3'
services:
nginx:
container_name: web1
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- "1216:80"
- "1217:443"
networks:
lnmp:
ipv4_address: 172.18.0.10
volumes:
- ./wwwroot:/usr/local/nginx/html
networks:
lnmp:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/16
5.3 启动 Docker Compose 项目
进入项目目录并启动容器:
cd /opt/compose_nginx/
docker-compose up -d
5.4 查看容器状态
使用以下命令查看容器运行状态:
docker-compose ps
此时,访问浏览器 http://<宿主机IP>:1216
,应该可以看到 index.html
文件的内容。
5.5 使用命令启动和管理项目
使用以下命令启动 Docker Compose 项目:
docker-compose -f docker-compose.yml up -d
-f, --file FILE
:指定要使用的 compose 模板文件,默认为docker-compose.yml
。-p, --project-name NAME
:指定项目名称,默认使用目录名称。-d
:在后台运行。
查看运行中的容器:
docker ps -a
输出示例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b48dceee248f compose_nginx_nginx "/run.sh" About a minute ago Up About a minute 0.0.0.0:1216->80/tcp, 0.0.
第三章:Consul 服务注册与部署详解
一、什么是服务注册与发现
服务注册与发现是微服务架构中的核心组件,用于解决服务节点动态变化的问题。在最初的单节点架构中,服务之间的调用仅通过静态的接口访问,但随着系统规模的扩大和分布式架构的普及,前端必须了解后端所有服务的网络位置。这样就引入了几个问题:
- 配置复杂:如果前端需要调用多个后端服务,每个服务的网络位置都需要手动配置,增加了工作量和出错的风险。
- 动态变更问题:当后端服务的网络位置变化时,所有调用者都需要更新配置,导致维护困难。
为了解决这些问题,服务注册与发现被引入:
- 后端服务动态地将自己的网络位置注册到服务发现模块中,该模块通过键值对(K-V)形式记录下服务的名称(Key)和对应的 IP 和端口(Value)。
- 前端服务不再需要关心后端服务的具体位置,而是通过服务发现模块来动态获取服务的网络位置。
通过这种方式,实现了前端和后端的解耦,简化了服务的管理和配置。
二、什么是 Consul
Consul 是由 HashiCorp 开发的一个分布式、高可用的服务管理平台,支持服务注册与发现、健康检查、Key/Value 存储、多数据中心架构等功能。
Consul 提供了以下核心功能:
- 服务注册与发现:通过 DNS 或 HTTP 接口轻松实现服务的注册与发现。
- 健康检查:内置的健康检查机制可以快速检测集群中的服务状态,防止流量被转发到故障服务。
- Key/Value 存储:提供简单的存储系统,适用于存储动态配置信息。
- 多数据中心支持:无需复杂配置即可支持多个数据中心。
Consul 使用 Raft 一致性算法,确保服务的高可用性。Consul 集群中的每个节点都运行一个Agent,该 Agent 可以作为 Server 或 Client 角色。官方建议每个数据中心至少有 3 到 5 个 Server 节点,以保证数据的持久化和故障恢复。
2.1 Consul 的关键组件
- Server 节点:保存注册的服务信息并进行持久化。Server 节点还负责集群的选举和同步。
- Client 节点:将服务注册信息转发给 Server 节点,不保存服务数据。
- Leader 节点:Server 节点中选举出的 Leader 负责将服务信息同步给其他 Server 节点,并进行节点健康检查。
三、Consul 的部署
在本节中,我们将介绍如何在两台服务器上部署 Consul 和相关组件。
3.1 环境准备
环境信息:
- Consul 服务器:192.168.10.23(运行 Consul 服务、Nginx 服务、Consul-Template 守护进程)
- Registrator 服务器:192.168.10.13(运行 Registrator 容器和 Nginx 容器)
首先,确保两台服务器的防火墙已关闭并关闭 SELinux:
systemctl stop firewalld.service
setenforce 0
3.2 在 Consul 服务器上安装并配置 Consul
1. 安装 Consul
mkdir /opt/consul
cp consul_0.9.2_linux_amd64.zip /opt/consul
cd /opt/consul
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/
2. 启动 Consul 服务端
使用以下命令启动 Consul 服务端,并设置为后台运行:
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.10.23 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
参数说明:
-server
:以 Server 模式启动,默认是 Client 模式。-bootstrap
:让该节点成为 Bootstrap Server,并可进行 Server Leader 的选举。-ui
:开启 Web UI 界面,访问地址为http://localhost:8500/ui
。-data-dir
:指定数据存储目录。-bind
:指定集群内部通讯地址,集群内所有节点必须能够访问该地址。-client
:指定 Consul 的客户端绑定地址,提供 HTTP、DNS 和 RPC 服务。
3. 查看 Consul 的运行状态
启动 Consul 后,Consul 默认监听以下端口:
- 8300:用于 Leader 选举和数据复制。
- 8301:用于 LAN 内的 Gossip 协议通信。
- 8302:用于 WAN 内的 Gossip 协议通信。
- 8500:用于访问 Web UI 界面。
- 8600:用于 DNS 协议。
可以通过以下命令查看 Consul 是否正常启动:
netstat -natp | grep consul
4. 查看集群状态
-
查看节点成员状态:
consul members
-
查看 Raft 集群状态:
consul operator raft list-peers
-
查看当前 Leader 节点:
consul info | grep leader
5. 通过 HTTP API 获取 Consul 信息
-
查看集群中 Server 成员:
curl 127.0.0.1:8500/v1/status/peers
-
查看当前 Server Leader:
curl 127.0.0.1:8500/v1/status/leader
-
查看已注册的服务:
curl 127.0.0.1:8500/v1/catalog/services
-
查看 Nginx 服务信息:
curl 127.0.0.1:8500/v1/catalog/nginx
-
查看集群节点信息:
curl 127.0.0.1:8500/v1/catalog/nodes
四、Registrator 服务器部署与配置
4.1 安装 Gliderlabs/Registrator
Registrator 是一个自动化工具,能够监控 Docker 容器的启动与停止,并将容器信息自动注册到服务发现系统中(如 Consul、Etcd 等)。通过使用 Registrator,可以在容器启动时自动加入到 Consul 中,并在停止时自动注销。
以下命令在 Registrator 服务器上运行,用于启动 Registrator,并将服务信息注册到 Consul:
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.10.13 \
consul://192.168.10.23:8500
参数说明:
--net=host
:使用宿主机的网络模式,允许容器直接访问宿主机网络。-v /var/run/docker.sock:/tmp/docker.sock
:挂载 Docker 守护进程的 Unix 套接字,使得 Registrator 可以监控 Docker 容器的状态。--restart=always
:设置 Registrator 容器在退出时自动重启。--ip
:指定 Registrator 的 IP 地址为宿主机的 IP。consul://192.168.10.23:8500
:指定 Consul 服务器的 IP 和端口,用于服务注册。
4.2 测试服务发现功能
通过以下命令在 Registrator 服务器上启动几个测试服务:
docker run -itd -p 83:80 --name test-01 -h test01 nginx
docker run -itd -p 84:80 --name test-02 -h test02 nginx
docker run -itd -p 88:80 --name test-03 -h test03 httpd
docker run -itd -p 89:80 --name test-04 -h test04 httpd
这些命令分别启动了 Nginx 和 Httpd 容器,注册到 Consul 中。
4.3 验证服务是否成功注册到 Consul
通过浏览器访问 Consul 的 Web UI,打开 http://192.168.10.23:8500
,点击 “NODES” 选项,查看 Consul 节点中的服务。如果配置正确,你将看到 5 个注册的服务,包括 Nginx 和 Httpd。
可以在 Consul 服务器上使用 curl
命令测试服务是否正确注册:
curl 127.0.0.1:8500/v1/catalog/services
输出示例:
{"consul":[],"httpd":[],"nginx":[]}
五、Consul-Template 部署与配置
Consul-Template 是一个用于从 Consul 中实时获取服务信息并更新配置文件的工具。它能够根据服务变化动态更新 Nginx、HAProxy 等的配置,并自动重载服务。
5.1 准备 Nginx 模板文件
首先,在 Consul 服务器上创建 Nginx 的模板文件:
vim /opt/consul/nginx.ctmpl
内容如下:
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
server {
listen 8000;
server_name localhost 192.168.10.23;
access_log /var/log/nginx/kgc.com-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend;
}
}
这个模板文件定义了 Nginx 的反向代理配置,代理到 Consul 中的 nginx
服务。
5.2 编译安装 Nginx
在 Consul 服务器上安装 Nginx:
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
5.3 配置 Nginx
编辑 Nginx 配置文件,增加虚拟主机目录:
vim /usr/local/nginx/conf/nginx.conf
在 http
配置块中添加如下配置:
http {
include mime.types;
include vhost/*.conf; # 添加虚拟主机目录
default_type application/octet-stream;
...
}
创建虚拟主机目录和日志文件目录:
mkdir /usr/local/nginx/conf/vhost
mkdir /var/log/nginx
启动 Nginx 服务:
nginx
5.4 配置并启动 Consul-Template
下载并安装 Consul-Template:
unzip consul-template_0.19.3_linux_amd64.zip -d /opt/
cd /opt/
mv consul-template /usr/local/bin/
启动 Consul-Template 服务,实时监控 Consul 中的 Nginx 服务变化并更新 Nginx 配置:
consul-template --consul-addr 192.168.10.23:8500 \
--template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info
在另外一个终端中查看生成的 Nginx 配置文件:
cat /usr/local/nginx/conf/vhost/kgc.conf
输出示例:
upstream http_backend {
server 192.168.10.13:83;
server 192.168.10.13:84;
}
server {
listen 8000;
server_name 192.168.10.23;
access_log /var/log/nginx/kgc.cn-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend;
}
}
5.5 测试 Consul-Template 配置
通过 Docker 查看当前运行的容器:
docker ps -a
编辑 Nginx 容器的 index.html
文件,测试 Nginx 的负载均衡功能:
docker exec -it 4f74d2c38844 bash
echo "this is test1 web" > /usr/share/nginx/html/index.html
docker exec -it b73106db285b bash
echo "this is test2 web" > /usr/share/nginx/html/index.html
访问 http://192.168.10.23:8000/
并刷新页面,可以看到负载均衡在不同的 Nginx 容器之间轮询。
5.6 增加 Nginx 容器节点
新增一个 Nginx 容器节点,验证服务发现和配置更新功能:
docker run -itd -p 85:80 --name test-05 -h test05 nginx
观察 Consul-Template 是否自动更新 /usr/local/nginx/conf/vhost/kgc.conf
文件并重载 Nginx。
查看 Nginx 配置文件内容:
cat /usr/local/nginx/conf/vhost/kgc.conf
输出示例:
upstream http_backend {
server 192.168.10.13:83;
server 192.168.10.13:84;
server 192.168.10.13:85;
}
查看各个 Nginx 容器的日志,验证请求是否被轮询到各个容器:
docker logs -f test-01
docker logs -f test-02
docker logs -f test-05
这样,服务发现和负载均衡的功能已经通过 Consul 和 Nginx 配置成功。
五、Consul 多节点集群配置
为了增强 Consul 集群的高可用性和容错能力,我们可以通过添加多台 Consul 服务器来构建分布式集群。本节将介绍如何在已有的 Consul 集群中添加一台新服务器。
5.1 添加新节点到 Consul 集群
我们将一台已有 Docker 环境的服务器(192.168.10.14/24)加入到现有的 Consul 集群中。通过以下命令在新服务器上启动 Consul,并将其添加到现有集群:
consul agent \
-server \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.10.14 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true \
-datacenter=dc1 \
-join 192.168.10.23 &> /var/log/consul.log &
参数说明:
-server
:启动 Consul 节点为 Server 模式。-ui
:开启 Web UI 界面。-data-dir
:指定数据存储目录。-bind
:设置集群通讯地址,指定为新节点的 IP 地址。-client
:设置客户端访问地址,指定为 0.0.0.0 允许所有外部访问。-node
:指定新节点的名称,在集群中必须唯一。-enable-script-checks=true
:启用脚本健康检查功能,确保节点能够正常运行。-datacenter=dc1
:指定数据中心名称。-join 192.168.10.23
:指定要加入的集群主节点的 IP 地址。
5.2 查看集群状态
添加节点后,可以通过以下命令检查集群中节点的状态:
consul members
输出示例:
Node Address Status Type Build Protocol DC
consul-server01 192.168.10.23:8301 alive server 0.9.2 2 dc1
consul-server02 192.168.10.14:8301 alive server 0.9.2 2 dc1
这表明新节点 consul-server02
已成功加入集群,并处于活跃状态。
5.3 查看 Raft 集群信息
通过 raft
命令可以查看集群中的 Raft 状态,以及节点的角色(Leader 或 Follower):
consul operator raft list-peers
输出示例:
Node ID Address State Voter RaftProtocol
consul-server01 192.168.10.23:8300 192.168.10.23:8300 leader true 2
consul-server02 192.168.10.14:8300 192.168.10.14:8300 follower true 2
从以上输出可以看到:
consul-server01
是当前的集群 Leader。consul-server02
是 Follower,正在跟随 Leader 同步数据。
5.4 验证 Consul 多节点的工作
通过浏览器访问 http://192.168.10.23:8500/ui
或 http://192.168.10.14:8500/ui
,可以看到 Consul 的 Web UI 界面。在 “Nodes” 页面中,可以看到集群中的所有节点,确认多节点配置成功。
此外,通过监控集群的 Raft 日志和节点健康状况,可以确保新加入的节点正常参与集群的服务发现和数据同步。
erver02 192.168.10.14:8301 alive server 0.9.2 2 dc1
这表明新节点 `consul-server02` 已成功加入集群,并处于活跃状态。
### 5.3 查看 Raft 集群信息
通过 `raft` 命令可以查看集群中的 Raft 状态,以及节点的角色(Leader 或 Follower):
```bash
consul operator raft list-peers
输出示例:
Node ID Address State Voter RaftProtocol
consul-server01 192.168.10.23:8300 192.168.10.23:8300 leader true 2
consul-server02 192.168.10.14:8300 192.168.10.14:8300 follower true 2
从以上输出可以看到:
consul-server01
是当前的集群 Leader。consul-server02
是 Follower,正在跟随 Leader 同步数据。
5.4 验证 Consul 多节点的工作
通过浏览器访问 http://192.168.10.23:8500/ui
或 http://192.168.10.14:8500/ui
,可以看到 Consul 的 Web UI 界面。在 “Nodes” 页面中,可以看到集群中的所有节点,确认多节点配置成功。
此外,通过监控集群的 Raft 日志和节点健康状况,可以确保新加入的节点正常参与集群的服务发现和数据同步。