nacos提供了单机模式和集群模式俩种部署模式。然而在实际的生产环境中,使用单服务器搭建nacos服务器是不安全的,如若发生宕机或网络故障,整个微服务将瘫痪。因此,我们要想实现高可用,通常是使用集群的方式进行部署。
nacos搭建集群要求至少部署3台服务器实例。我们用docker模拟部署3台服务实例。用mysql做数据共享。
1.使用docker启动nacos-server会出现启动后多出一个节点,并且一直去连接
解决方案:
加入NACOS_SERVER_IP这个环境变量,即可解决!!!
docker-compose.yml配置:
version: "3"
services:
nacos-cluster-1:
image: nacos/nacos-server:1.4.1
environment:
PREFER_HOST_MODE: ip
MODE: cluster
NACOS_SERVER_IP: 172.20.0.2
NACOS_APPLICATION_PORT: 8848
NACOS_SERVERS: "172.20.0.2:8848 172.20.0.3:8849 172.20.0.4:8850"
SPRING_DATASOURCE_PLATFORM: mysql
MYSQL_SERVICE_HOST: mysql服务地址
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_DB_NAME: 数据库名
MYSQL_SERVICE_USER: 数据库用户名
MYSQL_SERVICE_PASSWORD: 数据库密码
JVM_XMS: 256m
JVM_XMX: 512m
JVM_XMN: 256m
ports:
- "8848:8848"
restart: always
#自定义网络,固定ip
networks:
nacos_cluster_nginx:
ipv4_address: 172.20.0.2
nacos-cluster-2:
image: nacos/nacos-server:1.4.1
environment:
PREFER_HOST_MODE: ip
MODE: cluster
NACOS_SERVER_IP: 172.20.0.3
NACOS_APPLICATION_PORT: 8849
NACOS_SERVERS: "172.20.0.2:8848 172.20.0.3:8849 172.20.0.4:8850"
SPRING_DATASOURCE_PLATFORM: mysql
MYSQL_SERVICE_HOST: mysql服务地址
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_DB_NAME: 数据库名
MYSQL_SERVICE_USER: 数据库用户名
MYSQL_SERVICE_PASSWORD: 数据库密码
JVM_XMS: 256m
JVM_XMX: 512m
JVM_XMN: 256m
ports:
- "8849:8849"
restart: always
networks:
nacos_cluster_nginx:
ipv4_address: 172.20.0.3
nacos-cluster-3:
image: nacos/nacos-server:1.4.1
environment:
PREFER_HOST_MODE: ip
MODE: cluster
NACOS_SERVER_IP: 172.20.0.4
NACOS_APPLICATION_PORT: 8850
NACOS_SERVERS: "172.20.0.2:8848 172.20.0.3:8849 172.20.0.4:8850"
SPRING_DATASOURCE_PLATFORM: mysql
MYSQL_SERVICE_HOST: mysql服务地址
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_DB_NAME: 数据库名
MYSQL_SERVICE_USER: 数据库用户名
MYSQL_SERVICE_PASSWORD: 数据库密码
JVM_XMS: 256m
JVM_XMX: 512m
JVM_XMN: 256m
ports:
- "8850:8850"
restart: always
networks:
nacos_cluster_nginx:
ipv4_address: 172.20.0.4
#自定义网段
networks:
nacos_cluster_nginx:
ipam:
config:
- subnet: 172.20.0.0/16
2.执行命令docker-compose启动命令创建nacos容器:
docker-compose up -d 运行
等待一会3个nacos创好后打开其中一个查看,如果是这样的代表创建好了
3.利用nginx实现代理转发服务
upstream cluster {
server ip地:8848;
server ip地址:8849;
server ip地址:8850;
}
server {
listen 8847;
server_name localhost;
location /nacos/ {
proxy_pass http://cluster/nacos/;
}
}