请教一个问题,我这有一个项目是采用微服务架构和动静分离。想做高可用,和负载均衡。
系统是linux7.6版本。我想用nginx+keepalived实现nginx的高可用,通过nginx负载均衡,配置多个后端节点,分配用户的并发访问请求,那么多个后端节点,怎么连接一个数据库,(多个后端节点同时读取写入一个数据库,有没有什么影响,怎么解决),服务采用nacos自动注册,多个后端节点,怎么注册到一个nacos,会不会有冲突?
关于问题的回答如下:
高可用和负载均衡的实现: 1.采用nginx+keepalived实现nginx高可用。需要确保已经安装并启动了nginx和keepalived,可以参考官方文档进行配置。 2.通过nginx实现服务的负载均衡,可以采用ip_hash或round-robin等策略,在nginx.conf文件中配置upstream来实现,示例代码如下:
upstream backend { ip_hash; server 192.168.1.10:8080 weight=1; server 192.168.1.11:8080 weight=1; server 192.168.1.12:8080 weight=1; }
3.对于多个后端节点连接一个数据库,可以采用主从复制实现读写分离,同时使用连接池保证连接的可用性。一般情况下,读操作可以优先路由到从库上,写操作可以路由到主库上。可以使用不同的配置文件对主库和从库进行配置,示例代码如下:
spring.datasource.url=jdbc:mysql://192.168.1.10:3306/dbname?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.hikari.connection-timeout=3000 spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5
spring.datasource.url=jdbc:mysql://192.168.1.11:3306/dbname?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.hikari.connection-timeout=3000 spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.read-only=true
4.多个后端节点可以注册到一个nacos上,只需要在application.properties或application.yml文件中进行配置即可,示例代码如下:
spring.cloud.nacos.discovery.server-addr=192.168.1.10:8848,192.168.1.11:8848,192.168.1.12:8848
对于nacos配置中的用户名密码转义问题,可以避免使用#符号,或者在密码中使用url编码来解决。同时,服务注册时需要注意填写正确的服务地址,以及服务注册成功后在nacos控制台中进行查看。如果出现问题,需要检查nacos集群是否已经升级到2.x版本,并且关闭双写。可以使用curl命令来关闭双写,示例代码如下:
curl -X PUT 'localhost:8848/nacos/v1/ns/operator/switches?entry=doubleWriteEnabled&value=false'
如果存在节点没有以2.x模式启动的情况,可以尝试重启该节点,或者手动将其切换到2.x模式。可以通过查看naming-server.log中的元数据字段来确定节点是否准备好升级。最终需要确保所有节点都升级成功,以保证服务的正常注册和调用。