介绍
微服务中有关键的几项技术,其中网关和服务服务发现,服务注册相辅相成。
首先解释几个本次教程中需要的术语
网关 Gateway(API GW / API 网关),顾名思义,是企业 IT 在系统边界上提供给外部访问内部接口服务的统一入口,简化了外部由于多服务协同完成任务时的繁琐配置。网关组件有Kong,ocelot,
服务发现:通过网关访问内部各个微服务,网关要找到所需服务的过程称为服务发现
服务注册:既然有服务发现,前提是要把所需服务提前“录入”,这个录入的过程称为服务注册。服务注册可配置文件(人肉方式不推荐),也可用服务注册组件如Consul或者Eureka等等(推荐)
搭建Consul集群(Windows)
官网下载Consul程序,https://www.consul.io/downloads.html
下载下来就是一个可执行文件Consul.exe
Consul有两种代理模式,一种server,一种client,官方建议Server端达到3台以上才可高可用,但不要太多,太多会给集群间数据同步造成压力,client数量不限。
多个server端之间会选择出一个leader,当一个server的leader宕机则会从其他server端”投票“选择新的leader
实践
这里server我们用2台实验
192.168.74.55
192.168.74.54
1台Client
192.168.74.161
consul启动有两种方式一种是命令行,一种是配置文件的方式。
命令行方式启动一个consul的server端
但是命令启动很繁琐,所以推荐下面的配置文件的方式启动
在consul同文件夹下建立一个server.json的配置文件
{ "datacenter": "dc1", "data_dir": "opt/consul/data", "node_name": "consul-server01", "server": true, "bootstrap_expect": 2, "bind_addr": "192.168.74.55", "client_addr": "192.168.74.55", "ui":true }
为了快速启动,再建立一个bat批处理文件runconsul.bat
consul agent -config-dir server.json
pause
双击runconsul.bat启动consul
在192.168.74.54服务器开启一个server端继续以上操作。
命令方式启动
consul agent -server -ui -data-dir opt/consul/data -node Server01 -bind 192.168.74.54 -client 192.168.74.54 -join=192.168.74.55
-join将192.168.74.54加入到192.168.74.55服务器
配置文件方式:
{ "datacenter": "dc1", "data_dir": "opt/consul/data", "node_name": "consul-server2", "server": true, "bind_addr": "192.168.74.54", "client_addr": "192.168.74.54", "ui":true, "retry_join": ["192.168.74.55"], "retry_interval": "30s", "rejoin_after_leave": true, "start_join":["192.168.74.55"] }
在192.168.74.161服务器开启一个consul的client端
命令方式:
consul agent -ui -data-dir opt/consul/data -node ServerSlave -bind 192.168.74.161 -client 192.168.74.161 -join 192.168.74.55
配置文件方式:
{ "datacenter": "dc1", "data_dir": "opt/consul/data", "node_name": "consul-client01", "server": false, "bind_addr": "192.168.74.161", "client_addr": "192.168.74.161", "ui":true, "retry_join": ["192.168.74.55"], "retry_interval": "30s", "rejoin_after_leave": true, "start_join":["192.168.74.55"] }
效果
简单Consul集群到这里就搭建成功,只要访问三台服务器任意一个都可数据同步,演示: