consul简介
consul是一个支持多数据中心分布高可用的服务发现和配置共享的服务软件由hashicorp公司用go语言开发,
主要特点:
- consul支持健康检擦,并允许http、grpc和dns协议调用api存储键值对的方式
- 一致性协议采用raft算法。用来保证服务的高可用
- 使用gossip协议管理成员和广播消息,并且支持acl访问控制
- consul的实例叫agent、agent有两种运行模式:server和client
- 官方建议每个consul cluster数据中心至少有三个或三个以上的运行在server mode的agent,client节点不限
consul使用场景
- docker容器的注册与配置共享
- coreos实例的注册与配置共享
- saas应用的配置共享、服务发现和健康检擦
- vitess集群
- 与confd服务集成,动态生成nginx和haproxy配置文件
consul优势
- 使用raft算法来保证一致性,比复杂的paxos更直接。相比较而言zookeeper采用paxos,而etcd使用的则是raft
- 支持多数据中心,内外网的服务采用不同的端口进行监听,多数据中心集群可以避免单数中心的单点故障,而其部署则需要考虑网络延迟,分片等情况,zoopeeper和etcd均不提供多数据中心功能的支持
- 支持健康检擦,etcd不提供此功能
- 支持http、dns和gprs协议端口。zookeeper的集成较为复杂,etc只支持http协议
- 官方提供web管理界面,etc无此功能
consul端口的了解
tcp/8300 :8300端口用于服务节点。客户端通过该端口rpc协议调用服务端节点
tcp/udp/8301:8301端口用于单个数据中心所有节点之间的相互通信,即对lan池信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检擦节点故障,事件广播
tcp/udp/8302:8302端口用于单个或多个数据中心之间的服务器节点的信息同步,即对wan池信息的同步,它针对互联网的延迟进行了优化,能够实现跨数据中心请求
8500:8500端口基于http协议,用于api接口或web ui访问
8600:8600端口作为dns服务器,它使得我们可以通过节点名查询节点信息
consul部署
服务器 192.168.175.152 docker-ce、compose 、consul-template
服务器 192.168.175.153 docker-ce 、registrator
安装docker-ce、compose在前面博客有介绍就不再操作
[root@promote ~]# mkdir consul ///创建consul目录
[root@promote ~]# cd consul/
///将consul_0.9.2_linux_amd64.zip文件挂载到consul目录下
[root@promote consul]# ls
consul_0.9.2_linux_amd64.zip
[root@promote consul]# unzip consul_0.9.2_linux_amd64.zip ///解压
Archive: consul_0.9.2_linux_amd64.zip
inflating: consul
[root@promote consul]# mv consul /usr/bin ///将文件移动到/usr/bin目录下便于使用
//开始代理功能
[root@promote consul]# consul agent \ ///代理功能
-server \ 服务
-bootstrap \ /参与选举
-ui \ web界面
-data-dir=/var/lib/consul-data \ ///提供一个代理储存目录
-bind=192.168.175.152 \ /绑定本地地址
-client=0.0.0.0 \ /面对的客户端地址,这些写所有地址
-node=consul-server01 &> /var/log/consul.log & //定义节点名称,日志混合输出到log
[root@promote consul]# consul members ///查看集群信息
[root@promote consul]# consul info | grep leader ///查看管理信息
leader = true
leader_addr = 192.168.175.152:8300
curl 127.0.0.1:8500/v1/status/peers 查看集群server成员
curl 127.0.0.1:8500/v1/status/leader 集群 raf leader
curl 127.0.0.1:8500/v1/catalog/services 注册的所有服务
curl 127.0.0.1:8500/v1/catalog/nginx ///查看nginx服务信息
curl 127.0.0.1:8500 /v1/catalog/nodes ///查看节点信息
在docker上连接consul并创建nginx
[root@promote ~]# docker run -d \
> --name=registrator \
> --net=host \
> -v /var/run/docker.sock:/tmp/docker.sock \
> --restart=always \
> gliderlabs/registrator:latest \
> -ip=192.168.175.152 \
> consul://192.168.175.148:8500
docker run -itd -p:81:80 --name test-01 -h test01 nginx