本文主要是介绍仿斗鱼直播平台项目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
笔记来源: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服务作为服务调用方
常见的微服务架构模式:
微服务代理模式
聚合器模式:
链式微服务模式:(不提倡使用的模式)
分支微服务模式:
建议采用
数据共享模式:
异步消息传递模式:
当前最多采用的项目架构模式
本次项目就采用的是异步消息传递模式:
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更高一点。
框架性能等对比:
本次项目就是用 SpringCloudAlibaba框架 使用到的技术栈
SpringBoot,Dubbo,RocketMQ,NacosGateway,Netty等
直播业务下的微服务架构设计:
直播业务分析:
业务模块分析:
拆分成了6 个微服务模块
服务的高并发特性分析: 用户中台 ,IM服务这两块大量涉及到高并发服务
整体的微服务架构图:
基础环境的安装:
缓存清除:
清理页面缓存、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安装按步骤一步一步到启动
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>
# 要想删除 先停止再删除
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服务启动起来
RocketMQ安装:
**基本属于必须:**提前修改
因为内存过小而需要修改三个配置文件的默认数值 【基本都会碰到因为内存过小导致启动失败 故 提前修改配置】
分别是:
-
修改 runserver.sh
-
修改 runbroker.sh
-
修改 tool.sh
前言::
RocketMQ 启动的方式与其组件有关,主要包括 NameServer 和 Broker。这两个组件可以通过命令行或者启动脚本来启动。以下是 RocketMQ 组件的启动方式:
-
RocketMQ NameServer 启动:
RocketMQ 的 NameServer 主要负责服务发现和路由管理。要启动 NameServer,可以使用以下命令:nohup sh bin/mqnamesrv &
这将在后台启动 NameServer。启动命令假设已经进入了 RocketMQ 的安装目录,并且 RocketMQ 的启动脚本位于
bin
目录中。 -
RocketMQ Broker 启动:
RocketMQ Broker 是消息队列的主要组件,负责存储和处理消息。要启动 Broker,可以使用以下命令:nohup sh bin/mqbroker -n localhost:9876 &
上述命令中的
-n
选项用于指定 NameServer 的地址和端口。请将其替换为实际的 NameServer 地址和端口。与 NameServer 一样,这将在后台启动 Broker。 -
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
-
需要先安装maven
如果你想要安装特定版本的 Maven,而不是默认的最新版本,可以使用以下步骤:
-
查找所需的 Maven 版本: 在 Maven 的官方仓库中找到你想要安装的特定版本的 Maven。你可以在 Maven 的官方网站或者 Maven 的镜像站点上找到版本信息。注意 Maven 的版本号。
-
使用
yum
安装指定版本: 打开终端,运行以下命令,替换your_version_number
为你想要安装的 Maven 版本号:sudo yum install maven-<your_version_number>
例如,如果你想要安装 Maven 3.9.5,可以运行:
sudo yum install maven-3.9.5
系统将尝试安装指定版本的 Maven。
-
验证安装版本: 安装完成后,你可以运行以下命令验证 Maven 的版本:
mvn -v
-
-
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
内存过小导致启动失败的问题:发现内存不足
查看内存:
[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,修改第一行,内存改小点。
成功启动:
检查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
成功启动:
检查是否启动成功
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改小一点保存即可
到此 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以上的版本
但是注意:【官网说的】
下载地址: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 服务器是否成功启动:
- 检查启动日志文件
/usr/nacos/nacos/logs/start.out
是否显示“Nacos is started”,表示服务器已成功启动。 - 使用
ps -ef | grep nacos
命令检查 Nacos 服务器进程是否正在运行。 - 在浏览器中输入
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控制台:
成功进入的效果:
默认的用户名和密码都是 nacos 为了安全自己去配置文件 application.properties
中修改哈
http://your-server-ip:8848/nacos # 远程服务器访问格式
localhost:8848/nacos # 本地服务器访问格式 基本都是127.0.0.1
初识docker容器及使用技巧:
持续更新!!!
CSDN 想躺平的做题家
这篇关于仿斗鱼直播平台项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!