dawdler-config-center-consul-core
模块介绍
统一配置中心核心模块
1. dawdler-config.yml配置文件
配置不同类型的配置中心与相关配置,目前只支持consul,支持自定义扩展.
dawdler-config.yml 支持多环境配置 参考统一配置中心与多环境支持.
consul:
host: localhost
port: 8500
separator:
token:
wait-time: 10
watch-keys:
- /orderConfig
- /user
#TLSConfig:
#keyStoreInstanceType: JKS, JCEKS, PKCS12, PKCS11, DKS
#certificatePath:
#certificatePassword:
#keyStorePath:
#keyStorePassword:
host: consul服务器的ip
port: consul服务器暴露的端口
separator:分割符 一般无须配置,只在keys的场景有意义,如 以下请求:
设 目前已有目录 /config/config-uat /config/config-dev /config/config
访问 http://localhost:8500/v1/kv/config?keys&separator=-&wait=5s&index=2
返回 [
"config/config", "config/config-" ].
token:用于身份校验
wait-time:轮询超时长,单位秒数
watch-keys: 监控的key,是一个list列表,只有被监控的key有变化才会刷新相关配置,也可以通过 /
来监控所有的keys.
TLSConfig:证书相关配置,如果有敏感数据并且consul需要部署在互联网中使用,建议采用此配置. 具体参考:consul encryption
2. 安装consul
参考consul downloads 即可完成安装.
2.1 consul在生产环境下的使用
Consul支持多DataCenter,数据中心可以通过Internet互联,为了提高通信效率,只有Server节点才加入跨数据中心的通信.
在单个数据中心中,Consul分为Client和Server两种节点(所有的节点称为Agent),Server节点保存数据,Client负责健康检查及转发数据请求到Server,Server节点有一个Leader和多个Follower,Leader节点会将数据同步到Follower,Server的数量推荐是3个或者5个,在Leader挂掉的时候会启动选举机制产生一个新的Leader.
集群内的Consul节点通过gossip协议维护成员关系,某 个节点了解集群内现在还有哪些节点,这些节点是Client还是Server.单个数据中心的流言协议同时使用TCP和UDP通信,并且都使用8301端口.跨数据中心的gossip也同时使用TCP和UDP通信,端口使用8302.
集群内数据的读写请求既可以直接发到Server,也可以通过Client使用RPC转发到Server,请求最终会到达Leader节点,在允许数据轻微陈旧的情况下,读请求也可以在普通的Server节点完成,集群内数据的读写和复制都是通过TCP的8300端口完成.
注意: consul 只暴露局域网ip,如果使用配置中心这种需要ui来操作,可以通过nginx来暴露外网IP转发到consul局域网暴露的IP,同时通过auth_basic方式来认证授权访问ui.
2.1.1 nginx负载均衡多server节点集群
consul在生产环境下一般使用集群模式,集群模式自行参考官方文档完成即可,建议通过nginx来负载多个集群节点.
服务注册(配置中心的client端也采用这种方式)调用关系如下:
service->nginx(可以考虑多个nginx+lvs保证高可用)->(负载多个)consul_server
2.1.2 单client连接server节点集群
服务注册(配置中心的client端也采用这种方式)调用关系如下:
service->consul_client->consul_server
2.2 单机测试环境配置启动
consul agent -data-dir=/data/consul/data -server -bootstrap-expect 1 -bind=0.0.0.0 -client=0.0.0.0 -ui &
dev:用于本地开发环境.
server: 以server身份启动,默认是client.
data-dir:data存放的目录.
bind:监听的ip地址,默认绑定0.0.0.0.
client: 客户端的ip地址,0.0.0.0对外公开任何ip都可以访问.
ui: 开启访问web管理界面.
启动完成 访问consul管理界面 验证是否成功.
2.3 集群环境
以下提供一个三个服务端集群的示例:
#配置三台机器并启动
consul agent -server -bootstrap-expect 3 -data-dir=/data/consul/data -node=n1 -bind=192.168.43.131 -client=0.0.0.0 -ui&
consul agent -server -bootstrap-expect 3 -data-dir=/data/consul/data -node=n2 -bind=192.168.43.130 -client=0.0.0.0 -ui&
consul agent -server -bootstrap-expect 3 -data-dir=/data/consul/data -node=n3 -bind=192.168.43.137 -client=0.0.0.0 -ui&
#n1 n3 节点加入 n2,分别在 43.137与43.131中执行
consul join 192.168.43.130
#通过 consul members 可以查看节点状态
返回信息如下:
Node Address Status Type Build Protocol DC Partition Segment
n1 192.168.43.137:8301 alive server 1.11.3 2 dc1 default <all>
n2 192.168.43.131:8301 alive server 1.11.3 2 dc1 default <all>
n3 192.168.43.130:8301 alive server 1.11.3 2 dc1 default <all>
部分参数说明:
server: 以server身份启动.默认是client
bootstrap-expect:集群要求的最少server数量,当低于这个 数量,集群即失效
data-dir:data存放的目录,更多信息请参阅consul数据同步机制
node:节点id,集群中的每个node必须有一个唯一的名称.默认情况下,Consul使用机器的hostname
bind:监听的ip地址.默认绑定0.0.0.0,可以不指定.表示Consul监听的地址,而且它必须能够被集群中的其他节点访问.Consul默认会监听第一个private IP,但最好还是提供一个.生产设备上的服务器通常有好几个网卡,所以指定一个不会出错
client: 客户端的ip地址,0.0.0.0是指不限定ip(不加这个,下面的ui :8500无法访问)
ui: 可以访问UI界面
-config-dir指定配置文件夹,Consul会加载其中的所有文件
-datacenter 指定数据中心名称,默认是dc1
2.4 安全方面
要注意consul不要开放端口给互联网使用,建议通过nginx Basic HTTP authentication做授权后反向代理到局域网的consul端口上.