目录
系列目录地址
配置使用统一数据库
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/soul?useUnicode=true&characterEncoding=utf-8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
websocket方式
配置admin和bootstrap端口一一对应
soul-admin
server:
port: 9095
soul-bootstrap
server:
port: 9195
soul:
sync:
websocket :
// 对应admin的数据同步端口
urls: ws://localhost:9095/websocket
配置方式一:一个admin对应一个bootstrap
- 分别打包soul-admin,soul-bootstrap,配置多个一一配对关系: 9095-9195,9096-9196
- 打包soul-example-http,注册到admin:9095.相关配置
- 启动admin:9095 bootstrap:9195
java -jar soul-cluster-1/admin/soul-admin.jar --spring.config.location=soul-cluster-1/admin/application.yml java -jar soul-cluster-1/bootstrap/soul-bootstrap.jar --spring.config.location=soul-cluster-1/bootstrap/application-local.yml
- 启动admin:9096 bootstrap:9196
java -jar soul-cluster-2/admin/soul-admin.jar --spring.config.location=soul-cluster-2/admin/application.yml java -jar soul-cluster-2/bootstrap/soul-bootstrap.jar --spring.config.location=soul-cluster-2/bootstrap/application-local.yml
- 配置application.yml注册到 soul.http.adminUrl: http://localhost:9095
java -jar soul-example-http/soul-test-http.jar --spring.config.location=soul-example-http/application.yml
- 启动完成
- admin注册结果, soul-example-http只注册到admin:9095。观察结果发现两个admin都有http服务,因为他们共用了一个数据库。
- 访问结果,都可以通过网关转发到同一个http服务
配置admin对多个bootstrap
经过测试,一个admin配置多个bootstrap是可以的,这种方式admin就相当于一个注册中心的功能,新的服务只需要注册到admin就可以在多个网关共享数据。
这种方式可以组合成kafka的Partition-Replication,形成高可用方案。 partition对应admin, replication对应bootstrap。这是就成了soul的高可用集群配置。有一个问题,当一个admin down了之后,与之对应的网关会失去同步数据,没有数据更新。
配置一个bootstrap对应多个admin
soul:
sync:
websocket:
urls: ws://localhost:9095/websocket,ws://localhost:9096/websocket
配置一个bootstrap对多个admin,例如,启动两个admin,两个bootstrap, 两个bootstrap都连接到所有admin上,变成一个高可用soul集群。
zookeeper方式
配置admin和bootstrap端口一一对应
soul-admin
server:
port: 9095
soul-bootstrap
server:
port: 9195
soul:
sync:
zookeeper:
url: localhost:2181
sessionTimeout: 5000
connectionTimeout: 2000
把soul-bootstrap的zookeeper依赖加上
<!--soul data sync start use zookeeper-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-sync-data-zookeeper</artifactId>
<version>${project.version}</version>
</dependency>
总结
- websocket方式
bootstrap可以配置多个admin
soul 配置admin和bootstrap可以很灵活,可以参照其他各种高可用模型进行配置。
弊端admin和bootstrap多对多耦合很大,下线或增加admin,bootstrap要重新配置。
所以集群方式还是使用zookeeper作为配置中心
- zookeeper或者nacos (推荐)
高可用注册中心,admin和bootstrap的增加减少不用改配置。