soul源码学习(十)-集群搭建

环境准备

  1. 搭建三个soul-admin实例(本机端口分别为9095/9096/9097), 启动命令如下:
java -jar soul-admin.jar --server.port=9095
java -jar soul-admin.jar --server.port=9096
java -jar soul-admin.jar --server.port=9097
  1. 搭建三个soul-bootstrap实例(本机端口分别为9195/9196/9197)
    同步方式采用websocket,配置文件如下:
soul:
    sync:
        websocket :
             urls: ws://localhost:9095/websocket,ws://localhost:9096/websocket,ws://localhost:9097/websocket

启动命令如下:

java -jar soul-bootstrap.jar --server.port=9195
java -jar soul-bootstrap.jar --server.port=9196
java -jar soul-bootstrap.jar --server.port=9197
  1. 配置nginx
upstream soul-admin-upstream {
server localhost:9095;
server localhost:9096;
server localhost:9097;
}


upstream soul-bootstrap-upstream {
server localhost:9195;
server localhost:9196;
server localhost:9197;
}

server {
    listen   9094;
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://soul-admin-upstream;
    }
}


server {
    listen   9194;
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://soul-bootstrap-upstream;
    }
}

使用nginx代理后端的三个soul-admin实例和三个soul-bootstrap实例,用来实现高可用
4. 分别启动三个soul-examples-http的实例,端口号是8188/8189/8190

启动后访问http://localhost:9094/,可以发现三个实例已注册到soul-admin中:
在这里插入图片描述

测试访问

1.通过nginx代理访问网关
在这里插入图片描述
2. 将dvide插件禁用,可以发现数据立马同步到网关,多刷新几次,返回结果为:
在这里插入图片描述
3. 测试soul-admin高可用,现将其中的两台9096和9097关闭,通过9094再次访问soul-admin,发现可以正常访问,观察soul-bootstrap端日志:

2021-01-26 01:22:02.479 ERROR 11861 --- [ocket-connect-1] o.d.s.p.s.d.w.WebsocketSyncDataService   : websocket reconnection is error.....
2021-01-26 01:22:02.519 ERROR 11861 --- [ocket-connect-3] o.d.s.p.s.d.w.WebsocketSyncDataService   : websocket reconnection is error.....

soul-bootstrap一直在尝试重连断掉的soul-admin,这是浏览器访问网关正常不受影响,将divide插件开启后,剩余的一个soul-admin可以正常将状态同步至三个网关示例中,服务访问不受影响
4. 测试soul-bootstrap高可用,现将其中的两台9196和9197关闭,只剩一台,再次重复步骤3的状态同步以及测试访问,可以发现所有访问都会达到剩余的一台网关中

源码简要分析

  1. websoket方式同步数据,网关启动时,通过获取所有配置的admin-url来依次与其连接感知所有admin的变化
    在这里插入图片描述
  2. http方式同步数据与websocket类似,也是在启动时配置的admin-url来依次建立长轮询
    在这里插入图片描述
    在这里插入图片描述
  3. zookeeper和nacos为单独的注册中心,网关连接是与zookeeper和nacos打交道,不直接与soul-admin通信,因此只要保证zookeeper和nacos高可用即可

结论

  1. soul-admin以及soul-bootstrap需要借助nginx才能实现高可用,自身组建的集群相互之间并不通信,soul-admin之间通过数据库来感知数据变化,需手动刷新,不能自动。
  2. soul-bootstrap通过同时监听多个soul-admin来实现任意一个soul-admin发生数据变更,都可以及时通知到该网关

猜你喜欢

转载自blog.csdn.net/yilongzhetian/article/details/113151169
今日推荐