业务微服务集群
业务高可用是基于spring cloud架构实现,每一个业务服务的实例通过eureka client将服务的信息注册到eureka注册中心集群,当请求到达网关(Zuul)时,根据配置的负载均衡策略,熔断策略将请求路由到业务服务实例,下图按照两个业务微服务(edge-mangement和data-query-service)的示例说明如下:
业务微服务集群部署
业务微服务在进行集群部署时,主要时配置eureka client,将服务信息注册到eureka server,eureka server集群和gateway集群必须先部署好
典型的eureka client的配置在spring配置文件中(application.yml)对应如下, client可以根据运行情况调整某些那默认参数,这里不展开详细描述
eureka:
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${server.port}
client:
service-url:
defaultZone: http://192.168.1.101:8763/eureka/,http://192.168.1.102:8763/eureka/
registry-fetch-interval-seconds: 10
server:
port: 9700
eureka client部分的字段说明如下:
名称 | 说明 | 默认值 |
---|---|---|
registryFetchIntervalSeconds | 从Eureka服务端获取注册信息的时间间隔,单位为秒 | 30 |
serviceUrl.defaultZone | eureka server连接的地址,server为集群部署时,配置为多个url地址,中间用,隔开 |
eureka instance字段说明如下:
名称 | 说明 | 默认值 |
---|---|---|
prefer-ip-address | 是否通过IP地址注册到服务中心,如果网络支持主机名称的解析,可以配置成false | |
instance-id | Eureka的实例id,可以配置成application name的名称加端口的形式,当业务服务为集群时,可以再加入节点名称以区分 |
下面以edge-management服务为例示例如何进行业务微服务集群部署
前置条件
- 准备两个服务节点(ip地址信息根据实际部署环境进行对应调整)
节点1: 192.168.1.101
节点2: 192.168.1.102
- gateway和eureka集群已经部署完成(ip地址信息根据实际部署环境进行对应调整)
eureka集群url为: http://192.168.1.101:8763/eureka/,http://192.168.1.102:8763/eureka/
gateway需要部署完成,业务服务不需要gateway配置,在请求时需要
- rabbitmq,mysql,redis服务已经搭建完成
rabbitmq: 以docker的形式运行,container名称为rabbitmq,端口5672,用户名和密码为 guest/guest
redis: 以docker的形式运行,container名称为redis
mysql: 192.168.1.101:3306 用户名密码为 root/123456
docker部署业务微服务集群
节点1上运行:
docker run -d --name edge-management --restart always --net iot \
-p 9700:9700 \
-e JAVA_OPTS=" \
-Dserver.port=9700 \
-Deureka.instance.prefer-ip-address=true \
-Deureka.instance.ip-address=192.168.1.101 \
-Deureka.instance.instance-id=edge-management-1:9000 \
-Deureka.client.service-url.defaultZone=http://192.168.1.101:8763/eureka/,http://192.168.1.102:8763/eureka/ \
-Drabbitmq.host=rabbitmq \
-Drabbitmq.port=5672 \
-Drabbitmq.username=guest \
-Drabbitmq.password=guest \
-Dspring.datasource.url=jdbc:mysql://192.168.1.101:3306/equipment_management?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8 \
-Dspring.datasource.username=root \
-Dspring.datasource.password=123456 \
-Dspring.redis.host=redis \
-Dlogging.level.root=INFO \
-Dlogging.level.org.reflections.Reflections=INFO \
-Dlogging.file.name=/opt/log/equip-management.log \
-Dsetting.schema.path=/opt/schema-template \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9998 \
-Dcloud.rpc.enable=false \
-Diot.command.type=MQ \
-XX:+HeapDumpOnOutOfMemoryError \
-Xmx256m \
" \
harbor.hipermatrix.com:10300/edge/edge-management:1.1.4
节点2上运行:
docker run -d --name edge-management --restart always --net iot \
-p 9700:9700 \
-e JAVA_OPTS=" \
-Dserver.port=9700 \
-Deureka.instance.prefer-ip-address=true \
-Deureka.instance.ip-address=192.168.1.102 \
-Deureka.instance.instance-id=edge-management-2:9000 \
-Deureka.client.service-url.defaultZone=http://192.168.1.101:8763/eureka/,http://192.168.1.102:8763/eureka/ \
-Drabbitmq.host=rabbitmq \
-Drabbitmq.port=5672 \
-Drabbitmq.username=guest \
-Drabbitmq.password=guest \
-Dspring.datasource.url=jdbc:mysql://192.168.1.101:3306/equipment_management?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8 \
-Dspring.datasource.username=root \
-Dspring.datasource.password=123456 \
-Dspring.redis.host=redis \
-Dlogging.level.root=INFO \
-Dlogging.level.org.reflections.Reflections=INFO \
-Dlogging.file.name=/opt/log/equip-management.log \
-Dsetting.schema.path=/opt/schema-template \
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9998 \
-Dcloud.rpc.enable=false \
-Diot.command.type=MQ \
-XX:+HeapDumpOnOutOfMemoryError \
-Xmx256m \
" \
harbor.hipermatrix.com:10300/edge/edge-management:1.1.4
注意:
- eureka相关的参数配置参考前面eureka client配置的说明
- 相应ip地址,服务地址,用户名密码请根据实际环境进行相关的调整