一、官方说明
官方文档链接,官方推荐,采用第三种
二、部署安装
1、准备3台服务器,并且安装jdk,jdk安装教程
2、下载nacos安装包,下载地址
- Windows 下载 .zip 包
- Linux / Unix / Mac 下载 .tar.gz 包。
3、解压三台服务器上的nacos安装包,放在/usr/local/nacos下
4、首先需要知道Nacos有个默认的内嵌数据库,是derby,但是我们需要换成mysql,方便我们后面管理,然后需要搭建一个Mysql,没有搭建Mysql的可以看下我的教程,Linux安装Mysql教程
在 conf 目录下,提供了 MySQL 数据库初始化脚本 mysql-schema.sql。
我们可以根据自己的需要,创建一个库。例如说,创建一个 nacos-example 库。然后,使用该脚本进行数据库的初始化。最终表结构,如下图所示:
5、修改 application.properties,以mysql方式持久化,这里需要注意的是,集群模式必须配自己的独立ip
nacos.inetutils.ip-address=192.168.3.44
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&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=your password
为什么要设置nacos.inetutils.ip-address?
**分析:**正常情况下,上面的步骤就可以安装成功了,三台服务器上的nacos可以对外提供服务,彼此间可以通信。但是,通常在生产环境下的服务器是多网卡的,
使用 ip addr 命令查看linux主机的网卡。
- 第一个lo网络ip是回路ip,127.0.0.1,这个是标配
- 第二个enp0s3网络设备,ip是10.0.2.15,这个是因为我的服务器网络使用了双网卡:桥接+HostOnly模式。正常的服务器是没有的。
- 第三个enp0s8就是本服务器真正的使用到提供服务的网络ip,如:192.168.3.44。
- 第四个网络设备是因为我在这台虚拟机上安装过docker,所以有一个docker0的网络设备。
**问题:**解决网卡获取的不是我们希望绑定的网卡的问题:当我们配置完成之后,使用startup.sh命令启动。发现集群节点列表中并没有任何记录。而且后台服务日志报错,内容如下:
通过日志我们看到nacos程序自动获取的是10.0.2.15这个ip,而我们期望nacos绑定的是192.168.3.x的ip。
6、复制一份集群配置文件
cp cluster.conf.example cluster.conf
7、 启动 Nacos 服务
sh nacos/bin/startup.sh
8、再对另外两台服务器进行上述操作并启动后,至此集群部署已完成
注意点:在开通端口的时候要额外开通其他端口,
在nacos客户端升级为2.x版本后,新增了gRPC的通信方式,新增了两个端口。这两个端口在nacos原先的端口上(默认8848),进行一定偏移量自动生成。
端口与主端口的偏移量描述:
9848:客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
9849:服务端gRPC请求服务端端口,用于服务间同步等
7848:Nacos 集群通信端口,用于Nacos 集群间进行选举,检测等
三、nacos集群负载均衡
修改 Nginx 配置文件 nginx.conf如下:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#nacos集群负载均衡
upstream nacos-cluster {
server 192.168.3.44:8848;
server 192.168.3.45:8848;
server 192.168.3.46:8848;
}
server {
listen 8848;
server_name 192.168.3.1;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://nacos-cluster;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
由于nacos2.0以后新增了tcp通信端口,要在原端口号的基础上+1000来做通信。所以我们也需要在stream代码段中配置对应的tcp通信端口号(集群的端口是8848,那也要+1000和+1001,也就是9848、9849)
Nginx配置nacos TCP转发配置(需要nginx支持stream模块不然会报错):
#配置nacos TCP转发
stream {
upstream nacos1 {
server 192.168.3.44:9848;
server 192.168.3.45:9848;
server 192.168.3.46:9848;
}
server {
listen 9848;
proxy_pass nacos1;
}
upstream nacos2 {
server 192.168.3.44:9849;
server 192.168.3.45:9849;
server 192.168.3.46:9849;
}
server {
listen 9849;
proxy_pass nacos2;
}
}
重启nginx,至此全文end