consul部署服务注册与发现
使用consul
介绍 Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性:
- 服务发现: Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.
- 健康检查: Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机.
- Key/Value存储: 应用程序可用根据自己的需要使用Consul的层级的Key/Value存储.比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用.
- 多数据中心: Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域. Consul面向DevOps和应用开发者友好.是他适合现代的弹性的基础设施.
基础架构
Consul是一个分布式高可用的系统. 这节将包含一些基础,我们忽略掉一些细节这样你可以快速了解Consul是如何工作的.如果要了解更多细节,请参考深入的架构描述.
每个提供服务给Consul的阶段都运行了一个Consul agent . 发现服务或者设置和获取 key/value存储的数据不是必须运行agent.这个agent是负责对节点自身和节点上的服务进行健康检查的.
Agent与一个和多个Consul Server 进行交互.Consul Server 用于存放和复制数据.server自行选举一个领袖.虽然Consul可以运行在一台server , 但是建议使用3到5台来避免失败情况下数据的丢失.每个数据中心建议配置一个server集群.
你基础设施中需要发现其他服务的组件可以查询任何一个Consul 的server或者 agent.Agent会自动转发请求到server .
每个数据中运行了一个Consul server集群.当一个跨数据中心的服务发现和配置请求创建时.本地Consul Server转发请求到远程的数据中心并返回结果.
Console 配置与启动 jobs方式
- 下载
https://releases.hashicorp.com/consul/
- 安装
unzip consul_${CONSUL_VERSION}_linux_amd64.zip
sudo mv consul /usr/local/bin/
consul --version
// 文件可能没有执行权限
chmod 777 /usr/local/bin/consul
- 启动
- -bind 指定部署的主机地址
- -node 指定名称
- –client=0.0.0.0 指定外网访问
- -join 10.1.100.159 加入节点
- -server 如果为客户端则不添加这个参数
nohup consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node=n1 -config-dir=/etc/consul.d/ -bind=10.1.100.159 --client=0.0.0.0 -ui &
nohup consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node=n2 -config-dir=/etc/consul.d/ -bind=10.1.100.92 --client=0.0.0.0 -join 10.1.100.159 &
nohup consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node=n3 -config-dir=/etc/consul.d/ -bind=10.1.100.91 --client=0.0.0.0 -join 10.1.100.159 &
- 查看 ``` //查看任务 jobs //查看进程 ps -aux | grep consul
//查看consul状态-UI 加了-ui参数的服务器查看UI监控 http://10.1.100.159:8500
//查看选举状态 consul operator raft list-peers //查看成员 consul members
### Console 配置与启动 systemd方式
1.创建systemd服务
sudo vim /etc/systemd/system/consul.service
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] User=root Group=root ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d/ ExecReload=/usr/local/bin/consul reload KillMode=process Restart=on-failure LimitNOFILE=65536
[Install] WantedBy=multi-user.target
- ConditionFileNotEmpty : 此路径的文件必须存在,后面会说明如何配置
- User, Group : 运行consul的linux用户
- ExecStart : 启动命令,与上面的启动命令参数一致
2.配置consul服务
sudo mkdir /etc/consul.d sudo vim /etc/consul.d/consul.hcl
consul.hcl
datacenter = "dc1" data_dir = "/opt/consul" encrypt = "Luj2FZWwlt8475wD1WtwUQ=="
retry_join = ["172.16.0.11"]
- datacenter : 数据中心,默认为`dc1`,多集群时需要注意
- encrypt : consul通信加密密匙,可以用`consul keygen`生成,每个节点配置相同密匙
- retry_join : 重启后自动加入consul节点
3.服务配置
sudo mkdir /etc/consul.d sudo vim /etc/consul.d/server.hcl
server.hcl
server = true bootstrap_expect = 3
- server : 是否为server节点
- bootstrap_expect : 用要使用的consul服务器的数量替换bootstrap_expect值,推荐三到五个.
4.启动
sudo systemctl enable consul sudo systemctl start consul sudo systemctl status consul
5.查看systemctl日志
journalctl -u consul ```放任何对只读层的修改,容器声明的Volume的挂载点,也出现在这一层。