一、简介

      Consul([ˈkɒnsl],康搜)是注册中心,服务提供者、服务消费者等都要注册到Consul中,这样就可以实现服务提供者、服务消费者的隔离。除了Consul之外,还有Eureka、Zookeeper等类似软件。consul是存储服务名称与IP和端口对应关系的服务器

      consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server和client。每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行。

     @client

CLIENT表示consul的client模式,就是客户端模式。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息。

    @server

SERVER表示consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的。

   @server-leader

中间那个SERVER下面有LEADER的字眼,表明这个SERVER是它们的老大,它和其它SERVER不一样的一点是,它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测。

  @raft

server节点之间的数据一致性保证,一致性协议使用的是raft,而zookeeper用的paxos,etcd采用的也是taft。

  @服务发现协议

consul采用http和dns协议,etcd只支持http

  @服务注册

consul支持两种方式实现服务注册,一种是通过consul的服务注册http API,由服务自己调用API实现注册,另一种方式是通过json个是的配置文件实现注册,将需要注册的服务以json格式的配置文件给出。consul官方建议使用第二种方式。

  @服务发现

consul支持两种方式实现服务发现,一种是通过http API来查询有哪些服务,另外一种是通过consul agent 自带的DNS(8600端口),域名是以NAME.service.consul的形式给出,NAME即在定义的服务配置文件中,服务的名称。DNS方式可以通过check的方式检查服务。

  @服务间的通信协议

Consul使用gossip协议管理成员关系、广播消息到整个集群,他有两个gossip  pool(LAN pool和WAN pool),LAN pool是同一个数据中心内部通信的,WAN pool是多个数据中心通信的,LAN pool有多个,WAN pool只有一个。

 二、安装

    consul官网:https://www.consul.io/

   1)下载

wget https://releases.hashicorp.com/consul/1.3.0/consul_1.3.0_linux_amd64.zip

  2)解压

unzip consul_1.3.0_linux_amd64.zip

 3)拷贝到usr目录下

mv consul /usr

4)查看是否安装成功

./consul

微服务引入nacos后 可以动态设置用户名和密码吗_服务器

5)启动

./consul agent -dev -ui -node=consul-dev -client=192.168.*.** #虚拟机ip

6) 后在浏览器中输 http://192.168*.**:8500 就可以访问了

 二、创建集群

  1)准备四台服务器

192.168.45.98  server192.168.45.99  server192.168.45.147 server192.168.45.203 client

 2)配置节点

Agent 节点
./consul agent  -dev -ui  -data-dir=data -node=n4 -bind=192.168.45.203 -client=0.0.0.0  #如果在后面加 "&"符号则是后天运行

Server节点

./consul agent -server -bootstrap-expect 3 -data-dir=data -node=n1 -bind=192.168.45.99 -client=0.0.0.0  #如果在后面加 "&"符号则是后天运行

./consul agent -server -bootstrap-expect 3 -data-dir=data -node=n2 -bind=192.168.45.203 -client=0.0.0.0 #如果在后面加 "&"符号则是后天运行

./consul agent -server -bootstrap-expect 3 -data-dir=data -node=n3 -bind=192.168.45.147 -client=0.0.0.0 #如果在后面加 "&"符号则是后天运行

-server 表示是server模式
  -bootstrap-expect=3 表示是集群中有3台服务器 bootstrap该模式node可以指定自己作为leader ,如果是非leader可不加该参数
  -data-dir=/tmp/consul 目录
  -node=n2 该服务器节点名
  -bind=192.168.45.99 节点绑定的ip
  -ui 非必须 webui的路径 用web来管理consul

3)加入集群,集群已 192.168.45.147位leader。如果加入失败,则开启端口

./consul join 192.168.45.98
./consul join 192.168.45.99
./consul join 192.168.45.203

4)查看集群

./consul members

微服务引入nacos后 可以动态设置用户名和密码吗_json_02

 

5)查看三台服务器打印的数据,说明配置成功

consul: New leader elected: n4

6)在浏览器中查看

微服务引入nacos后 可以动态设置用户名和密码吗_运维_03

 7)查看集群信息

./consul operator raft list-peers

8)清理集群信息,直接杀死线程