zookeeper集群环境搭建详细图文教程_虚拟机zookeeper安装教程图片步骤-程序员宅基地

【文档大纲】


  友情介绍

  软件环境

  注意点

环境安装

    1、 新建用于存储安装包以及软件安装的目录

    2、 下载安装zookeeper

    3、 解压zookeeper压缩包

单节点zookeeper配置

    1、 配置zoo.cfg文件

    2、 配置zookeeper的数据存储目录

    3、 新建myid文件

    4、 配置zookeeper集群节点

    5、 启动zookeeper服务

    6、 检查zookeeper服务是否成功启动

多节点zookeeper配置

    1、不同虚拟机下的zookeeper配置

    2、 验证不同虚拟机下的zookeeper服务

zookeeper客户端连接测试

    1、 连接节点自身

    2、 跨节点连接

停止任意zk节点,观察zk自动选举leader效果

恢复停止的zk节点,观察zk集群节点最新角色分配情况

总结

经验补充 


 

 

友情介绍

QQ技术交流群 470414533

个人网站 www.2b2b92b.com

开源中国 https://gitee.com/zhoubang85

 

在这里,你可以学习到什么?

  • 你可以完整的学会zookeeper集群环境的搭建和配置
  • 通过测试,清楚的知道zookeeper对于存在宕机节点情况下的leader自动选举

  该文档不仅仅包含zookeeper集群环境搭建的内容,也补充了zookeeper的主从节点等相关的介绍内容,方便学习研究,加深对zookeeper的学习。

  文档内容文字较多,图文丰富,请耐心阅读,不会让你失望。

 

软件环境

如果自己没有服务器的话,可以在本机安装WMware虚拟机,如何安装虚拟机,请自行解决。

 

VMware-workstation-full-14虚拟机下载地址(里面有永久注册码)

https://pan.baidu.com/s/1eR9T9lw

 

CentOS-6.5_64位下载地址

https://pan.baidu.com/s/1bZegMi

 

Zookeeper_3.4.9下载地址

https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz

 

注意点

在登录虚拟机中的Linux系统的时候,登录用户请使用系统自带的root,密码即为安装过程中自定义的密码。

不要使用自定义的用户名登录,不然有些目录是没有写的权限的,避免出现一些意外的情况,建议使用root最高权限账户登录.

 

环境安装

我们先在一台虚拟机中安装配置好单个ZK服务,成功后我们克隆出多个虚拟机,就无需在其他虚拟机中重新下载安装zookeeper等重复操作。

1、新建用于存储安装包以及软件安装的目录

 / 目录下创建一个以我的名字zhoubang为名称的目录,个人习惯罢了,这个请自行命名;

同时在zhoubang目录下再新建2个目录software(存储安装包)、operation(软件安装的目录),这些都是个人习惯,你们也可以自行选择目录创建。

 

2、下载安装zookeeper

  • 在线下载:推荐使用此方式,简单方便。
  • 本地上传安装包  :前提是本地已经有zookeeper的安装包了。你可以通过FTP等上传工具直接上传到对应目录下.

zk在线下载与安装

通过命令 cd /zhoubang/software 进入安装包的存储目录,使用wget命令下载zookeeper(下载地址文档上面已经提供);如下图,回车即可下载:

回车之后如果出现下图所示的<未知的名称或服务>错误,请检查当前虚拟机下的Linux系统的网络连接是否正常;

3、解压zookeeper压缩包

进入 /zhoubang/software目录, 通过命令 tar -zxvf ./zookeeper-3.4.9.tar.gz -C /zhoubang/operation/ 解压zookeeper包到指定目录,这里我解压到 /zhoubang/operation 目录下,如图:

此时,在/zhoubang/operation目录下,就会有zookeeper的资源,如下图:

 

 

单节点zookeeper配置

1配置zoo.cfg文件

如上图,zk提供的配置文件名称为zoo_sample.cfg ,首先我们需要将此文件重命名为zoo.cfg。因为zookeeper默认会加载zoo.cfg的文件,这是zk的规定。

 

查看一下zoo.cfg配置文件里面的内容有什么,如下图:

其中,最常用的配置有以下几个:

  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
  • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper的日志文件是在bin目录下,有一个zookeeper.out文件
  • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。伪集群模式下,这个端口需要配置成不同的。如果是多台虚拟机或者服务器下,则无需更改。

 

2、配置zookeeper的数据存储目录

这里我就在zookeeper的安装根目录下,新建了一个dataDir目录,用于存储zookeeper的数据。

如下图:

 

 修改zoo.cfg中的dataDir配置,即为刚刚新建的dataDir的目录地址。最终修改的结果如下图:

 

3、新建myid文件

在刚刚新建的dataDir目录下,新建一个myid文件该文件里面的内容,这里我就填写为1,至于数值1有何作用和意义?是否可以为其他数字?当然,我也不多做玄乎了,这数值是可以自定义的,单范围只能是1-255之间。具体的含义,下面会介绍。如下图:

 

4、配置zookeeper集群节点

zoo.cfg文件中的最下面,配置zk集群节点信息;当前配置的是单台虚拟机,所以配置内容目前只有一个server节点(等将其他虚拟机克隆并启动之后,就可以将其他虚拟机信息添加到此),效果如图:

server的配置含义说明:

server.A=B:C:D

其中 A 是一个数字,表示这个是第几号服务器;

B 是这个服务器的 ip 地址;

C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;

D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

 

如果是伪集群的配置方式也就是在一台服务器上搭建多个ZK服务节点,由于 一台服务器下的IP地址肯定一样,所以不同的 Zookeeper 实例通信端口号不能一样,故需要给它们分配不同的端口号。

相反,如果是在不同的服务器下(不同的虚拟机,IP地址不同)搭建ZK的话,由于IP地址不同,则C与D对应的通信端口可以保持一致。当然也可以配置成其他的端口。

 

注意点】:

其中的server.1里面的数字1,是我们在myid文件中指定的数值。代表不同的zk节点。

同时,IP地址配置也要与server.1所在的服务器节点的IP地址一致。

后面的2个通信端口,随意指定,只要不与其他端口冲突就行。

 

5、启动zookeeper服务

进入zookeeperbin目录下,执行命令启动zookeeper服务

如下图:

 

 

6、检查zookeeper服务是否成功启动

bin目录下,通过命令 ./zkServer.sh status 查看启动状态,如图:

由于我只启动了一个ZK服务,所以Mode后面的信息为standalone,意思独立节点。

 

 

多节点zookeeper配置

到上面为止,我们只是在单台虚拟机中成功搭建了zookeeper服务。接下来我们就开始在其他的虚拟机节点中配置zookeeper集群节点信息。

我本机电脑上克隆出了3个虚拟机(当然你也可以克隆很多个,为了学习方便,只配置3个节点就够了)。

IP地址分别是:

192.168.52.128

192.168.52.129

192.168.52.130

 

虚拟机克隆情况,如图所示:

这里虚拟机的命名,是方便大家查看的。 后面的数值123分别是我在zookeepermyid文件中指定的数值。

每台虚拟机中的系统环境以及zookeeper的安装配置,都与上面的单节点的zookeeper配置一致。

 

1、不同虚拟机下的zookeeper配置

需要更改的地方有以下几点:

  •  myid文件
  •  zoo.cfg 文件

1.1  首先我们修改192.168.52.128 对应的虚拟机中的zookeeper配置。

  myid文件中的数值为1(当前第一台虚拟机下的zookeeper可以不用修改,只修改另外2台即可)

  然后修改zoo.cfg文件,在最下面添加ZK节点配置.

  最终配置效果如下:

 

通过配置我们可以看到,需要将其他的zookeeper节点信息配置进来。

再强调一遍,server.1server.2server.3 中的数值123,对应的是dataDirmyid文件中的数值,不要配置错了,包括IP也要对应。

 

按照上面的操作步骤,分别对192.168.52.129192.168.52.130的虚拟机中的zookeeper进行配置。如下:

1.2192.168.52.129虚拟机中的zookeeper下的myid中的数值填写 ,对应的zoo.cfg文件最下面的配置,和上图一样的server配置,可以直接copy过去,最终配置如下:

1.3192.168.52.130虚拟机中的zookeeper下的myid中的数值填写 3 ,对应的zoo.cfg文件最下面的配置,和上图一样的server配置,可以直接copy过去,最终配置如下:

至此,我们3zookeeper节点的配置已经完毕。下面我们就启动zookeeper服务,验证集群是否搭建成功!

 

2、验证不同虚拟机下的zookeeper服务

分别进入每个虚拟机下的zookeeperbin目录下,执行命令 ./zkServer.sh start 启动ZK服务!

通过命令 ./zkServer.sh status查看ZK启动状态。如果出现了以下错误:

 

 我们去查看一下日志(bin目录下zookeeper.out日志文件)。查看里面的内容,有一段错误信息如下:

这种情况下,网上很多人都说是防火墙开启导致端口无法通信造成的;那我就在每个虚拟机上,把防火墙关闭;可以使用命令 service iptables stop 临时修改防火墙状态,关闭防火墙。

防火墙关闭了,这时候全部重启zookeeper,再通过 ./zkServer.sh status 命令查看启动状态,如果出现下面的任意一个结果,说明ZK集群环境已经搭建成功,如下图:

到此,zookeeper集群环境已经搭建完毕!

 

 

zookeeper客户端连接测试

我们可以通过zkCli.sh提供的命令进行客户端连接测试,检测是否可以跨节点连接。

 

先看一下各zookeeper节点的角色关系:

192.168.52.128  follower

如下图:

 

192.168.52.129  follower

如下图:

 

192.168.52.130  leader

如下图:

 

连接节点自身

我们先在任意一个zookeeper节点的bin目录,通过命令./zkCli.sh -server 192.168.52.129:2181连接自己本身(这里我就在IP192.168.52.129的服务器下做客户端连接测试),

如图:

出现上图所示内容,说明zookeeper客户端连接OK。退出命令为 quit

 

跨节点连接

既然是集群环境,那肯定可以在任意zookeeper节点下,去连接任意的zookeeper节点。

我们试一下就知道了,同样的,通过命令./zkCli.sh -server 192.168.52.129:2181连接任意节点。

上面已经做了连接自身的测试了,现在我们就来操作,在192.168.52.129的服务器上去连接其他的2台服务器上的zookeeper服务。

 

先连接192.168.52.128服务器上的zookeeper服务,如图:

从图中可以看出,跨服务节点的连接是OK的!

 

 

 连接192.168.52.130服务器上的zookeeper服务,如图

 从图中可以看出,跨服务节点的连接是OK的!

 

 

停止任意zk节点,观察zk自动选举leader效果

既然是集群,就必然脱离不了主从的角色,zookeeper自身会根据节点的生存、死亡状态,自动的进行选举切换。

这里我们将角色为leader的解决给停止掉,然后看一下其余的2个处于正常情况的角色分配情况,看看zookeeper会不会自动进行选举leader并切换。

 

再说明一下当前3zk节点的角色关系

192.168.52.128  follower

192.168.52.129  follower

192.168.52.130  leader

 

我们先停止192.168.52.130这个leader主节点,进入zookeeperbin目录,执行命令 ./zkServer.sh stop 停止服务。然后通过命令 ./zkServer.sh status 查看当前zk节点状态是否已经停止,如图:

说明之前的leader角色的节点已经停止成功了!

乘胜追击,大约等待530秒左右,我们去看一下另外2zk节点的角色状态,经过查看,最新的角色分配情况如下:

 

192.168.52.128  follower

 

192.168.52.129  leader

 

从以上2张图中可以看到,192.168.52.129这个服务器上的zk节点的角色,从之前的follower变成了leader192.168.52.128角色没有发生变化。

这就证明了,zookeeper会自动进行leader选举,而异常停止的zk节点会被剔除在外,不再提供服务。

 

 

恢复停止的zk节点,观察zk集群节点最新角色分配情况

上面的操作,我们知道了zk可以自动进行leader选举,剔除死亡的服务节点;那么,当我们恢复刚刚停止的zk节点的话,那这3个节点之间的觉得分配情况又是如何呢?

启动刚刚停止的zk节点(192.168.52.130),然后在每一个zkbin目录下,通过命令 ./zkServer.sh status 查看角色分配情况,结果如下图:

 

192.168.52.128  follower

 

 192.168.52.129  leader

 

192.168.52.130  follower

从图中可以观察到,我们把之前停止的zk节点(192.168.52.130)恢复后,这个节点的角色为follower,并没有恢复原先停止之前的leader角色。

这说明,当zk进行重新leader选举后,除非leader意外宕机,否则角色不会发生变化。

 

 

总结

经过了详细的操作以及测试,我相信对于新手而言,肯定会学习到不少知识点。这也不枉费我的心血付出啊,写文档好累的啊~不过一切值得,文档完成的那一刻,将会永久留存在互联网中,供他人学习使用。

其实zookeeper的集群环境搭建以及配置,是很简单的。只有亲身操作,才感受到很简单,没有那么复杂。不要被“集群”等专业术语所吓到。

本文档写的很详细了,不仅仅只包含环境搭建和配置,也对zk的一些特点以及主从选举进行了案例测试和说明,加深此文档的知识储备水平。

好了,就说到这吧,祝各位学习顺利~

 

【经验补充】

1、如果在zoo.cfg文件中只配置了一个server节点,且server的内容为当前服务器的信息;是否可以启动成功呢?比如下面的情况:

则在通过命令 ./zkServer.sh start 启动zk服务的时候,是可以正常启动的。如下图:

可以看到,Modestandalone 的信息,说明是ZK单点。因为我们在zoo.cfg中只配置了自己的server信息.

当然,在zoo.cfg中如果一个server配置都没有的话,也是这样的效果,可以成功启动。

 

2、与上面第一点相反,如果在zoo.cfg中配置了大于1个的server的配置,如果只启动一个ZK实例,会启动成功吗?如下图:

这时候如果上面3ZK没有一个启动的话(都是停止状态),如果此时在任意一个ZKbin目录下通过命令 ./zkServer.sh start启动的话,再使用命令 ./zkServer status 查看启动状态,你会发现,会一直报一个错误,如图:

这种错误的原因,就是因为你只启动了一个ZK实例导致的;为什么会这样呢?

你想想,既然是在zoo.cfg中配置了3server,说明是集群的配置,既然是集群,那么必然会有2种角色,一个是leader、一个是follower这就说明,我们的ZK服务节点必须至少有2台是正常服务的。

如果只有一台实例启动,请问这台是leader角色还是follower角色呢?都不是!原因很简单,如果唯一启动的这台ZK突然宕机了,请问,下一个接手的ZK服务节点是谁呢?肯定没有。这样的话,也就失去了集群的意义。

因此,ZK启动的时候,本身会进行验证,必须启动至少2台ZK实例,才可以正常提供leader选举服务。否则就会一直出现上图的错误信息;

 

3、 如下图所示,在zoo.cfg中server配置中,是否可以将其中的IP地址使用域名或者其他易于识别的名称代替?如图:

思考:我们都知道,一个服务器正常都是使用域名来访问的,使用域名的好处就是防止IP发生变化导致服务器频繁修改IP引用。在上图的zookeeper集群的配置中,使用的是IP地址的配置访问,其实使用IP来这么做的一个缺陷,肯定就是刚刚说的IP变化所带来的服务不可用。所以,线上环境一般建议通过域名来配置,方便扩展维护。

问题:如何将192.168.52.128192.168.52.129192.168.52.130通过域名或者其他易于识别的别名替换?

答案:解决方案肯定是有的。

我们就拿其中一个zookeeper节点进行讲解配置,其他的节点配置都是一样的。

我这里选择了 192.168.52.128这个服务器进行zookeeper集群信息的优化配置;

1、首先,肯定需要设置IP地址与域名的映射关系,类似于window系统中的host

通过命令vi编辑 /etc/hosts 文件,进入编辑区域。最终配置如图:

文件内部最顶层是系统默认有的配置,我们不用理会。我们只需要添加zookeeper3台服务器节点的IP与别名的映射关系即可。

IP地址右侧的配置,可以随意指定别名或者域名,方便区分标识即可。

保存之后,你也可以通过ping命令来测一下网络状态,如图:

 

图中所示结果,说明配置的没有问题。

 

2、修改zookeeper的zoo.cfg文件,将里面的server配置部分中的IP地址,替换为上面对应配置的别名,zoo.cfg最终配置如下:

3、重启zookeeper,进行测试验证,是否可以成功启动

  • 从上图会看到,zookeeper重启后,zookeeper服务是正常的。故:按照上面的/etc/hosts的映射配置,是可以实现IP地址替换为别名的。
  • 当然,有的朋友或许会问, /etc/hosts 文件下不还是有IP地址的配置吗,有什么提升和好处?

  其实很容易理解,如果在zoo.cfg中使用IP配置,当zookeeper节点启动之后,如果IP发生了变化,如果zookeeper服务不重启的话,zookeeper始终会使用之前配置文件中的IP进行通信,就造成服务始终不可用,还是需要手动去调整IP才可以。

  而通过在 /etc/host 中进行IP地址的映射,即使IP发生了变化,我们只需要在 /etc/hosts 里面配置即可,zookeeper服务是不用重新重启的,实现了无缝对接和维护扩展。

  这也就是软件架构中最常见的优化思想。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/w1764033735/article/details/78956314

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文