nacos集群部署

nacos详解

一 nacoa介绍

1 什么是nacos?

Nacos 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos 支持几乎所有主流类型的"服务"的发现、配置和管理:

Kubernetes Service

gRPC & Dubbo RPC Service

Spring Cloud RESTful Service

2 nacos的核心功能

  • 服务发现与注册

Nacos作为服务注册中心,可以帮助服务实例注册和发现,实现微服务架构中的服务注册与发现功能。
支持多种注册方式,如HTTP、DNS等,能够动态地管理服务实例信息,实现服务之间的通信。

  • 动态配置管理

Nacos提供了配置中心的功能,可以集中管理系统各个服务的配置信息。
支持动态配置更新、配置监听、配置推送等特性,可以实时地更新配置信息,而不需要重启服务。

  • 服务健康监测

Nacos能够对服务进行健康检查,及时发现不健康的服务实例,并进行相应的处理。
通过心跳机制和健康检查,确保服务的可靠性和稳定性。

  • 多环境支持

Nacos支持多环境的配置管理,可以根据不同的环境(如开发、测试、生产)来管理配置信息。

  • 集群部署和扩展

Nacos支持集群部署,具有良好的扩展性和高可用性,可以应对大规模服务架构的需求。

  • 统一的管理界面

Nacos提供了友好的Web界面和API接口,方便用户进行配置管理、服务注册和发现等操作。

3 nacos服务注册与发现的机制

Nacos 提供了灵活且强大的服务注册与发现机制,主要包括以下几个方面:

【1】服务注册:应用程序启动后,可以通过 Nacos 客户端将自己的服务实例信息注册到 Nacos 服务器上,包括服务名、IP 地址、端口号以及其他元数据信息。注册后的服务实例信息将被 Nacos 保存在注册中心中。
【2】服务发现:客户端通过 Nacos 客户端可以查询注册中心,获取指定服务名的服务实例列表,并根据负载均衡策略选择合适的服务实例进行调用。
【3】健康检查:Nacos 会定期检查已注册的服务实例的健康状态,对于不健康的实例进行标记,以便客户端在进行服务发现时过滤掉不健康的实例。
【4】动态感知:Nacos 支持动态感知服务实例的上下线变化,当服务实例发生变化时,客户端可以通过 Nacos 客户端实时获取最新的服务实例列表。
【5】元数据管理:除了基本的服务注册信息外,Nacos 还支持服务实例的元数据管理,例如版本信息、扩展信息等,这些元数据可以帮助客户端更精确地选择服务实例。

二 nacos集群部署

1 集群规划

我这里部署的nacos集群使用外置存储,所以需要MySQL数据库,生产部署时数据库也是需要集群模式的,我这里就采用单机版的MySQL了。

主机名IP应用OS
nacos-0111.0.1.131jdk11、nacos_v2.3.2Euler 21.10 LTS
nacos-0211.0.1.136jdk11、nacos_v2.3.2Euler 21.10 LTS
nacos-0311.0.1.137jdk11、nacos_v2.3.2Euler 21.10 LTS
test-db0111.0.1.138mysql_v8.0.28Euler 21.10 LTS
web11.0.1.133nginx_v1.26Euler 21.10 LTS

2 部署

1)前置条件

【1】mysql数据库

部署略

# 创建nacos库以及nacos访问账号
CREATE DATABASE if not exists nacos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'nacos'@'11.0.1.%' IDENTIFIED BY 'Qwerst@1311';
GRANT ALL PRIVILEGES ON nacos.* TO 'nacos'@'11.0.1.%';
FLUSH PRIVILEGES;

# 如果需要登录navicat连接工具,用以下创建语句
CREATE USER 'nacos'@'11.0.1.%' IDENTIFIED WITH mysql_native_password BY 'Qwerst@1311';
GRANT ALL PRIVILEGES ON nacos.* TO 'nacos'@'11.0.1.%'; WITH GRANT OPTION;
FLUSH PRIVILEGES;
# MySQL 8.0 默认使用了更加安全的身份验证方式(caching_sha2_password),而 Navicat 不支持该方式,所以还原成8.0之前的身份验证方式就行了(mysql_native_passowrd)
# WITH GRANT OPTION 的作用是允许被授权的用户将指定的对象权限授予其他用户

【2】jdk

[root@nacos-01 src]# 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)

[root@nacos-02 src]# 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)

[root@nacos-03 src]# 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)

2)nacos集群部署

可以参考官方文档:

https://nacos.io/zh-cn/docs/guide/admin/cluster-mode-quick-start/

Nacos支持三种部署模式:

  • 单机模式 - 用于测试和单机试用。
  • 集群模式 - 用于生产环境,确保高可用。
  • 多集群模式 - 用于多数据中心场景。

环境准备:

  1. 64 bit OS Linux/Unix/Mac,推荐使用Linux系统。
  2. 64 bit JDK 1.8+;下载. 配置。
  3. Maven 3.2.x+;下载. 配置(我这里直接下载二进制包进行安装,不需要编译)。
  4. 3个或3个以上Nacos节点才能构成集群

【1】下载地址

https://github.com/alibaba/nacos/releases/download/2.3.2/nacos-server-2.3.2.tar.gz

【2】上传至服务器中

[root@nacos-01 src]# ll -tr
总用量 147M
-rw-r--r-- 1 root root 147M  618 12:23 nacos-server-2.3.2.tar.gz

[root@nacos-02 src]# ll -tr
总用量 147M
-rw-r--r-- 1 root root 147M  618 12:24 nacos-server-2.3.2.tar.gz

[root@nacos-03 src]# ll -tr
总用量 147M
-rw-r--r-- 1 root root 147M  618 12:23 nacos-server-2.3.2.tar.gz

【3】解压到指定目录

[root@nacos-01 src]# tar -xf nacos-server-2.3.2.tar.gz -C /usr/local/
[root@nacos-02 src]# tar -xf nacos-server-2.3.2.tar.gz -C /usr/local/
[root@nacos-03 src]# tar -xf nacos-server-2.3.2.tar.gz -C /usr/local/

【4】配置集群配置文件 — 三个节点配置都一样

进入nacos的conf目录,修改集群配置文件,每行配置格式 ip:port

vim /usr/local/nacos/conf/cluster.conf
11.0.1.131:8848
11.0.1.136:8848
11.0.1.137:8848

修改application.properties配置文件

### 生成toke的值,至少32位,待会配置登录验证功能会用的到
openssl rand -base64 33
### 修改大致过程
1 修改数据库信息 
2 启用登录验证功能 --- 修改四个地方
#*************** Access Control Related Configurations ***************#
..........
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=nacos

### If turn on auth system:
nacos.core.auth.enabled=true    # 将false改为true
..........
### Since 1.4.1, worked when nacos.core.auth.enabled=true and nacos.core.auth.enable.userAgentAuthWhite=false.
### The two properties is the white list for auth and used by identity the request from other server.
nacos.core.auth.server.identity.key=eastcom   #指定值,负责无法启动
nacos.core.auth.server.identity.value=SRE2024  #指定值,负责无法启动
..........
### The default token (Base64 String):
nacos.core.auth.plugin.nacos.token.secret.key=6GRLjEpD+lN3C82Bb/XH2bATVxR+MMWJW3TqWM/p9yJD #前面生成的token值
    

修改完后的配置文件(可以直接把配置通过scp传到其他两个节点)

[root@nacos-01 nacos]# egrep -v "^#|^$" conf/application.properties
server.servlet.contextPath=/nacos
server.error.include-message=ALWAYS
server.port=8848
spring.sql.init.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.0.1.138:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=Qwerst@1311
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
nacos.config.push.maxRetryTime=50
server.tomcat.mbeanregistry.enabled=true
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.rotate=true
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd-HH
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.basedir=file:.
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
nacos.core.auth.caching.enabled=true
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=eastcom
nacos.core.auth.server.identity.value=SRE2024
nacos.core.auth.plugin.nacos.token.cache.enable=false
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
nacos.core.auth.plugin.nacos.token.secret.key=6GRLjEpD+lN3C82Bb/XH2bATVxR+MMWJW3TqWM/p9yJD
nacos.istio.mcp.server.enabled=false

【5】在mysql节点上,进行nacos初始化

注意:是在数据库服务器上操作!!!

# 先将sql文件发送至数据库节点
[root@nacos-03 conf]# ll /usr/local/nacos/conf/mysql-schema.sql
-rw-r--r-- 1 502 games 11K  26 09:58 /usr/local/nacos/conf/mysql-schema.sql
[root@nacos-03 conf]# scp /usr/local/nacos/conf/mysql-schema.sql root@11.0.1.138:/home/weihu/
    
# 导入sql文件进行初始化 
[root@test-db01 weihu]# mysql -h11.0.1.138 -unacos -pQwerst@1311 nacos < mysql-schema.sql
mysql: [Warning] Using a password on the command line interface can be insecure.

【6】启动nacos集群

# 三个节点都执行这个启动命令,默认为集群启动模式
/usr/local/nacos/bin/startup.sh
    
# 启动后查看日志
tail -100f /usr/local/nacos/logs/start.out
......
2024-06-18 13:39:00,936 INFO Nacos started successfully in cluster mode. use external storage
# 有以上信息就代表启动成功,也可以查看端口

【7】启动成功后查看端口

[root@nacos-01 nacos]# ps -ef |grep nacos
root        3497       1 16 13:38 pts/0    00:01:22 /home/weihu/jdk/jdk-11.0.23/bin/java -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/nacos/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Xlog:gc*:file=/usr/local/nacos/logs/nacos_gc.log:time,tags:filecount=10,filesize=100m -Dloader.path=/usr/local/nacos/plugins,/usr/local/nacos/plugins/health,/usr/local/nacos/plugins/cmdb,/usr/local/nacos/plugins/selector -Dnacos.home=/usr/local/nacos -jar /usr/local/nacos/target/nacos-server.jar --spring.config.additional-location=file:/usr/local/nacos/conf/ --logging.config=/usr/local/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288 nacos.nacos
root        4123    3234  0 13:46 pts/0    00:00:00 grep --color=auto nacos
[root@nacos-01 nacos]# ss -ntlp |grep 3497
LISTEN    0         100                      *:8848                   *:*        users:(("java",pid=3497,fd=121))             
LISTEN    0         128                      *:9848                   *:*        users:(("java",pid=3497,fd=79))              
LISTEN    0         128                      *:9849                   *:*        users:(("java",pid=3497,fd=80))              
LISTEN    0         128                      *:7848                   *:*        users:(("java",pid=3497,fd=64))              

# 可以看到每个实例监听了4个端⼝8848984898497848

端口说明如下:

端口与主端口的偏移量描述
88480主端口,客户端、控制台及OpenAPI所使用的HTTP端口
98481000客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
98491001服务端gRPC请求服务端端口,用于服务间同步等
7848-1000Jraft请求服务端端口,用于处理服务端间的Raft相关请求,其实是为了兼容低版本的leader选举

注意:3个节点如开启了iptables,则必须开放8848、9848、9849端⼝,否则集群无法建立!!!

【8】可以页面访问nacos

注意:页面登录成功后注意要修改密码!!!而且只需要在一个节点上修改密码即可,因为是共用一个数据库的!!!

http://11.0.1.131:8848/nacos

http://11.0.1.136:8848/nacos

http://11.0.1.137:8848/nacos
在这里插入图片描述

三 负载均衡配置

我这里采用nginx实现负载均衡,当然也可以使用keepalived+haproxy进行专业的负载均衡。

ngixn部署这里就略过了。

1)nginx配置文件

[root@web conf]# vim /usr/local/nginx/conf/nginx.conf
user weihu;
worker_processes 2;

events {
  worker_connections 1024;
}


http {
  include mime.types;
  default_type application/octet-stream;

  sendfile on;
  keepalive_timeout 65;

  upstream nacos {
    server 11.0.1.131:8848 max_fails=3 fail_timeout=5s;
    server 11.0.1.136:8848 max_fails=3 fail_timeout=5s;
    server 11.0.1.137:8848 max_fails=3 fail_timeout=5s;
  }

  server {
    listen 8848;
    server_name 11.0.1.133;
    location / {
      proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;
      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_pass http://nacos;
      proxy_http_version 1.1;
      add_header Set-Cookie "Path=/; HttpOnly; Secure";
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      expires 0;
    }
  }
}

# 重启nginx服务器
[root@web conf]# systemctl restart nginx
[root@web conf]# ss -ntl |grep 8848
LISTEN 0      511          0.0.0.0:8848      0.0.0.0:*


2)客户端通过nginx负载均衡节点访问nacos

http://11.0.1.133:8848/nacos
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值