下载
shell
wget https://releases.hashicorp.com/consul/1.17.1/consul_1.17.1_linux_amd64.zip
解压:
shell
unzip -d consul_1.17.1_linux_amd64.zip /opt/module
将解压出的二进制文件移动到 /usr/local/bin
目录中以便在系统中全局使用:
shell
sudo mv consul /usr/local/bin/
验证安装是否成功:
shell
consul --version
启动
创建存储 Consul 数据目录以及存放配置文件的目录:
shell
sudo mkdir -p /opt/module/consul-1.17.1/data
/opt/module/consul-1.17.1/conf
进入 /opt/module/consul-1.17.1/conf 配置文件目录,创建一个配置文件:
shell
cd /opt/module/consul-1.17.1/conf
sudo touch base_conf.json
配置文件内容如下:
json
{
"datacenter": "dc",
"data_dir": "/opt/module/consul-1.17.1/data",
"log_level": "INFO",
"node_name": "node73",
"server": true,
"bootstrap_expect": 1,
"bind_addr": "192.168.10.73",
"advertise_addr": "192.168.10.73",
"client_addr": "0.0.0.0",
"ui_config": {
"enabled": true
}
}
client_addr 配置项指定了 Consul 代理监听来自客户端请求的网络接口地址。
bind_addr 设置为 ip,设置成 hostname 会有问题。
为了让 Consul 能作为服务自动启动,我们需要创建一个 systemd 服务文件:
shell
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
[Service]
User=consul
Group=consul
ExecStart=sudo /usr/local/bin/consul agent -server -data-dir=/opt/module/consul-1.17.1/data -config-dir=/opt/module/consul-1.17.1/conf
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
执行以下命令启动 Consul 并设置随系统启动:
shell
sudo systemctl enable consul
sudo systemctl start consul
你可以通过以下命令查看 Consul 服务状态(不分页):
shell
sudo systemctl status consul --no-pager
为了方便启动、停止、查看 Consul 的状态,创建一个脚本 myConsul.sh,放到 /usr/local/bin 目录下(放在这个目录下是为了在任何路径都能使用 myConsul 这个脚本):
shell
#!/bin/bash
case $1 in
"start"){
sudo systemctl start consul
};;
"stop"){
sudo systemctl stop consul
};;
"status"){
sudo systemctl status consul --no-pager
};;
esac
访问 8500 端口就能看到 Consul 的页面了,使用 myConsul.sh start
命令就可以启动 Consul 了。
服务出现红叉叉问题
这是因为注册的服务没有配置心跳检测,导致 Consul 认为服务是不健康的,需要在服务的配置中配置如下内容:
yaml
spring:
application:
name: cloud-order-service
cloud:
consul:
host: node73
port: 8500
discovery:
service-name: ${spring.application.name}
heartbeat:
enabled: true
health-check-url: http://192.168.10.103:${server.port}/management/health
config:
profile-separator: '-'
format: yaml
watch:
wait-time: 3
重启服务,然后就会正常了: