springcloud Alibaba 笔记13 nacos集群和持久化配置(重要)

nacos集群和持久化配置

官方说明文档:

https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
在这里插入图片描述
在这里插入图片描述

1. 集群配置 linux版
1.1. 数据库切换

根据官网说明: https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
执行脚本建表:

nacos-server-1.1.4\nacos\conf目录下找到sql脚本: nacos-mysql.sql

修改配置使支持mysql:

nacos-server-1.1.4\nacos\conf目录下找到application.properties

2. 集群配置 docker 版

CentOS下安装docker并使用阿里云镜像加速器:

https://zhuanlan.zhihu.com/p/112937605

docker pull nacos/nacos-server:2.0.3

2.1 创建高可用数据库

官方文档: https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

2.1.1 使用Docker搭建MySQL服务

参考文档:

https://blog.csdn.net/tyvbpq/article/details/119571615     -- 主要参考
https://www.cnblogs.com/sablier/p/11605606.html

拉取并启动MYSQL数据库

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.27

创建数据库:

create database nacos_config;
use nacos_config;

初始化 MySQL 数据库

https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql
在这里插入图片描述

2.1.2 docker中 nacos 持久化配置 *

单例启动 nacos

docker run -d \
-e PREFER_HOST_MODE=hostname \
-e MODE=standalone \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e JVM_XMN=128m \
-p 8848:8848 \
--name nacos \
--restart=always \
nacos/nacos-server:2.0.3

修改 nacos 的 application.properties

# 1e7ae4cad0bc 是 nacos 的 containerID
docker exec -it 1e7ae4cad0bc /bin/bash
vi conf/application.properties

在 文件最后添加以下mysql配置,保存,重启容器

##=======================================
spring.datasource.platform=mysql
 db.num=1
db.url.0=jdbc:mysql://192.168.226.129:3306/nacos_config?characterEncoding=utf8&connectTimeout=2000&socketTimeout=3000&autoReconnect=true&serverTimezone=GMT%2B8
db.user=root
db.password=123456

在 nacos UI 中添加新的dataID,成功显示在数据库中。
在这里插入图片描述
在这里插入图片描述
官方 application.properties 配置

https://github.com/alibaba/nacos/blob/master/distribution/conf/application.properties

2.2 docker nacos 集群

docker 查看容器ip

一般情况下,docker desktop给容器分配的ip是从172.17.0.2开始,如果没有指定容器ip或不确定ip的话,可以任意新建一个容器,查询ip

docker inspect 容器ID

查询结果看最新docker container的 IP Address 的值

nacos servers 配置三个集群服务器
nacos 2.x 之后的版本,需要新增gRPC端口,所以下面每个实例都放开了几个端口,具体参考了
nacos 服务注册报错: https://blog.csdn.net/qq_37666892/article/details/123606947
和官方文档: https://nacos.io/zh-cn/docs/2.0.0-compatibility.html

docker run -d \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8840 \
-e NACOS_SERVERS=192.168.226.129:8840,192.168.226.129:8842,192.168.226.129:8844 \
-e NACOS_SERVER_IP=192.168.226.129 \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e JVM_XMN=128m \
-p 8840:8840 \
-p 7840:7840 \
-p 9840:9840 \
-p 9841:9841 \
--name nacos8840 \
--restart=always \
nacos/nacos-server:2.0.3

docker run -d \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8842 \
-e NACOS_SERVERS=192.168.226.129:8840,192.168.226.129:8842,192.168.226.129:8844 \
-e NACOS_SERVER_IP=192.168.226.129 \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e JVM_XMN=128m \
-p 8842:8842 \
-p 7842:7842 \
-p 9842:9842 \
-p 9843:9843 \
--name nacos8842 \
--restart=always \
nacos/nacos-server:2.0.3

docker run -d \
-e PREFER_HOST_MODE=ip \
-e MODE=cluster \
-e NACOS_APPLICATION_PORT=8844 \
-e NACOS_SERVERS=192.168.226.129:8840,192.168.226.129:8842,192.168.226.129:8844 \
-e NACOS_SERVER_IP=192.168.226.129 \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e JVM_XMN=128m \
-p 8844:8844 \
-p 7844:7844 \
-p 9844:9844 \
-p 9845:9845 \
--name nacos8844 \
--restart=always \
nacos/nacos-server:2.0.3

三个nacos服务器的各自修改 application.properties,添加mysql配置,
并重启。

docker exec -it nacos8840 /bin/bash
docker exec -it nacos8842 /bin/bash
docker exec -it nacos8844 /bin/bash
vi conf/application.properties

##=======================================
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.226.129:3306/nacos_config?characterEncoding=utf8&connectTimeout=2000&socketTimeout=3000&autoReconnect=true&serverTimezone=GMT%2B8
db.user=root
db.password=123456

可以看到三台nacos 都起来了
在这里插入图片描述

2.3 nginx 配置

如最上方架构图所示,配置nginx

docker 拉取nginx 镜像

docker pull nginx:1.20

暂时启动 nginx,使用端口1111

docker run --name mynginx -p 1111:80 -d nginx:1.20

拷贝配置到宿主机,用于后面挂载

mkdir /usr/local/docker/nginx
docker cp mynginx:/etc/nginx/nginx.conf /usr/local/docker/nginx/nginx.conf
docker cp mynginx:/etc/nginx/conf.d/default.conf /usr/local/docker/nginx/default.conf

在宿主机上修改配置文件 /usr/local/docker/nginx/default.conf

upstream nacos {
        server 192.168.226.129:8840 weight=1 max_fails=2 fail_timeout=10s;
        server 192.168.226.129:8842 weight=1 max_fails=2 fail_timeout=10s;
        server 192.168.226.129:8844 weight=1 max_fails=2 fail_timeout=10s;
    }
server {
    listen       1111;		# 这里表示nginx监听1111接口
    server_name  192.168.226.129;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        proxy_pass      http://nacos;
    }    

承接上面配置,以1111接口启动nginx,并暴露到宿主机1111接口

docker rm -f mynigix		# 强制删除旧的容器

docker run -p 1111:1111 --name mynginx \
-v /usr/local/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf \
--privileged=true -d nginx:1.20

在这里插入图片描述

如果没有开防火墙接口,需要去配置

列出防火墙, 添加防火墙端口号, 并重新加载防火墙
firewall-cmd --list-all

firewall-cmd --add-port=1111/tcp --permanent
firewall-cmd --add-port=8845/tcp --permanent
firewall-cmd --add-port=8846/tcp --permanent
firewall-cmd --add-port=8847/tcp --permanent

firewall-cmd --reload
2.4 使用程序连接到 nacos 配置中心

新建 provider端module cloudalibaba-provider-payment9003
pom

    <dependencies>
        <!--     SpringCloud Alibaba nacos  -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

yaml

server:
  port: 9003
spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        #server-addr: 192.168.226.128:8848   # 配置 nacos 地址
        # 换成 nginx 的 1111 端口
        server-addr: 192.168.226.129:1111
  endpoints:
    web:
      exposure:
        include: "*"  # 暴露监控端点

主启动类

@SpringBootApplication
@EnableDiscoveryClient
public class NacosPaymentMain9003 {

    public static void main(String[] args) {
        SpringApplication.run(NacosPaymentMain9003.class,args);
    }
}

controller

@RestController
public class PaymentController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id){
        return "server port:"+serverPort + "\t id:"+id;
    }
}

启动后,能够看到服务成功接入nacos集群
在这里插入图片描述

2.5 问题mark

如果前面配置的时候, 没有注意nacos暴露的gRPC端口,则会出现下面错误:

failed to req API:192.168.226.129:1111/nacos/v1/ns/instance. code:503
msg: server is DOWNnow, detailed error message: Optional[Distro
protocol is not initialized]

https://github.com/alibaba/nacos/issues/4210
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值