- 前置条件
- 下载nacos
- 上传nacos安装包到服务器上
- 持久化数据库配置
- 修改集群配置
- 配置优化点
- 复制集群节点
- 启动集群服务
- 配置nginx负载均衡
- 访问nacos页面
- 存在的坑点
- 官方解释
- 改动引起的变化
前置条件
nacos的安装过程。
- 因为nacos需要依赖java,所以需要提前安装好jdk,官方推荐jdk8。
先卸载open-jdk
Centos系统有时候会有自带的open-jdk,需要卸载掉。执行命令如下:
rpm -qa | grep java # 检查是否安装了open-jdk
rpm -e --nodeps xxxx # xxxx表示通过上个命令查询到的open-jdk名称,上一步没查到,此步不执行
安装
上传JDK安装包,然后解压。(用rz或者scp都可以)
tar -xzvf jdk-8u11-linux-x64.tar.gz -C /usr/local/
修改配置文件,先打开配置文件
vi /etc/profile
#在配置文件中添加如下配置内容
export JAVA_HOME=/usr/local/jdk1.8.0_11
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
应用修改的内容
source /etc/profile
检查是否安装成功
java -version
-
如果部署nacos集群的话,需要通过nginx做集群的负载均衡,nginx的安装可以参考:nginx基础学习(一):linux环境下nginx的安装和配置文件的初步认识
-
nacos的持久化使用的是MySQL,如果需要了解MySQL安装可以参考以下两篇文章,分别是MySQL5.7和MySQL8的安装方法。
上面基础环境奠定了以后开始做nacos集群的安装和部署工作。
下载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
,这个不是编译好的安装包。
上传nacos安装包到服务器上
解压nacos安装包:
tar -xvf nacos-server-2.0.3.tar.gz -C /usr/local/
持久化数据库配置
进入/usr/local/nacos/conf/目录下,将application.properties配置文件中Connect URL of DB修改为如下:
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
## 如果使用数据库是MySQL8,需要加上此驱动名,否则不用加
jdbc.DriverClassName=com.mysql.cj.jdbc.Driver
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.100.204:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=pass123456
此外我还开启了如下配置,暂时不知道有无影响什么。
#*************** CMDB Module Related Configurations ***************#
### The interval to dump external CMDB in seconds:
nacos.cmdb.dumpTaskInterval=3600
### The interval of polling data change event in seconds:
nacos.cmdb.eventTaskInterval=10
### The interval of loading labels in seconds:
nacos.cmdb.labelTaskInterval=300
### If turn on data loading task:
nacos.cmdb.loadDataAtStart=false
将/usr/local/nacos/conf/目录下的nacos-mysql.sql文件复制到数据库所在的服务器内,创建名为nacos_config数据库,并在数据库内执行sql脚本文件;
## 上传nacos-mysql.sql文件到数据库所在服务器
## 创建数据库并执行脚本
mysql -uroot -ppass123456
create datasource nacos_config
use nacos_config
source /root/nacos-mysql.sql
修改集群配置
将/usr/local/nacos/conf目录下的cluster.conf.example文件复制一份并重命名为cluster.conf,修改其内容如下:
## 复制并重命名
cp cluster.conf.example cluster.conf
## 修改内容,将文件内最后三行换成现有的集群ip和端口,如果超过3台依次向后加即可
vim cluster.conf
## 修改后如下:
192.168.100.235:8848
192.168.100.236:8848
192.168.100.237:8848
配置优化点
这个优化点在服务器性能较好的情况下,可以不做,资源紧张的话,修改一下此配置更放心,进入nacos/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
记得修改startup.sh 中的 JAVA_HOME=,修改后保存退出。
修改前:
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
修改后:
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/local/jdk1.8.0_11
复制集群节点
上面已经完成端口为8848节点的配置,接下来分别在236和237上做同样的配置
可以直接复制235上的配置文件给236和237用。
/usr/local/nacos/conf/application.properties
/usr/local/nacos/conf/cluster.conf
/usr/local/nacos/bin/startup.sh
将nacos 配置为系统服务
#建立service文件
vim /lib/systemd/system/nacos.service
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
如果是单机模式这个语句需要修改为如下,ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
保存后执行以下命令
加载新建的nacos.service
systemctl daemon-reload
设置nacos.service 为开机启动
systemctl enable nacos.service
开启nacos.service服务
systemctl start nacos.service
关闭nacos.service服务
systemctl stop nacos.service
查看 nacos.service服务状态
systemctl status nacos.service -l
启动集群服务
分别在192.168.100.235、192.168.100.236和192.168.100.237上启动nacos.service服务
systemctl start nacos.service
systemctl status nacos.service -l
配置nginx负载均衡
主要配置负载和监听,配置内容如下:
## 在http下配置负载
upstream cluster {
server 192.168.100.235:8848;
server 192.168.100.236:8848;
server 192.168.100.237:8848;
}
## 在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; ## 代理到负载上
}
配置完成后启动或者重启nginx即可。
访问nacos页面
在浏览器中输入:http://192.168.100.245: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
三个端口。
这是生产环境中使用的 nginx反向代理nacos负载均衡的完整配置文件,仅作参考。
user root;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 102400;
accept_mutex on;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
log_format format1 '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $http_x_forwarded_for $upstream_cache_status $request_time';
access_log logs/access.log format1;
server_names_hash_bucket_size 128;
client_header_buffer_size 4k;
large_client_header_buffers 4 8k;
client_max_body_size 50m;
#sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
#keepalive_timeout 65;
#gzip on;
keepalive_timeout 60s;
client_header_timeout 25s;
client_body_timeout 25s;
send_timeout 25s;
upstream nacos_cluster {
server 192.168.100.235:8848;
server 192.168.100.236:8848;
server 192.168.100.237:8848;
}
server {
listen 80;
server_name localhost;
#charset utf-8;
#charset koi8-r;
#access_log logs/host.access.log main;
location /nacos/ {
proxy_pass http://nacos_cluster/nacos/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
client_max_body_size 10m;
client_body_buffer_size 128k;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
参考文献 :https://www.csdn.net/tags/NtzaYgzsODk5NTItYmxvZwO0O0OO0O0O.html#_1
网友评论