一、前期准备
github:https://github.com/alibaba/nacos
官网:https://nacos.io/
1.1 数据库部署
# mysql 8.0 下载 官网:https://dev.mysql.com/downloads/mysql/8.0.html cd /usr/local/ tar xf mysql-8.0.36-linux-glibc2.17-x86_64.tar.xz ln -s mysql-8.0.36-linux-glibc2.17-x86_64 mysql echo "export PATH=$PATH:/usr/local/mysql8/bin" >>/etc/profile source /etc/profile vim /usr/local/mysql/my.cnf [mysql] #默认字符集 default-character-set=utf8mb4 socket = /usr/local/mysql/data/mysql.sock [client] port = 3306 socket = /usr/local/mysql/data/mysql.sock [mysqld] port = 3306 server-id = 3306 socket = /usr/local/mysql/data/mysql.sock # 安装目录 basedir = /usr/local/mysql # 数据存放目录 datadir = /usr/local/mysql/data log-bin = /usr/local/mysql/data/mysql-bin innodb_data_home_dir = /usr/local/mysql/data innodb_log_group_home_dir = /usr/local/mysql/data #日志及进程数据的存放目录 log-error =/usr/local/mysql/data/mysql-err.log pid-file =/usr/local/mysql/data/mysql.pid # 服务端使用的字符集默认为8比特编码 character-set-server=utf8mb4 lower_case_table_names=1 autocommit =1 # 创建新表时将使用的默认存储引擎 default_storage_engine = InnoDB mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --initialize-insecure 各参数意义 --defaults-file: 指定配置文件 (放在--initialize-insecure前) --user: 指定用户 --basedir: 指定安装目录 --datadir: 指定初始化数据目录 --initialize-insecure: 初始化不设置密码(若无该参数,则随机生成密码,需在 /data/mysql8/logs/mysql.log 查看 # 启动mysql /usr/local/mysql8/bin/mysqld_safe --defaults-file=/usr/local/mysql8/my.cnf &
nacos_config 表结构
相关表说明:
config_* :所有 config_ 开头的表都是 Nacos 配置中心使用时保存应用配置的表。
users:系统用户表,在集群环境下用户信息保存在 users 表中,而非在配置文件中。
roles:系统角色表,Nacos 的权限基于 RBAC(基于角色的访问控制)模型设计,此表保存角色数据。
permissions: 系统权限表,说明角色与系统使用权限的对应关系。
1.2 jdk下载部署
下载地址:https://www.oracle.com/cn/java/technologies/downloads/#java11
# JDK版本支持
2023.x branch: Corresponds to Spring Cloud 2023 & Spring Boot 3.2.x, JDK 17 or later versions are supported.
2022.x branch: Corresponds to Spring Cloud 2022 & Spring Boot 3.0.x, JDK 17 or later versions are supported.
2021.x branch: Corresponds to Spring Cloud 2021 & Spring Boot 2.6.x. JDK 1.8 or later versions are supported.
2020.0 branch: Corresponds to Spring Cloud 2020 & Spring Boot 2.4.x. JDK 1.8 or later versions are supported.
2.2.x branch: Corresponds to Spring Cloud Hoxton & Spring Boot 2.2.x. JDK 1.8 or later versions are supported.
greenwich branch: Corresponds to Spring Cloud Greenwich & Spring Boot 2.1.x. JDK 1.8 or later versions are supported.
finchley branch: Corresponds to Spring Cloud Finchley & Spring Boot 2.0.x. JDK 1.8 or later versions are supported.
1.x branch: Corresponds to Spring Cloud Edgware & Spring Boot 1.x, JDK 1.7 or later versions are supported.
echo "export JAVA_HOME=/usr/local/jdk-11.0.23" >> /etc/profile export PATH=$JAVA_HOME/bin:$PATH source /etc/profile [root@harbor mysql]# java -version java version "11.0.23" 2024-04-16 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.23+7-LTS-222) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.23+7-LTS-222, mixed mode) 生成jre cd /usr/local/jdk-11.0.23 bin/jlink --module-path jmods --add-modules java.desktop --output jre
Nacos部署需要开放以下四个端口以确保其正常运行:
主端口:默认为8848,用于客户端、控制台及OpenAPI的HTTP通信。
客户端gRPC请求服务端端口:默认为9848,用于客户端向服务端发起gRPC连接和请求。
服务端gRPC请求服务端端口:默认为9849,用于服务间的数据同步和其他服务端之间的通信。
Jraft请求服务端端口:默认为7848,用于处理服务端间的Raft相关请求,比如集群管理中的选主和日志复制等。
在实际部署环境中,至少需要确保主端口(8848)和客户端gRPC端口(9848)对外开放,并且根据实际需求和网络配置,可能也需要开放服务端gRPC请求服务端端口(9849)和Jraft请求服务端端口(7848)。同时,为了保障安全,应当采取相应的安全措施,
比如使用防火墙控制访问、启用身份验证和授权、以及加密通信等。
二、nacos单机安装
1.1 nacos单机安装
下载地址:https://github.com/alibaba/nacos/releases
cd /usr/local/ tar -xzvf nacos-server-2.3.2.tar.gz
# 数据库设置 # 1.创建nscos用户,如果在nacos和mysql在2台机器上 CREATE USER 'nacos'@'%'; ALTER USER 'nacos'@'%' IDENTIFIED BY 'nacos'; GRANT ALL privileges on nacos.* TO 'nacos'@'%'; # 如果nacos和mysql在同一台机器上 CREATE user 'nacos'@'localhost'; ALTER USER 'nacos'@'localhost' IDENTIFIED BY 'nacos'; GRANT ALL privileges on nacos.* TO 'nacos'@'localhost'; FLUSH PRIVILEGES; CREATE DATABASE nacos; quit; mysql -P 3307 -u root -p"wg1q2w3e" -D nacos < /usr/local/nacos/conf/mysql-schema.sql mysql> use nacos Database changed mysql> show tables; +----------------------+ | Tables_in_nacos | +----------------------+ | config_info | | config_info_aggr | | config_info_beta | | config_info_tag | | config_tags_relation | | group_capacity | | his_config_info | | permissions | | roles | | tenant_capacity | | tenant_info | | users | +----------------------+ 12 rows in set (0.00 sec)
# 配置nacos
vim /usr/local/nacos/conf/application.properties
db.url.0 中的 ip: 如果是mysql与nacos在同一台机器上,就不用更改,使用原来的127.0.0.1。 db.url.0 中的 connectTimeout、socketTimeout 如果设置时间较短可能在启动nacos时会连接不上数据库而启动失败。
2.2.2版本还需要打开
spring.sql.init.platform=mysql
db.num=1
1.2 启动nacos
cd /usr/local/nacos/bin sh startup.sh -m standalone # -m standalone 代表单机模式启动 或 nohup sh startup.sh -m standalone &
[root@harbor conf]# netstat -ntlp | grep java tcp6 0 0 :::7848 :::* LISTEN 2318/java tcp6 0 0 :::8848 :::* LISTEN 2318/java tcp6 0 0 :::9848 :::* LISTEN 2318/java tcp6 0 0 :::9849 :::* LISTEN 2318/java # 8848 用户web页面访问 # 9848、9849 用于2.x版本服务端链接 # 7848 Nacos集群通信端口,用于Nacos集群间进行检举、检测 https://nacos.io/zh-cn/docs/upgrading/2.0.0-compatibility/
# 停止服务 cd /usr/local/nacos/bin sh shutdown.sh # 浏览器访问: http://192.168.10.20:8848/nacos
1.2.1 nacos导入配置问题
nacos-2.2.2 版本中如果没有启用账号密码登录,就会点击不动导入配置
application.properties:
base64字符串,官网最少需要 32 位
nacos.core.auth.enabled=true
nacos.core.auth.caching.enabled=true
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos
nacos.core.auth.plugin.nacos.token.secret.key=U2VjcmV0S2V5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
1.3 集群部署
配置nacos配置文件/usr/local/nacos/conf/cluster.conf.example
cp cluster.conf.example cluster.conf # 添加集群中其它机器IP地址和端口信息 192.168.10.20:8848 192.168.10.21:8848 192.168.10.22:8848 # 再配置 application.properties # 启动nacos cd /usr/local/bin/ nohup sh ./startup.sh & # nacos 默认的启动方式就是以集群模式启动 # 如果出现问题查看日志,虚拟机一般就内存问题 查看启动日志,cat /usr/local/nacos/logs/start.out ,或查看 nacos 日志cat /usr/local/nacos/logs/nacos.log
# 设置为系统服务,并开机启动 vim /etc/systemd/system/nacos.service [Unit] Description= Nacos cluster After=network.target [Service] Type=forking User=root Restart=alway ExecStart=/usr/local/nacos/bin/startup.sh 2>&1 >/dev/null ExecStop=/usr/local/nacos/bin/shutdown.sh >/dev/null [Install] WantedBy=multi-user.target systemctl daemon-reload systemctl enable nacos
1.4 集群负载均衡
keepalived+nginx
upstream nacos_backend {
#ip_hash;
server 192.168.10.10:8848;
server 192.168.10.11:8848;
}
server {
listen 80;
server_name localhost;
error_log logs/nacos_err.log;
access_log logs/nacos_acc.log;
location / {
proxy_pass http://nacos_backend;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# 访问:
http://192.168.10.10/nacos 或者在10上新建命名空间,11上查看