最近准备给公司的同事培训下spring cloud相关的业务,因此写下这篇手记,也方便自己记忆。
首先,关于spring cloud最基础的就是它的服务注册发现组建,主流的包括zookeeper,eureka和consul.
其中,由于eureka已经停止更新,zookeeper相对支持性较差,因此我选用了consul,版本是1.4.4
consul安装
从consul官网https://www.consul.io/downloads.html
1、解压consul_1.4.4_darwin_amd64.zip
2、将解压后的二进制文件consul(上边画红框的部分拷贝到/usr/local/bin下)
3、赋予执行权限
consul agent 命令的常用选项,如下:
-data-dir
作用:指定agent储存状态的数据目录
这是所有agent都必须的
对于server尤其重要,因为他们必须持久化集群的状态
-config-dir
作用:指定service的配置文件和检查定义所在的位置
通常会指定为”某一个路径/consul.d”(通常情况下,.d表示一系列配置文件存放的目录)
-config-file
作用:指定一个要装载的配置文件
该选项可以配置多次,进而配置多个配置文件(后边的会合并前边的,相同的值覆盖)
-dev
作用:创建一个开发环境下的server节点
该参数配置下,不会有任何持久化操作,即不会有任何数据写入到磁盘
这种模式不能用于生产环境(因为第二条)
-bootstrap-expect
作用:该命令通知consul server我们现在准备加入的server节点个数,该参数是为了延迟日志复制的启动直到我们指定数量的server节点成功的加入后启动。
-node
作用:指定节点在集群中的名称
该名称在集群中必须是唯一的(默认采用机器的host)
推荐:直接采用机器的IP
-bind
作用:指明节点的IP地址
有时候不指定绑定IP,会报Failed to get advertise address: Multiple private IPs found. Please configure one. 的异常
-server
作用:指定节点为server
每个数据中心(DC)的server数推荐至少为1,至多为5
所有的server都采用raft一致性算法来确保事务的一致性和线性化,事务修改了集群的状态,且集群的状态保存在每一台server上保证可用性
server也是与其他DC交互的门面(gateway)
-client
作用:指定节点为client,指定客户端接口的绑定地址,包括:HTTP、DNS、RPC
默认是127.0.0.1,只允许回环接口访问
若不指定为-server,其实就是-client
-join
作用:将节点加入到集群
-datacenter(老版本叫-dc,-dc已经失效)
作用:指定机器加入到哪一个数据中心中
启动命令
我们这里使用的是推荐的3台机器的集群模式,一主二从,具体命令如下
105 主
106 107辅助
consul agent -data-dir /tmp/node0 -node=node0 -bind=x.x.x.105 -datacenter=dc -ui -client=0.0.0.0 -server -bootstrap-expect 2
consul agent -data-dir /opt/data -node=node1 -bind=x.x.x.106 -datacenter=dc -ui -client=0.0.0.0 -join=x.x.x.105 -server -bootstrap-expect 2
consul agent -data-dir /opt/data -node=node2 -bind=x.x.x.107 -datacenter=dc -ui -client=0.0.0.0 -join=x.x.x.105 -server -bootstrap-expect 2
命令说明:
agent :启动agent
-data-dir 设置数据存放地点为:/tmp/node0
-node=node0 设置节点
-bind=x.x.x.10 设置绑定的服务器地址,一般为本机
-datacenter=dc 设置数据中心
-ui 可通过8500进行访问
-client=0.0.0.0 任何机器都可注册
-server 作为服务端启动
-bootstrap-expect 2 集群最小2台
-join=x.x.x.105 加入已有集群
启动后如图所示,consul启动了3个实例