目录
一.前言
1. Consul架构
consul是分布式、高可用的系统,下图是单数据中心的部署架构
2. Consul特性
- 服务发现:解决在分布式环境中,如何找到可用的服务地址的问题,支持通过DNS和HTTP查询服务地址。
- 健康检查:定时监控服务是否正常,对于异常的服务会主动下线
- 键值存储:配置中心解决方案,是一种key/value存储结构,区别就是key是以目录树结构形式组织的,可以用来存储系统配置信息
- 多数据中心:支持多数据中心部署
二.Consul单机部署
1.安装Consul,本人比较喜欢用systemctl命令所有用官网的方式
yum install -y yum-utils
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
yum -y install consul
2.查看Consul是否安装成功
consul version
3.创建数据文件夹,修改权限
mkdir /usr/local/consul
cd /usr/local/consul
chmod 777 /usr/local/consul
4.配置Consul
vim /etc/consul.d/consul.hcl
# 数据目录
data_dir = "//usr/local/consul"
# 指定客户端访问的IP,0.0.0.0不限制客户端IP
client_addr = "0.0.0.0"
# 开启UI
ui_config{
enabled = true
}
# Agent以服务端模式启动(注册中心)
server = true
# 监听所有地址,如果纯在多个网卡必须写死ip,否则可以写0.0.0.0
bind_addr = "0.0.0.0"
# 部署1个server节点
bootstrap_expect=1
5.启动Consul
systemctl start consul
netstat -lntup
# 排查错误日志
journalctl -u consul
#删除日志
rm /run/log/journal/* -rf
systemctl restart systemd-journald
systemctl kill --kill-who=main --signal=SIGUSR2 systemd-journald.service
6.访问Consul
http://ip:8500
7.基本命令
#查询集群节点
consul members
#重新加载配置文件
consul reload
#优雅关闭节点
consul leave
#查询所有注册的服务
consul catalog services
#加入集群
consul join 192.168.4.130
#退出集群
consul leave
三.Consul集群部署
1.集群部署环境准备
序号 | IP地址 | 操作系统 | 主机名 |
---|---|---|---|
1 | 192.168.4.131 | CentOS 7 | host-consul1 |
2 | 192.168.4.132 | CentOS 7 | host-consul2 |
3 | 192.168.4.133 | CentOS 7 | host-consul3 |
4 | 192.168.4.134 | CentOS 7 | host-consul4 |
#查看集群状态
consul operator raft list-peers
#退出集群
consul operator raft remove-peer -id=192.168.10.16:8500
#查看members状态
consul members
2.主机名配置(所有节点执行)
[root@localhost ~]# hostnamectl set-hostname host-consul1
[root@localhost ~]# hostnamectl set-hostname host-consul2
[root@localhost ~]# hostnamectl set-hostname host-consul3
3.安装Consul(所有节点执行)
yum install -y yum-utils
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
yum -y install consul
4.查看Consul是否安装成功(所有节点执行)
consul version
5.配置Consul(所有server节点执行)
vi /etc/consul.d/consul.hcl
#数据中心名称
datacenter = "consul-cluster"#数据目录
data_dir = "/uer/local/consul"#指定客户端访问的IP,0.0.0.0不限制客户端IP
client_addr = "0.0.0.0"#开启UI
ui_config{
enabled = true
}# Agent以服务端模式启动(注册中心)
server = true#监听所有地址
bind_addr = "0.0.0.0"#部署3个server节点,主节点是true,两个副节点为false
bootstrap=false
bootstrap_expect=3
6.启动Consul(所有节点执行)
systemctl start consul
netstat -lntup
7.指定主节点(所有server节点执行)
consul join 192.168.4.131
8.如果想离线安装,文件就得手写了
1) 启动服务文件位置:/usr/lib/systemd/system/consul.service
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/consul.d/consul.hcl[Service]
EnvironmentFile=-/etc/consul.d/consul.env
User=consul
Group=consul
ExecStart=/usr/bin/consul agent -config-dir=/etc/consul.d/
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=process
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
2) 单体配置文件: /etc/consul.d/consul.hcl
data_dir = "/usr/local/consul"
client_addr = "0.0.0.0"
ui_config{
enabled = true
}server = true
bind_addr = "0.0.0.0"bootstrap_expect=1
四.克隆虚拟机方式添加client
1.虚拟机的快照和克隆就不说了,这几主要说要修改的内容
1) ip, mac
可以通过nmtui,也可以通过修改ifcfg-ens33
vi /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.4.134
MACADDR=00:50:56:28:29:AB
2).hostname:可以通过nmtui,
也可通过hostnamectl set-hostname host-consul1
3).uuid
a.查看 cat /sys/class/net/ens33/address
b.创建id
uuidgen
c.vi /etc/sysconfig/network-scripts/ifcfg-ens33
UUID="ab42ff8b-93bf-4958-8858-1318f0f20ae3"
2.更改consol的node-id
1) 创建id
uuidgen
2) 切换到数据路径,替换新的uuid
cd /usr/local/consul
vi node-id
reboot
3.Client端配置文件内容:
#datacenter = "my-dc-1"
node_name = "consul-client"
client_addr = "0.0.0.0"
bind_addr = "0.0.0.0"
data_dir = "/usr/local/consul"
enable_script_checks = true
enable_syslog = true
leave_on_terminate = true
log_level = "INFO"
rejoin_after_leave = true
ui_config{
enabled = true
}
retry_join = ["192.168.4.131", "192.168.4.132", "192.168.4.133"]
start_join = ["192.168.4.131", "192.168.4.132", "192.168.4.133"]
4.由于之前的快照是已经加了集群的consol节点,这里要脱离一下,停止后仅启动单节点
1) 脱离:consul leave
2) 改node-id,否则会提示重复,consul数据目录下 /usr/local/consul/raft/ 下, 添加 peers.json ,
内容如下:
[
{
"id": "1cfaa57e-0676-3008-2423-55eeb7abfc72",
"address": "10.1.0.1:8300",
"non_voter": false
}
]
3) 内容格式可参考同目录的 peer.info , 其中 id 通过查看 data/node-id 获得,
4) address 为本机内网通信地址, 基本不用改
5) non_voter 为是否不参与投票
6) 配置在初次启动完成后, 可以不再需要,重启后会自动删除
5.启动:systemctl start consul