nacos安装部署非常的简单,下面一起学习一下nacos的安装。初步了解一下nacos的安装过程。
因为nacos需要依赖java,所以需要提前安装好jdk,官方推荐jdk8,按照要求安装即可,具体安装可以参考:Linux环境JDK安装
如果部署nacos集群的话,需要通过nginx做集群的负载均衡,nginx的安装可以参考:nginx基础学习(一):linux环境下nginx的安装和配置文件的初步认识
nacos的持久化使用的是MySQL,如果需要了解MySQL安装可以参考以下两篇文章,分别是MySQL5.7和MySQL8的安装方法。
上面基础环境奠定了以后开始做nacos集群的安装和部署工作。
根据官方推荐,目前推荐使用2.0.3稳定版本。下载地址:nacos在github上的下载地址。
特别提醒:
这里有个坑需要规避,进入这个下载地址后,不要直接点击后面的zip
或者tar.gz
下载,需要点击对应版本号,进入详情页面,拉到底部下载,下载的包名是nacos-server-2.0.3.tar.gz
。如果直接点击后面的zip
或者tar.gz
下载,下载的包是nacos-2.0.2.tar.gz
,这个不是编译好的安装包。
scp
命令将nacos安装包上传到服务器上,命令如下:scp D:\\nacos-server-2.0.3.tar.gz root@192.168.75.130:/usr/local
tar -xvf nacos-server-2.0.3.tar.gz
nacos-8840
mv nacos nacos-8840
nacos-8840/cnof
目录下,将Connect URL of DB
修改为如下内容:spring.datasource.platform=mysql
jdbc.DriverClassName=com.mysql.cj.jdbc.Driver ## 如果使用数据库是MySQL8,需要加上此驱动名,否则不用加
db.num=1
db.url.0=jdbc:mysql://192.168.75.128:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=123456
nacos-8840/conf
目录下的nacos-mysql.sql
文件复制到数据库所在的服务器内,创建名为nacos_config
数据库,并在数据库内执行sql脚本文件;## 复制文件到数据库所在服务器
scp nacos-mysql.sql root@192.168.75.128:/usr/local
## 创建数据库并执行脚本
mysql -uroot -p123456
create datasource nacos_config
use nacos_config
source /usr/local/nacos-mysql.sql
nacos-8840/conf
目录下的cluster.conf.example
文件复制一份并重命名为cluster.conf
,修改其内容如下:## 复制并重命名
cp cluster.conf.example cluster.conf
## 修改内容,将文件内最后三行换成现有的集群ip和端口,如果超过3台依次向后加即可
vim cluster.conf
## 修改后如下:
192.168.75.130:8840
192.168.75.130:8850
192.168.75.130:8860
application.properties
文件,将server-port
修改为8840
;### Default web context path:
server.servlet.contextPath=/nacos
### Default web server port:
server.port=8840
这个优化点在你的服务器性能较好的情况下,可以不做,我是在单台虚拟机里面部署三个nacos服务,资源紧张,修改一下此配置更放心,进入nacos-8840/bin
目录,找到startup.sh
文件,将文件中java堆栈的配置修改小一点,这里修改成128m,修改内容JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"
,具体修改如下:
## 修改前的内容
if [[ "${MODE}" == "standalone" ]]; then
JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
fi
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
fi
## 修改后的内容
if [[ "${MODE}" == "standalone" ]]; then
JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
else
if [[ "${EMBEDDED_STORAGE}" == "embedded" ]]; then
JAVA_OPT="${JAVA_OPT} -DembeddedStorage=true"
fi
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
fi
8840
节点的配置,接下来将nacos-8840
复制两份出来,并重命名:cp -R nacos-8840 nacos-8850
cp -R nacos-8840 nacos-8860
8850
和8860
节点的配置,很简单,将application.properties
文件中的server-port
做对应的修改即可。startup.sh
命令:# 在/usr/local目录下执行
./nacos-8840/bin/startup.sh
./nacos-8850/bin/startup.sh
./nacos-8860/bin/startup.sh
netstat -ano | grep 8840
netstat -ano | grep 8850
netstat -ano | grep 8860
## 在http下配置负载
upstream cluster {
server 127.0.0.1:8840;
server 127.0.0.1:8850;
server 127.0.0.1:8860;
}
## 在server内配置监听
listen 8848; ## 监听8848端口
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://cluster; ## 代理到负载上
}
在浏览器中输入:http://192.168.75.130:8848/nacos
,会弹出登录页面,默认用户名和密码都是nacos,到此集群部署大功告成。
nacos2.0版本相比1.x新增了gRPC的通信方式,因此需要增加两个端口,新增端口在配置的主端口(server.port
)基础上,进行一定的偏移量自动生成。偏移规则:
端口 | 与主端口偏移量 | 描述 |
---|---|---|
9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端服务发起连接和请求 |
9849 | 1001 | 客户端gRPC请求服务端端口,用于服务间同步等 |
因为这个改动,在一台机器上部署nacos集群时,不能将运行端口设置为连续端口,比如:8840
、8841
、8842
,否则会发生端口冲突。
运行在8840
端口nacos服务实际上会占用8840
、8940
、8941
三个端口;
运行在8841
端口nacos服务实际上会占用8841
、8941
、8942
三个端口;
运行在8842
端口nacos服务实际上会占用8842
、8942
、8943
三个端口。