本机建立 Consul 数据中心

本机建立 Consul 数据中心

本机建立 Consul 数据中心

环境准备

注意:Windows 的路径分隔符是 \,Unix 和 Linux 是 /

  1. Windows10
  2. consul_1.9.6_windows_amd64
  3. 三个目录模拟3台机器:
    • consul\dc1\server1\
    • consul\dc1\server2\
    • consul\dc1\server3\
  4. server 目录中的内容:
    • consul\dc1\server1\config\basic.json (配置文件,即 -config-dir)
    • consul\dc1\server1\data\ (数据目录,即 -data-dir)
    • consul\dc1\server1\consul.exe (Consul 程序文件)
    • consul\dc1\server1\bootstrap.ps1 (引导集群的PowerShell脚本,减少手动输入命令)
    • consul\dc1\server1\join.ps1 (加入集群的PowerShell脚本,减少手动输入命令)
    • consul\dc1\server1\members.ps1 (查看集群中结点信息的PowerShell脚本,减少手动输入命令)
  5. 端口表:
    • server1: 10000 + Consul 默认端口,如默认的 8500 会设置为 18500
    • server2: 20000 + Consul 默认端口,如默认的 8500 会设置为 28500
    • server3: 30000 + Consul 默认端口,如默认的 8500 会设置为 38500

配置文件和脚本内容

(一)consul\dc1\server1

1) .\config\basic.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"datacenter": "dc1",
"node_name": "server1",
"bind_addr": "127.0.0.1",
"ports": {
"dns": 18600, /*默认:8600*/
"http": 18500, /*默认:8500*/
"https": 18501, /*默认:8501,默认是禁用的*/
"grpc": 18502, /*默认:8502,默认是禁用的*/
"serf_lan": 18301, /*默认:8301*/
"serf_wan": 18302, /*默认:8302*/
"server": 18300 /*默认:8300*/
},
"client_addr": "0.0.0.0"
}

2) .\bootstrap.ps1

1
.\consul.exe agent -server -bootstrap-expect 3 -config-dir=".\config" -data-dir=".\data" -ui

-server: 表示启动的是 Consul 的服务器
-bootstrap-expect 3: 表示集群最少需要 3 台服务器在运行才算有效
-config-dir=”.\config”: 表示配置文件的目录为 “.\config”
-data-dir=”.\data”: 表示 Consul 的数据存储在 “.\data” 目录中
-ui: 表示启用 Consul 的 Web UI ,通过浏览器访问 http://<ip>:8500/ui 可以看到 Web 界面

3) .\join.ps1

我们计划用 server2 和 server3 加入到 server1,所以 server1 不需要 join.ps1 脚本

4) .\members.ps1

1
.\consul.exe members -http-addr="127.0.0.1:18500"

命令的意思:查看 server1 所在集群的结点信息,默认只有 server1 自身

-http-addr: 表示操作的服务器的HTTP端口地址,这里是 server1,所以是 127.0.0.1:18500

(二)consul\dc1\server2

1) .\config\basic.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"datacenter": "dc1",
"node_name": "server2",
"bind_addr": "127.0.0.1",
"ports": {
"dns": 28600, /*默认:8600*/
"http": 28500, /*默认:8500*/
"https": 28501, /*默认:8501,默认是禁用的*/
"grpc": 28502, /*默认:8502,默认是禁用的*/
"serf_lan": 28301, /*默认:8301*/
"serf_wan": 28302, /*默认:8302*/
"server": 28300 /*默认:8300*/
},
"client_addr": "0.0.0.0"
}

2) .\bootstrap.ps1

1
.\consul.exe agent -server -bootstrap-expect 3 -config-dir=".\config" -data-dir=".\data" -ui

-server: 表示启动的是 Consul 的服务器
-bootstrap-expect 3: 表示集群最少需要 3 台服务器在运行才算有效
-config-dir=”.\config”: 表示配置文件的目录为 “.\config”
-data-dir=”.\data”: 表示 Consul 的数据存储在 “.\data” 目录中
-ui: 表示启用 Consul 的 Web UI ,通过浏览器访问 http://<ip>:8500/ui 可以看到 Web 界面

3) .\join.ps1

1
2
3
# 命令格式:consul join [options] address ...

.\consul.exe join -http-addr="127.0.0.1:28500" 127.0.0.1:18301

命令的意思:server2 加入到 server1 中

-http-addr : 表示操作的服务器的HTTP端口地址,这里是 server2,所以是 127.0.0.1:28500
address : 表示当前被操作的服务器,想要加入到其中的服务器的地址,LAN或者WAN,比如 server2 加入到 server1,可以通过 consul members 命令查看 server 的地址,咱们这里是在本机上操作的,所以是 LAN(局域网)
: 省略号的意思是可以同时加入多个集群

4) .\members.ps1

1
.\consul.exe members -http-addr="127.0.0.1:28500"

命令的意思:查看 server2 所在集群的结点信息,默认只有 server2 自身

-http-addr: 表示操作的服务器的HTTP端口地址,这里是 server2,所以是 127.0.0.1:28500

(三)consul\dc1\server2

1) .\config\basic.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"datacenter": "dc1",
"node_name": "server2",
"bind_addr": "127.0.0.1",
"ports": {
"dns": 38600, /*默认:8600*/
"http": 38500, /*默认:8500*/
"https": 38501, /*默认:8501,默认是禁用的*/
"grpc": 38502, /*默认:8502,默认是禁用的*/
"serf_lan": 38301, /*默认:8301*/
"serf_wan": 38302, /*默认:8302*/
"server": 38300 /*默认:8300*/
},
"client_addr": "0.0.0.0"
}

2) .\bootstrap.ps1

1
.\consul.exe agent -server -bootstrap-expect 3 -config-dir=".\config" -data-dir=".\data" -ui

-server: 表示启动的是 Consul 的服务器
-bootstrap-expect 3: 表示集群最少需要 3 台服务器在运行才算有效
-config-dir=”.\config”: 表示配置文件的目录为 “.\config”
-data-dir=”.\data”: 表示 Consul 的数据存储在 “.\data” 目录中
-ui: 表示启用 Consul 的 Web UI ,通过浏览器访问 http://<ip>:8500/ui 可以看到 Web 界面

3) .\join.ps1

1
2
3
# 命令格式:consul join [options] address ...

.\consul.exe join -http-addr="127.0.0.1:38500" 127.0.0.1:18301

命令的意思:server3 加入到 server1 中

-http-addr : 表示操作的服务器的HTTP端口地址,这里是 server3,所以是 127.0.0.1:38500
address : 表示当前被操作的服务器,想要加入到其中的服务器的地址,LAN或者WAN,比如 server3 加入到 server1,可以通过 consul members 命令查看 server 的地址,咱们这里是在本机上操作的,所以是 LAN(局域网)
: 省略号的意思是可以同时加入多个集群

4) .\members.ps1

1
.\consul.exe members -http-addr="127.0.0.1:38500"

命令的意思:查看 server3 所在集群的结点信息,默认只有 server3 自身

-http-addr: 表示操作的服务器的HTTP端口地址,这里是 server3,所以是 127.0.0.1:38500

实验步骤

步骤1 - 分别启动 server1 、server2、server3

打开 3 个 PowerShell 终端,每个终端进入 1 个server目录,逐个运行目录中的 bootstrap.ps1 脚本。
启动后不要关闭终端。

步骤2 - 建立集群

打开 2 个新的 PowerShell 终端,分别进入 server2 和 server3 目录,并运行目录中的 join.ps1 脚本。

步骤3 - 验证集群

打开 1 个新的 PowerShell 终端,在任意一个 server 的目录中,运行 members.ps1 脚本,查看集群结点,如果有3个结点,那么就是建立成功了。