博客园已经有很多大神写过consul集群搭建了。大家都在玩,那我也不能托后退呢
不过自己研究下还是好的。毕竟每个人遇到的问题的不同
研究过才能说自己玩过consul,文章有部分名词解释是收集网络
Consul 官网:https://www.consul.io/
帮助文档:https://www.consul.io/docs/upgrading.html
Consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,
而且开发使用都很简便。它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。
具体的理论在网上都能找到,我这里就不描述了。主要写部署的实践过程
我看了网上大部分都是通过一台机器来模拟的集群,我打算通过多台服务器来进行集群搭建
这样才有实战效果,因为官方推荐用3台做server,所以用3台server只部署server,不部署其他程序
conusl集群通信中有很多端口:
8300:TCP # Server RPC :agent server 使用的,用于处理其他agent发来的请求 8301:TCP and UDP # Serf LAN: 所有的agent都要使用这个端口,用于处理LAN中的gossip, 8302:TCP and UDP # Serf WAN:agent Server使用的,处理WAN中的与其他server的gossip 8400:TCP # 所有agent都要使用的端口,用于处理从CLI来的RPC。 8500:TCP # 所有agent都要使用的端口,用于处理HTTP API。 8600:TCP and UDP # 用于处理 DNS 查询。
所以需要开通的端口有:8301/tcp 8301/udp 8302/tcp 8302/udp 8300/tcp 8500/tcp 8600/udp 如果我写漏了。自己补上
如果是阿里云服务,需要登陆阿里云配置本地安全组
一些相关命令:
firewall-cmd --list-ports #查看已开放的端口 firewall-cmd --reload # 重启防火墙,刚开通的端口才会生效 firewall-cmd --query-port=80/tcp #查询80端口开通状态 firewall-cmd --add-port=80/udp --permanent #开通80端口udp协议
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只有一个。
LAN Gossip——它包含所有位于同一个局域网或者数据中心的所有节点。
WAN Gossip——它只包含Server。这些server主要分布在不同的数据中心并且通常通过因特网或者广域网通信。
RPC——远程过程调用。这是一个允许client请求server的请求/响应机制。
简单来说就是:client相当于我们平时说的LB,负责将请求转发到Server,Server中有一个leader,负责Server集群的同步和监测,
这个server-leader在不指定的情况下回随机推举出一个,当然也可以手动指定。这个在ACL配置的时候需要保证Server-leader是同一个。
参数解释
1、命令参数
-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资源的路径,该目录必须是可读的