04.Nacos持久化与集群

1.Nacos数据持久到Mysql

1.1.配置db信息:找到Nacos的安装目录,然后找到配置文件:conf/application.properties配置文件,添加db相关的信息如下

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

提示:这里选择的是mysql数据库,并且配置dataSource的四要素,数据库为Nacos

1.2.创建相关表 在Nacos安装目录中有一个 conf/nacos-mysql.sql 脚本文件,执行脚本创建数据库表

在这里插入图片描述

1.3.小结

到这里其实我们已经完成了持久化的配置,Nacos中的数据会自动持久到Mysql中,重启Nacos也不怕数据的丢失,您可以自己测试一下看看 。数据持久化是Nacos集群的基石。
当然,要做集群是一定要做持久化,做了持久化不一定非得做集群。

2.Nacos集群部署

2.1 集群模式解说

在这里插入图片描述

集群说明:
nacos2.0以下版本的环境可以通过startup.sh修改端口来配置多个nacos注册中心,共用一个nacos服务;
但是nacos2.0以上版本需要复制三份已配置好的nacos文件夹来配置多个nacos注册中心,并分别启动。 否则只能启动一个nacos服务,
否则报错org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat…
此报错是由于三个不同端口号的nacos服务公用一个文件夹导致,复制两份相同的nacos文件夹重新启动三个不同端口号的nacos服务即可正常启动。

Nacos2.0以下版本

2.2.集群配置

修改配置文件 nacos/conf/cluster.conf,配置三个Nacos的地址和端口 ,

# ip:port
172.17.0.15:8841
172.17.0.15:8842
172.17.0.15:8843

我这里是一个服务器模拟三个Nacos,所以使用端口进行区分。

2.3.修改启动命令

因为是本地测试,所以在启动Nacos的时候需要一个Nacos启动三次(当然你也可以安装和配置三个Nacos),并且每次启动都要修改端口,那么我们就复制三份启动脚本,脚本中的端口修改成不同的端口 , 在生成环境并不需要做如此操作.
复制并修改 bin/startup.sh 如下:

startup-8841.sh
startup-8842.sh
startup-8843.sh

编辑三个启动命令,修改JVM启动端口,分别为:8841,8842,8843如下:
在这里插入图片描述

window环境
修改startup-xxxx.cmd启动文件,在[if %MODE% == “standalone” (]这行上面设置服务端口 set “JAVA_OPT=%JAVA_OPT% -Dserver.port=8841”

    rem add newline
    set "JAVA_OPT=%JAVA_OPT% -Dserver.port=8841"
    if %MODE% == "standalone" (
    set "JAVA_OPT=%JAVA_OPT% -Xms512m -Xmx512m -Xmn256m"
    set "JAVA_OPT=%JAVA_OPT% -Dnacos.standalone=true"
    ) else (
    set "JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
    set "JAVA_OPT=%JAVA_OPT% -XX:-OmitStackTraceInFastThrow XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof"
    set "JAVA_OPT=%JAVA_OPT% -XX:-UseLargePages"
    )

startup-8841.cmd,8841
startup-8842.cmd,8842
startup-8843.cmd,8843

Nacos2.0+版本

1.将nacos文件夹复制成nacos1,nacos2,nacos3,并且修改conf/application.properties的端口号为8841,8842,8843

nacos1 server.port=8841
nacos2 server.port=8851
nacos3 server.port=8861

特别说明:此处端口号的间隔要大一点,原因如下:
nacos在2.0版本以后,除对外的端口外,还占用另外3个端口如下。

raft port: ${server.port} - 1000
grpc port: ${server.port} + 1000
grpc port for server: ${server.port} + 1001

假设对外端口为8848,即总共会有4个端口被占用,分别为7848、8848、9848、9849
因此,在同一台机启动多个nacos节点式,要避开所有占用的端口才可以。
错误示范:假设要启动2个nacos节点,对外端口分别设置为8847、8848
8847节点占用端口:7847、8847、9847、9848
8848节点占用端口:7848、8848、9848、9849
两个节点间有重复端口9848,因此这样启动nacos节点必然是不成功的,只能启动一个,另一个启动时抛java.net.BindException异常。

解决办法:
改成其他不冲突的端口即可,如将8847改为8846即可。

2.重新修改配置文件 nacos/conf/cluster.conf,配置三个Nacos的地址和端口 ,所有的nacos都要配置相同的集群地址

# ip:port
172.17.0.15:8841
172.17.0.15:8851
172.17.0.15:8861

2.4 安装nginx代理

下载地址:https://nginx.org/download/

2.5.配置Nginx代理Nacos

修改Nginx配置文件 /usr/local/nginx/conf/nginx.conf,增加主机配置(Server) 配置三个Nacos的代理(upstream)
在这里插入图片描述

http{
        #主机配置(Server) 配置三个Nacos的代理(upstream)
        #nacos2.0+版本配置如下,nacos2.0-版本可配置成上面的8841,8842,8843
        upstream nacos-server{
            server 127.0.0.1:8841;
            server 127.0.0.1:8851;
            server 127.0.0.1:8861;
     }
    ...........
    server {
        listen       8848; #监听端口8848
        ...........
        location /nacos/ {
			proxy_pass http://nacos-server/nacos/; #nacos注册中心地址
            #root   html;
            #index  index.html index.htm;
        }
    }
    ...........
}

提示:这里通过 server 配置了一个主机 ,listen监听的端口是 8848,这个是暴露给客户端的端口,location配置了/nacos/的访问路径,通过 proxy_pass配置代理,然后通过 upstream配置了三个Nacos节点。

3.集群测试

3.1.浏览器测试

通过访问 Nginx 访问Nacos界面: http://centos的ip:8848/nacos/ ,记得使用centos的ip

3.2.客户端配置

修改springcloudalibaba-user-server-1010的yml配置,将注册中心地址指向Nginx。

spring:
  cloud:
    nacos:
      discovery:
        server-addr: centos的ip:8848	#这里指向Nginx地址即可

5.小结

向Nginx。

spring:
  cloud:
    nacos:
      discovery:
        server-addr: centos的ip:8848	#这里指向Nginx地址即可

5.小结

到这里,Nacos就已经完成了,虽然是使用一个服务器模拟三个Nacos,但是集成方式都是一模一样,在生产环境需要把ip指向响应的服务器即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值