创建自定义网络

sudo docker network create my-consul

获取consul镜像

sudo docker search consul
sudo docker pull consul

创建consul服务器

sudo docker run -d --name node1 -h node1 --net my-consul consul agent -server -bootstrap-expect 3 -datacenter dc001

-bootstrap-expect 在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap公用(推荐使用的方式)

获取node1的ip地址

JOIN_IP="$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' node1)"

JOIN_IP 设置节点1的ip,方便后面使用

继续创建其他服务器

sudo docker run -d --name node2 -h node2 --net my-consul consul agent -server -join $JOIN_IP -datacenter=dc001
sudo docker run -d --name node3 -h node3 --net my-consul consul agent -server -join=$JOIN_IP -datacenter=dc001

consul后的参数用等于或者空格都可以比如上面我写的-datacenter dc001,这里我写的-datacenter=dc001 -server 此参数表明是创建服务器,不加就是创建客户端

启动consul客户端

sudo docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --name node4 -h node4 --net my-consul consul agent -ui -client=0.0.0.0 -join=$JOIN_IP -datacenter=dc001

-ui 在端口8500上启动Consul的Web UI
-client 将Consul的客户端绑定到指定ip,默认为127.0.0.1,这里设置为0.0.0.0,即不限制ip,让容器外也能访问到

更多参数

-advertise:通知展现地址用来改变我们给集群中的其他节点展现的地址,默认情况下-bind地址就是展现地址,然而也存在一些路由地址是不能受约束的,这时候会激活一个不同的地址来供应,如果这个地址不能路由,这个路由将不能被加入集群

-bootstrap:用来控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader,在一个节点的模式下这种方式很重要,否则在集群中的一致性不能保证,不推荐在集群中应用这个标识

-bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap公用(推荐使用的方式)

-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0,这意味着Consulo会使用第一个可用的私有IP地址,Consul可以使用TCP和UDP并且可以使用共同的端口,如果存在防火墙,这两者协议必须是允许的。

-client:consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1,只允许回路连接。RPC地址用于Consul命令,比如Consul members可以查询当前运行的Consul代理

-config-file:明确的指定要加载哪个配置文件,文件下的所有配置会合并在一起进行加载

-config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载

-data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在

-dc:该标记控制agent运行的datacenter的名称,默认是dc1

-encrypt:指定secret key,使consul在通讯时进行加密,key可以通过consul keygen生成,同一个集群中的节点必须使用相同的key

-http-port:HTTP API侦听端口,默认端口8500,可以在环境变量中进行设置,非常有用,可以用于与Consul进行通讯

-join:加入一个已经启动的agent的ip地址,可以多次指定多个agent的地址。如果consul不能加入任何指定的地址中,则agent会启动失败,默认agent启动时不会加入任何节点。

-retry-join:和join类似,但是允许你在第一次失败后进行尝试。

-retry-interval:两次join之间的时间间隔,默认是30s

-retry-max:尝试重复join的次数,默认是0,也就是无限次尝试

-log-level:consul agent启动后显示的日志信息级别。默认是info,可选:trace、debug、info、warn、err。跟踪 调试 详情 警告 错误,可以通过Consul monitor使用任何级别,也可以通过重启加载新的配置级别

-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名(代表一个机器)

-pid-file:提供一个路径来存放pid文件,可以使用该文件进行SIGINT/SIGHUP(关闭/更新)agent

-protocol:consul使用的协议版本 consul -v

-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。

-server:定义agent运行在server模式还是Client模式,提供时即为Server端,每个集群至少有一个server并且每台机器上不要超过5个dataceter.所有服务器采用一致性算法Raft保证数据一致,确保在故障的情况下的可用性。

-syslog:开启系统日志功能,只在linux/osx上生效

-ui-dir:提供存放web ui资源的路径,该目录必须是可读的