概述
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协议管理成员关系、广播消息到整个集群,他有两个gossippool(LAN pool和WAN pool),LAN pool是同一个数据中心内部通信的,WAN pool是多个数据中心通信的,LAN pool有多个,WAN pool只有一个

安装consul-server集群

下载镜像

docker pull docker.io/consul:latest

  

创建consul配置:

vim /opt/platform/consul/config/server.json
{
"datacenter": "xxx-consul",
"data_dir": "/consul/data",
"server": true,
"ui": true,
"bind_addr": "172.29.150.25",
"client_addr": "0.0.0.0",
"bootstrap_expect": 3,
"retry_join": ["172.29.150.25","172.29.150.26","172.29.150.27"],
"retry_interval": "10s",
"rejoin_after_leave": true,
"skip_leave_on_interrupt": true
}

 

配置说明:

1. datacenter:数据中心名称(库名)
2. data_dir:数据存储目录
3. server:运行在server模式
4. ui:使用UI界面
5. bind_addr:内部集群通信绑定的地址。默认是宿主机ip,如果有多块网卡,需要指定,
否则启动报错
6. client_addr:客户端接口绑定的地址,默认是‘0.0.0.0’;
7. bootstrap_expect:集群预期的server个数,这里我们有3台server,设置为3;不能和bootstrap参数一同使用。这里需要说明下:bootstrap_expect指定的个数代表了server加入到集群之后,集群中的机器必须=>3的情况才开始选举server-leader,而如果配置bootstrap的节点,则启动的时候默认自己为leader。
8. retry_join:重新加入集群
9. retry_interval:重试时间
10. rejoin_after_leave:在离开集群之后才重试加入
11. skip_leave_on_interrupt :在启动后,是否ctrl+C优雅退出,我们是容器模式,所以不用管,直接true就好了。

额外配置说明(可有可无)
1. start_join:这个参数是在启动的时候选择加入到哪个集群,但是官方推荐retry_join取代他,因为效果更好。
2. enable_syslog:启用则consul的日志会写进系统的syslog里,但是如果是在windows上配置改参数就会报错。
3. enable_script_checks:是否启用监控检测脚本,这里没有对consul集群做监控,略。

默认端口说明
1. 8300:consul agent服务relplaction、rpc(client-server)
2. 8301:lan gossip
3. 8302:wan gossip
4. 8500:http api及UI端口
5. 8600:DNS服务端口

启动consul-server

docker run -d \
--net=host \
--name consul \
-v /opt/platform/consul/config:/consul/config \
-v /opt/platform/consul/data:/consul/data \
consul agent

web访问
浏览器访问http://172.16.150.25:8500/ui
只要是server端开启了UI,任何一个server都能访问web界面

安装consul-client

创建calico配置文件:

mkdir -p /opt/platform/consul/config/ /opt/platform/consul/data
vim /opt/platform/consul/config/client.json
{
"datacenter": "xxx-test-consul",
"data_dir": "/consul/data",
"server": false,
"ui": false,
"bind_addr": "172.16.5.45",
"client_addr": "0.0.0.0",
"bootstrap_expect": 0,
"retry_join": ["172.16.150.25","172.16.150.26","172.16.150.27"],
"retry_interval": "10s",
"rejoin_after_leave": true,
"skip_leave_on_interrupt": true
}

这里client不需要开启UI及server,所以均为false,以及bootstrap_expect设为0不参与leader节点竞争。

  

启动consul-client

docker run -d \
--net=host \
--name consul \
-v /opt/platform/consul/config:/consul/config \
-v /opt/platform/consul/data:/consul/data \
consul agent

  

查看节点身份

docker exec consul consul info

  

问题解决:
通过浏览器访问http://172.29.150.202:8500/ui 发现某个node下已经删除的容器IP还存在,需要找到对应的node删除/opt/platform/consul/data下所有数据, 重启consul-client

安装consul的更多相关文章

  1. Consul1-window安装consul

    转自  https://blog.csdn.net/j903829182/article/details/80960802 consul下载地址: https://www.consul.io/down ...

  2. Centos安装Consul微服务

    一.简介 Consul([ˈkɒnsl],康搜)是注册中心,服务提供者.服务消费者等都要注册到Consul中,这样就可以实现服务提供者.服务消费者的隔离.除了Consul之外,还有Eureka.Zoo ...

  3. Docker安装Consul集群

    Docker 安装Consul集群 使用windows 环境,Docker desktop community 构建consul集群. 1.docker 容器网络 docker安装后,默认会创建三种网 ...

  4. 在Windows上安装 Consul

    使用Chocolatey(Windows包管理工具)安装 官方安装说明 https://chocolatey.org/install 安装Consul 官方安装说明 https://chocolate ...

  5. window安装consul

    安装consul 下载包: https://www.consul.io/ 解压 consul_1..2_windows_amd64.zip 复制 consul.exe 到 d:\soft\consul ...

  6. 安装Consul服务中心

    安装Consul服务中心 首先下载对应版本的安装程序.点击下载 我下载的是macOS64位版本,下载文件是一个ZIP文件,下载后解压缩到一个你喜欢的位置,以开发模式启动consul服务: #进入con ...

  7. windows下安装consul

    Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件, 由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行 ...

  8. Linux安装consul

    1.下载并解压consul # cd /opt/ # mkdir consul # chmod 777 consul #cd consul #wget https://releases.hashico ...

  9. 单机安装 consul ui 对外提供服务

    Consul 安装启动ui,外网无法访问,应为Consul 默认绑定127.0.0.1 ,所以外网无法访问. 通过设置 -client 参数来设置     consul agent -server - ...

  10. CentOS7安装Consul集群

    1.准备4台服务器 linux1 192.168.56.101 linux2 192.168.56.102 linux3 192.168.56.103 linux4 192.168.56.104 2. ...

随机推荐

  1. quartz中的corn表达式

    一个Quartz的CronTrigger表达式分为七项子表达式,其中每一项以空格隔开,从左到右分别是:秒,分,时,月的某天,月,星期的某天,年:其中年不是必须的,也就是说任何一个表达式最少需要六项! ...

  2. 使用create-react-app创建项目(二)——引入ant方法(一)

    扩展项目(需要创建git默认文件) 具体步骤如下:       a.git init       b.git add .       c.git commit -m "..." n ...

  3. koa 项目打包(使用webpack打包koa2 框架app)

    关键问题 一:所有node_modules里的模块都不进行打包 webpack的核心功能是将引用的各个模块打到一个文件里,并会将各种规范的模块进行统一的模块化处理(webpack规范). 然而node ...

  4. Android即时通讯开发之XMPP (一)初识XMPP协议和asmack

    在讲XMPP和asmck之前 ,我还是先分享一些资源文档,如果你有耐心,可以直接忽略我下面所写的.下面有关XMPP的介绍大部分是摘抄网上的文档,后面我会写一些基于XMPP协议和asmck开源库的聊天室 ...

  5. Activity节点

    1.android:allowTaskReparenting Android:allowTaskReparenting是一个任务调整属性,它表明当这个任务重新被送到前台时,该应用程序所定义的Activ ...

  6. chrome调试笔记

    F12启动调试 1.右键加载按钮可以清空缓存并重新加载,有时候浏览器有缓存,代码更新不会及时反映出来. 2.performance mointer实时查看performance 点击三个竖着的小点,选 ...

  7. virtualbox迁移虚拟机

    我用的Ubuntu16.04,下图为装好virtualbox时安装好系统后默认的存储位置. 促使我想迁移的原因是我的/home下因为虚拟机的存储原因导致/home下还剩1.5M可用空间..... 该目 ...

  8. 解决DBGridEh遍历记录后不移动当前行位置的方法

    解决DBGridEh遍历记录后不移动当前行位置的方法 在用DBGridEh配合ClientDataSet使用时,需要知道用户选择了哪些记录,可用遍历记录的方法查询选择列是否为真,但在这之后,Clien ...

  9. 用js的方式运行c程序之webassemly

    在这里就不科普webassemly的作用以及好处了,请自行百度. 那么,怎么通过js的方式在浏览器中运行c程序呢,其中原理如下: 可能另一张图会更详细: 1.安装emscripten 说明文档地址:h ...

  10. vue data中的对象的属性如何使用watch监听

    在写项目的时候遇到了一个问题,就是需要动态监听data中一个对象的属性的变化.遇到了许多坑,在此过程中也发现了两种解决方案. 一.通过deep属性实现 data() { return { parent ...