仿斗鱼直播平台项目

2024-02-07 18:59
文章标签 平台 项目 直播 斗鱼

本文主要是介绍仿斗鱼直播平台项目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

笔记来源:SpringCloudAlibaba高并发仿斗鱼直播平台实战

项目名称: 仿 🐟鱼直播平台项目

整体技术栈:

  • Dubbo 3.2
  • SpringBoot 3.0.4
  • MyBatis-Plus 3.5.3
  • MySQL 8.0
  • Redis 6.0
  • RocketMQ 4.8.0
  • Nacos 2.2.1
  • ShardingJDBC 5.3.2
  • Gateway 4.0.6
  • Netty 3.7.0
  • Docker 容器部署
  • Docker-Compose 容器集群管理

架构方式:

Dubbo集群作为服务提供者,多个API服务作为服务调用方

常见的微服务架构模式

微服务代理模式

image-20231226222038741

聚合器模式:

image-20231226222101081

链式微服务模式:(不提倡使用的模式)

image-20231226222125801

分支微服务模式

建议采用

image-20231226222212426

数据共享模式

image-20231226222156522

异步消息传递模式

当前最多采用的项目架构模式

image-20231226222231195

本次项目就采用的是异步消息传递模式

spring Cloud ,Dubbo ,spring Cloud Alibaba 如何选择?

框架对比:

Dubbo:

是一款RPC框架

核心特点:

  • 高性能的RPC调用
  • 弹性框架
  • 服务治理

Dubbo的服务治理:

  • 流量分配转发

    • 基于router(实现难度高,需要理解源码)/group/version (这两款基本拿来即用)
    • 可以实现流量转发多测试环境,线上环境A/B test,金丝雀发布等
  • 可视化监控平台

    • Dubbo-Admin 提供了一套可视化的监控平台用于监控 Dubbo 服务运行时的性能详情
  • 微服务生态完善

    • 可以很方便的接入各种第三方组件,例如Pinpoint,Skywalking,Sentinel,Nacos等
  • 开始支持服务网格技术

    • 可以透明的接入到Istio服务网格体系当中去

SpringCloud:

核心特点:
提供一套通用的分布式系统基础组件,支持服务治理服务注册与发现,配置中心,负载均衡,监控跟踪等

早期第一代
Spring Cloud 是由 Netflix 这家公司研发的使用的技术栈有Eureka、Ribbon、Feign、Hystrix、Zuul、Archaius等

SpringCloudAlibaba:

同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套集成框架。Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案

技术栈

Spring Cloud Gateway,Nacos,Dubbo,RocketMQ, Sentinel,Seata等

底层服务的调用更青睐于走RPC这种调用 整体性能比传统的SpringCloud更高一点。

框架性能等对比:

image-20231226222343674

image-20231226222401794

本次项目就是用 SpringCloudAlibaba框架 使用到的技术栈

SpringBoot,Dubbo,RocketMQ,NacosGateway,Netty等

直播业务下的微服务架构设计:

直播业务分析:

image-20231226222447553

业务模块分析

拆分成了6 个微服务模块

image-20231226222514601

服务的高并发特性分析: 用户中台 ,IM服务这两块大量涉及到高并发服务

整体的微服务架构图:

image-20231226222537060

基础环境的安装:

缓存清除:

清理页面缓存、dentries 和 inodes 缓存:

sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"

将清理页面缓存、dentries 和 inodes 缓存。

  • MySQL Redis
  • RocketMQ
  • Nacos
  • Docker
基础环境的删除:

如何删除镜像:

1. 停止容器:
首先,您需要停止与该镜像关联的容器。您可以使用以下命令停止容器:
docker stop qiyu-redis2. 删除容器:
一旦容器停止,您可以使用以下命令删除容器:
docker rm qiyu-redis3. 删除镜像:
一旦容器被删除,您可以使用以下命令删除与容器关联的镜像(即从 Docker Hub 拉取的镜像):
docker rmi redis
docker rmi [IMAGE_ID]
请注意, [IMAGE_ID] 是您要删除的镜像的 ID。

由于只是用于测试环境,所以搭建单机版本架构就好了

docker安装:

文档:docker安装按步骤一步一步到启动

image-20231113140247297

 sudo yum install -y yum-utils            # 安装软件包(提供实用程序)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   # 使用阿里云源sudo systemctl start docker    # 启动 Docker。sudo docker run hello-world     #  通过运行映像验证 Docker 引擎安装是否成功。hello-worldsudo systemctl stop docker      #  停止docker服务docker stop [CONTAINER_ID]      #  其中[CONTAINER_ID] 是要停止的容器的ID或名称:docker rm [CONTAINER_ID]        #  其中[CONTAINER_ID] 是要删除的容器的ID或名称docker psCONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES  # 表示启动成功
docker安装redis:

[docker安装redis](redis - Official Image | Docker Hub)

# 启动 Redis 实例
$ docker run --name some-redis -d redis  # 名字修改为自己想起的名字docker run --name qiyu-redis -d redis   # 会先去本地仓库找没有就去拉取镜像
# docker run: 这是 Docker 命令的一部分,用于创建和启动容器。
# --name xxz-redis: 这是一个选项,用于为容器指定一个名称。在这里,容器的名称被设置为 "xxz-redis"。这个名称可以用于后续对容器的引用。
# -d: 这是一个选项,表示以“后台”或“守护进程”模式运行容器。这意味着容器会在后台运行,并且不会占用终端。
# redis: 这是指定要运行的容器的镜像名称。在这种情况下,它是 Redis 镜像的名称。Docker 将尝试从 Docker Hub 或本地镜像存储中找到并运行 Redis 镜像。
# 是在后台运行一个名为 "qiyu-redis" 的 Redis 容器,使用 Redis 镜像创建这个容器。这样,就可以使用 Docker 来管理和运行 Redis 服务,而不需要手动安装和配置 Redis。[root@iZ0jlhr8lh4x4sqogl28c7Z ~]# docker ps   # 显示redis  qiyu-redis  已经启动了
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS      NAMES
121e53cb165c   redis     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   6379/tcp   qiyu-redis
#    到这里  我们的redis就部署好了# 查看当前正在运行的容器:          docker ps # 查看所有容器,包括已停止的容器:  docker ps -a   得到容器的名称、ID、状态等信息# 到容器的名称、ID、状态等信息      docker inspect <容器名称或ID>
# 要想删除  先停止再删除

image-20231113144732935

docker安装mysql:

[docker安装MySQL](码头工人 (docker.com))

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag    # 修改对应的tag为自己想要的版本docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7   # 安装5.7版本的mysql [root@iZ0jlhr8lh4x4sqogl28c7Z ~]# docker ps     
CONTAINER ID   IMAGE       COMMAND                  CREATED              STATUS              PORTS                 NAMES
56a42586cb9b   mysql:5.7   "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp, 33060/tcp   some-mysql       # mysql服务启动起来
121e53cb165c   redis       "docker-entrypoint.s…"   9 minutes ago        Up 9 minutes        6379/tcp              qiyu-redis       # redis服务启动起来

image-20231113145022113

RocketMQ安装:
**基本属于必须:**提前修改

因为内存过小而需要修改三个配置文件的默认数值 【基本都会碰到因为内存过小导致启动失败 故 提前修改配置】

分别是:

  • 修改 runserver.sh

  • 修改 runbroker.sh

  • 修改 tool.sh

前言::

RocketMQ 启动的方式与其组件有关,主要包括 NameServer 和 Broker。这两个组件可以通过命令行或者启动脚本来启动。以下是 RocketMQ 组件的启动方式:

  1. RocketMQ NameServer 启动:
    RocketMQ 的 NameServer 主要负责服务发现和路由管理。要启动 NameServer,可以使用以下命令:

    nohup sh bin/mqnamesrv &
    

    这将在后台启动 NameServer。启动命令假设已经进入了 RocketMQ 的安装目录,并且 RocketMQ 的启动脚本位于 bin 目录中。

  2. RocketMQ Broker 启动:
    RocketMQ Broker 是消息队列的主要组件,负责存储和处理消息。要启动 Broker,可以使用以下命令:

    nohup sh bin/mqbroker -n localhost:9876 &
    

    上述命令中的 -n 选项用于指定 NameServer 的地址和端口。请将其替换为实际的 NameServer 地址和端口。与 NameServer 一样,这将在后台启动 Broker。

  3. RocketMQ 控制台启动:
    RocketMQ 提供了一个控制台(Console),用于监视和管理 RocketMQ 集群。要启动控制台,可以使用以下命令:

    nohup sh bin/mqadmin &
    

    如果使用 RocketMQ 的 Docker 镜像,启动 RocketMQ 组件的方式可能会有所不同,具体取决于 Docker 镜像的配置和入口点设置。

[RocketMQ安装](快速开始 | RocketMQ (apache.org))本次下载的是4.8.0的源码包

源码包链接:https://pan.baidu.com/s/1Q_DreXLjfvb_kA7hy4WpHA
提取码:xxzy

可能会碰到的问题 两处都是因为设置内存大小而引发的

先安装unzip命令

要想解压压缩包先安装unzip 命令
# 对于 CentOS/RHEL 系统:sudo yum install unzip

解压压缩包

 unzip rocketmq-all-4.8.0-source-release.zip         # 解压4.8.0 版本压缩包
[root@xxz new-rocketmq-source]# ls
rocketmq-all-4.8.0-source-release  rocketmq-all-4.8.0-source-release.zip

**编译步骤:**使用maven编译

maven安装包链接:https://pan.baidu.com/s/1pxE_jer8WbeMaH4lOpE7uQ
提取码:xxzy

  1. 需要先安装maven

    如果你想要安装特定版本的 Maven,而不是默认的最新版本,可以使用以下步骤:

    1. 查找所需的 Maven 版本: 在 Maven 的官方仓库中找到你想要安装的特定版本的 Maven。你可以在 Maven 的官方网站或者 Maven 的镜像站点上找到版本信息。注意 Maven 的版本号。

    2. 使用 yum 安装指定版本: 打开终端,运行以下命令,替换 your_version_number 为你想要安装的 Maven 版本号:

      sudo yum install maven-<your_version_number>
      

      例如,如果你想要安装 Maven 3.9.5,可以运行:

      sudo yum install maven-3.9.5
      

      系统将尝试安装指定版本的 Maven。

    3. 验证安装版本: 安装完成后,你可以运行以下命令验证 Maven 的版本:

      mvn -v
      
  2. maven编译MQ

cd /usr/rocketemq/new-rocketmq-source/rocketmq-all-4.8.0-source-releasemvn -Prelease-all -DskipTests -Dspotbugs.skip=true clean install -U

编译结束后

cd ./distribution
ls
cd ./target
ls
cd rocketmq-4.8.0
ls
cd ./bin             #  重点是bin目录下(bin目录下是一些脚本 config是配置)
ls
[root@xxz rocketmq-all-4.8.0-source-release]# cd ./distribution
[root@xxz distribution]# ls
benchmark  bin  conf  LICENSE-BIN  NOTICE-BIN  pom.xml  release-client.xml  release.xml  target
[root@xxz distribution]# cd ./target
[root@xxz target]# ls
archive-tmp           checkstyle-checker.xml  maven-shared-archive-resources  rocketmq-4.8.0.tar.gz
checkstyle-cachefile  checkstyle-result.xml   rocketmq-4.8.0                  rocketmq-4.8.0.zip
[root@xxz target]# cd rocketmq-4.8.0
[root@xxz rocketmq-4.8.0]# ls
rocketmq-4.8.0
[root@xxz rocketmq-4.8.0]# cd rocketmq-4.8.0
[root@xxz rocketmq-4.8.0]# ls
benchmark  bin  conf  lib  LICENSE  NOTICE  README.md
[root@xxz rocketmq-4.8.0]# cd ./bin 
[root@xxz bin]# ls
cachedog.sh       mqadmin       mqbroker.numanode0  mqnamesrv       os.sh      runbroker.cmd  setcache.sh
cleancache.sh     mqadmin.cmd   mqbroker.numanode1  mqnamesrv.cmd   play.cmd   runbroker.sh   startfsrv.sh
cleancache.v1.sh  mqbroker      mqbroker.numanode2  mqshutdown      play.sh    runserver.cmd  tools.cmd
dledger           mqbroker.cmd  mqbroker.numanode3  mqshutdown.cmd  README.md  runserver.sh   tools.sh#   基本都会修改配置文件   vim tools.sh   
#   编辑修改jvm启动参数,原本为1g,1g,512m改小一点保存即可

到此目录后,我们开始启动NameServer

1 启动NameServer:
### 启动namesrv
nohup sh mqnamesrv &appending output to nohup.out     # 表明输出被追加到 nohup.out 文件中。[root@xxz bin]# ls
cachedog.sh       hs_err_pid2232.log  mqbroker            mqbroker.numanode2  mqshutdown      play.cmd       runbroker.sh   startfsrv.sh
cleancache.sh     hs_err_pid2539.log  mqbroker.cmd        mqbroker.numanode3  mqshutdown.cmd  play.sh        runserver.cmd  tools.cmd
cleancache.v1.sh  mqadmin             mqbroker.numanode0  mqnamesrv           nohup.out       README.md      runserver.sh   tools.sh
dledger           mqadmin.cmd         mqbroker.numanode1  mqnamesrv.cmd       os.sh           runbroker.cmd  setcache.sh### 验证namesrv是否启动成功
tail -f ./nohup.out此处碰到 内存问题 一定去修改内存大小  则会显示 启动成功的提示
# The Name Server boot success. serializeType=JSON

内存过小导致启动失败的问题:发现内存不足

image-20230731190955304

查看内存:

[root@xxz bin]# free -htotal        used        free      shared  buff/cache   available
Mem:           1.7G        623M        563M        752K        547M        954M
Swap:            0B          0B          0B
  • total: 总内存量,即1.7GB。
  • used: 已用内存,即623MB,这是当前正在使用的内存量。
  • free: 空闲内存,即563MB,这是尚未被使用的内存量。
  • buff/cache: 缓存内存,即547MB,用于文件系统缓存等。
  • available: 可用内存,即954MB,表示系统中尚未被使用的内存,可以用于新的进程。

发现available内存只有1952m了,加上rocketmq启动快要4个g,所以就内存不足了。

修改 runserver.sh

vi runserver.sh,修改第一行,内存改小点。

成功启动:

image-20230731191329164

image-20230731191456491

检查RocketMQ NameServer是否在运行: RocketMQ 还包括 NameServer,它用于服务发现和管理。可以使用以下命令来查看是否有 RocketMQ NameServer 在运行:

ps aux | grep NamesrvStartup

也可以使用jps

[root@xxz bin]# jps
17812 NamesrvStartup   # 启动成功
18020 Jps
2 启动Broker+Proxy:

NameServer成功启动后,我们启动Broker和Proxy,

 	### 先启动broker
nohup sh mqbroker -n localhost:9876 &### 验证broker是否启动成功, 比如, broker的ip是192.168.1.2 然后名字是broker-aThe broker[broker-a,192.169.1.2:10911] boot success...

基本也会需要去修改默认的内存值,因为默认值都是4g

修改 runbroker.sh

vim runbroker.sh 也是修改第一行,内存改小点。

修改为:

-server -Xms256m -Xmx256m -Xmn125m

成功启动:

image-20230731193222773

检查是否启动成功

image-20230731193517280

3 消息收发:

在进行消息收发之前,我们需要告诉客户端NameServer的地址,RocketMQ有多种方式在客户端中设置NameServer地址,这里我们利用环境变量NAMESRV_ADDR

$ export NAMESRV_ADDR=localhost:9876   # 进行完会爆内存错误 进行修改后继续执行$ sh tools.sh org.apache.rocketmq.example.quickstart.Producer
显示这个  是成功了    SendResult [sendStatus=SEND_OK, msgId= ...$ sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
#  提示这个   ConsumeMessageThread_%d Receive New Messages: [MessageExt...   表示rocketmq安装ok了
内存过小问题

遇到rocketmq执行tools.sh报错不能分配内存 即还是需要进行修改内存

修改tool.sh
vim tools.sh      打开这个,编辑修改jvm启动参数,原本为1g,1g,512m改小一点保存即可

image-20230731194758772

到此 rocketmq 安装就结束了

4 关闭服务器:

完成实验后,我们可以通过以下方式关闭服务

$ sh bin/mqshutdown broker            # 关闭指令 
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK$ sh bin/mqshutdown namesrv            # 关闭指令
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OKsh mqshutdown namesrv     #关闭NameServer: sh mqshutdown broker      #关闭Broker+Proxy
Nacos安装:

下载方式有两种:1 安装包 2 源码 此处使用方式一

Nacos安装

建议使用2.x以上的版本

但是注意:【官网说的】

image-20231113145312292

下载地址:Release 2.2.0.1 (March 2nd, 2023) · alibaba/nacos (github.com)

链接:https://pan.baidu.com/s/1Rt6Y2NxYbLPtY3KIcizerw
提取码:xxzy

下载压缩包【使用wget命令下载】

wget https://github.com/alibaba/nacos/releases/download            # 下载命令 不同版本的后跟不同版本号
wget https://github.com/alibaba/nacos/releases/download/2.2.0.1/nacos-server-2.2.0.1.tar.gz    # 下载linux版本

解压压缩包 tar -zxvf

tar -zxvf nacos-server-2.2.0.1.tar.gz[root@xxz /]# find / -name "nacos-server-2.2.0.1.tar.gz"  # 忘记压缩文件位置 快速查找语法
/usr/nacos/nacos-server-2.2.0.1.tar.gz
  • tar:tar命令用于打包和解包文件。
  • -xvf:选项x表示解包,v表示在屏幕上显示详细信息,f表示指定解包的文件,后面紧跟要解压的文件名。
  • nacos-server-2.2.0.1.tar.gz:要解压的文件名。

当执行这个命令时,它会将nacos-server-2.2.0.1.tar.gz文件解压缩到当前目录下,并生成一个名为nacos-server-2.2.0.1的文件,其中包含Nacos Server的所有文件。

删除文件:

假设要删除名为nacos的文件夹,可以使用以下命令:但会有提示信息

rm -r nacos

如果你不希望看到这些提示信息,可以使用-f选项来强制删除,例如:

rm -rf nacos

去修改配置文件中的 config 因为nacos有自己默认的存储位置

[root@xxz nacos]# ls
bin  conf  LICENSE  NOTICE  target
[root@xxz nacos]# cd ./conf
[root@xxz conf]# ls
1.4.0-ipv6_support-update.sql  application.properties.example  derby-schema.sql  nacos-logback.xml
application.properties         cluster.conf.example            mysql-schema.sql
cat ./mysql-schema.sql

并将所有 sql 信息拷贝导入进本地创建的数据库中对应拷贝创建

/** Copyright 1999-2018 Alibaba Group Holding Ltd.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**      http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*//******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info   */
/******************************************/
CREATE TABLE `config_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(128) DEFAULT NULL,`content` longtext NOT NULL COMMENT 'content',`md5` varchar(32) DEFAULT NULL COMMENT 'md5',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',`src_user` text COMMENT 'source user',`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',`app_name` varchar(128) DEFAULT NULL,`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',`c_desc` varchar(256) DEFAULT NULL,`c_use` varchar(64) DEFAULT NULL,`effect` varchar(64) DEFAULT NULL,`type` varchar(64) DEFAULT NULL,`c_schema` text,`encrypted_data_key` text NOT NULL COMMENT '秘钥',PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(128) NOT NULL COMMENT 'group_id',`datum_id` varchar(255) NOT NULL COMMENT 'datum_id',`content` longtext NOT NULL COMMENT '内容',`gmt_modified` datetime NOT NULL COMMENT '修改时间',`app_name` varchar(128) DEFAULT NULL,`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(128) NOT NULL COMMENT 'group_id',`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',`content` longtext NOT NULL COMMENT 'content',`beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',`md5` varchar(32) DEFAULT NULL COMMENT 'md5',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',`src_user` text COMMENT 'source user',`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',`encrypted_data_key` text NOT NULL COMMENT '秘钥',PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(128) NOT NULL COMMENT 'group_id',`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',`tag_id` varchar(128) NOT NULL COMMENT 'tag_id',`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',`content` longtext NOT NULL COMMENT 'content',`md5` varchar(32) DEFAULT NULL COMMENT 'md5',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',`src_user` text COMMENT 'source user',`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',PRIMARY KEY (`id`),UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (`id` bigint(20) NOT NULL COMMENT 'id',`tag_name` varchar(128) NOT NULL COMMENT 'tag_name',`tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',`data_id` varchar(255) NOT NULL COMMENT 'data_id',`group_id` varchar(128) NOT NULL COMMENT 'group_id',`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',`nid` bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`nid`),UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',`group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (`id`),UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (`id` bigint(20) unsigned NOT NULL,`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`data_id` varchar(255) NOT NULL,`group_id` varchar(128) NOT NULL,`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',`content` longtext NOT NULL,`md5` varchar(32) DEFAULT NULL,`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,`src_user` text,`src_ip` varchar(50) DEFAULT NULL,`op_type` char(10) DEFAULT NULL,`tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',`encrypted_data_key` text NOT NULL COMMENT '秘钥',PRIMARY KEY (`nid`),KEY `idx_gmt_create` (`gmt_create`),KEY `idx_gmt_modified` (`gmt_modified`),KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',`tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (`id`),UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';CREATE TABLE `tenant_info` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',`kp` varchar(128) NOT NULL COMMENT 'kp',`tenant_id` varchar(128) default '' COMMENT 'tenant_id',`tenant_name` varchar(128) default '' COMMENT 'tenant_name',`tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',`create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',`gmt_create` bigint(20) NOT NULL COMMENT '创建时间',`gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',PRIMARY KEY (`id`),UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';CREATE TABLE `users` (`username` varchar(50) NOT NULL PRIMARY KEY,`password` varchar(500) NOT NULL,`enabled` boolean NOT NULL
);CREATE TABLE `roles` (`username` varchar(50) NOT NULL,`role` varchar(50) NOT NULL,UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);CREATE TABLE `permissions` (`role` varchar(50) NOT NULL,`resource` varchar(255) NOT NULL,`action` varchar(8) NOT NULL,UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

数据库名为: nacos_config 表名等有提示

修改 application.properties 信息

cat application.properties |grep jdbc[root@xxz conf]# cat application.properties |grep jdbc
# 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

如何修改:

要修改Nacos中的application.properties数据源地址,可以按照以下步骤操作:打开Nacos的安装目录,找到conf目录,然后找到文件名为application.properties的文件。打开application.properties文件,找到以下配置:spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_config
db.password=nacos_config这里的db.url.0就是数据源地址。修改db.url.0的值为你要连接的数据库地址,例如:
db.url.0=jdbc:mysql://ip主机地址:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true保存文件并重启Nacos服务。确认修改是否成功,可以使用新的数据源地址连接数据库并查看是否有数据。

修改完进行启动【在2.2.0.1和2.2.1版本时,必须执行此变更 即修改 application.properties 配置文件设置 】这个版本是必须设置的否则启

动不了(网上找)

切换到bin 目录进行启动

# pwd
/usr/nacos/nacos/binsudo sh startup.sh -m standalone    # 以单机模式运行
#启动命令(standalone代表着单机模式运行,非集群模式):
#   会显示这个表示是单机启动
nacos is starting with standalone
nacos is starting,you can check the /usr/nacos/nacos/logs/start.out

可以通过以下方式检查 Nacos 服务器是否成功启动:

  1. 检查启动日志文件 /usr/nacos/nacos/logs/start.out 是否显示“Nacos is started”,表示服务器已成功启动。
  2. 使用 ps -ef | grep nacos 命令检查 Nacos 服务器进程是否正在运行。
  3. 在浏览器中输入 http://localhost:8848/nacos,如果能够打开 Nacos 控制台,则表示服务器已成功启动。
[root@xxz bin]# tail -f /usr/nacos/nacos/logs/start.out      # 检查是否启动
可能出现的问题:
1 内存问题:

Java 运行时环境无法继续运行,因为内存不足。尝试分配 1073741824 字节的原生内存时,映射操作失败,导致无法分配保留内存。

建议修改 /usr/nacos/nacos/bin/startup.sh 这个文件

-Xms-Xmx 参数来调整 Nacos 服务器的最小和最大堆大小,以便更好地利用可用内存。

接着运行查看是否成功 还出错的话就继续查看日志文件

使用以下命令来查看nacos.log文件的内容:

#   tail -f /usr/nacos/nacos/logs/nacos.log

检查是否启动

 tail -f /usr/nacos/nacos/logs/start.out      # 检查是否启动

是否显示“Nacos is started”,表示服务器已成功启动,一旦Nacos成功启动,应该能够通过浏览器或其他HTTP客户端访问Nacos的Web控

制台。

2. 未修改secret.key

有的版本必须修改默认空值 建议:网上找

举例:VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=

其他版本不用修改

3.修改控制台内外网切换

目的:为了不是这里显示内网登录地址而是自己的远程服务器ip登录需要进行修改

去到 application.properties 中进行此项的修改保存再执行

然后我们访问控制台通常情况下,可以使用以下地址来访问Nacos控制台:

成功进入的效果:

image-20231113160418787

默认的用户名和密码都是 nacos 为了安全自己去配置文件 application.properties 中修改哈

http://your-server-ip:8848/nacos      # 远程服务器访问格式
localhost:8848/nacos              # 本地服务器访问格式 基本都是127.0.0.1

初识docker容器及使用技巧:

持续更新!!!

CSDN 想躺平的做题家

这篇关于仿斗鱼直播平台项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/688634

相关文章

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择