spring boot+vue个人博客七:打包部署,多节点部署方案

系列大纲
GitHub(还没开发完成)
在线演示www.yzpnb.top
第一章:(后端)搭建spring boot脚手架:https://blog.csdn.net/grd_java/article/details/107452826
第二章:权限整合shiro+jwt,完成后端接口:https://blog.csdn.net/grd_java/article/details/107481570
第三章:搭建前端vue整合element ui脚手架:https://blog.csdn.net/grd_java/article/details/107498140
第四章:首页和公共头部组件:https://blog.csdn.net/grd_java/article/details/107507213
第五章:完成登陆注册页面,nginx网关对接后端:https://blog.csdn.net/grd_java/article/details/107515437
第六章:博客页面,观看博客,博客编辑功能:https://blog.csdn.net/grd_java/article/details/107525128
第七章:打包部署,多节点部署方案:https://blog.csdn.net/grd_java/article/details/107533253
请先确保你会使用docker和Linux
linux:https://blog.csdn.net/grd_java/article/details/107233667
docker:https://blog.csdn.net/grd_java/article/details/107220162

一、数据库节点

1、Mysql集群

我们一直使用的都是单节点数据库
通俗来讲,单节点部署数据库,速度慢(因为那么多人同时访问,只有这一个结点工作)
一旦数据库挂掉了,就全盘崩溃
而我们想要的是多结点负载均衡,并更好的互通数据,某一个结点挂掉,不影响全局工作
集群方案
Replication:速度快,弱一致性,低价值,适合日志,新闻,帖子用
PXC:速度慢,一致性强的离谱,高价值,适合订单,账户,财务这样的需要高精度处理数据的使用
我们选择使用PXC部署方案
PXC工作原理就是某个结点操作一条数据,这时会同步到其它结点
但凡有任何一个结点没有同步成功,那么这次操作都不会执行。这也是为什么PXC速度慢,一致性强的离谱的原因
而且PXC任何一个节点都是可以同时读写的
建议使用PerconaServer(MySql改进版,性能提升巨大)来实现PXC部署集群

2、使用docker下载PXC镜像

安装命令
docker pull percona/percona-xtradb-cluster

在这里插入图片描述
以下操作可选
在这里插入图片描述

3、划分一个docker内部网段,专门给PXC集群使用

你可以单独使用普通端口给docker使用,但是这很不安全,所以划分网段还是有必要的
下面是常用命令
docker network create net1	//创建一个名字为net1的网段,docker自带的内置网段是172.17.0.XXX,所以我们
							新创建就是172.18.0.XX,以此类推,我们也可以自己指定网段
docker network inspect net1	//查看net1网段的相关信息
docker network rm net1		//删除net1网段
了解上面的命令后,我们进入实战
docker network create --subnet=172.19.0.0/24 net1	//创建一个名字为net1的网段,网段指定为172.19.0.0 子网掩码是24位的

在这里插入图片描述

4、docker卷

为什么不使用容器卷呢
PXC容器中无法直接映射目录,所以使用docker卷来映射数据
常用命令如下
docker volume create --name v1	//创建一个docker卷起名为v1
docker inspect v1 				//查看v1      docker数据卷的信息
docker volume rm v1				//删除v1卷
进入实战

在这里插入图片描述

5、创建PXC容器

创建PXC是需要指定参数的
下面是配置的方法,但是先不要着急配,跟我一步一步来,有坑,先把下面看懂了
docker run -d -p 3306:3306					//以后台的守护形式启动容器,用宿主机3306端口映射容器3306端口
-v v1:/var/lib/mysql						//路径映射,把v1数据卷的路径映射到PXC容器中mysql的路径
-e MYSQL_ROOT_PASSWORD=abc123456			//创建出来的数据库实例密码是多少,我这里指定abc123456,用户名就是ROOT,不可以改用户名,这个语句的意思就是设置ROOT用户密码
-e CLUSTER_NAME=PXC							//创建出来的PXC集群名字,我这里就叫PXC
-e XTRABACKUP_PASSWORD=abc123456			//不同数据库之间数据同步用的密码,我这里指定abc123456
--privileged --name=node1 --net=net1 --ip 172.19.0.2	//--privileged 表示给其最高的权限,
											//容器起名为node1,使用net1内部网段中的172.19.0.2地址(这个是ip地址昂)
pxc					//这个pxc是我给镜像起的名字

//创建第一个容器,连接v1数据卷
docker run -d -p 3306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 --privileged --name=node1 --net=net1 --ip 172.19.0.2 pxc
//创建第二个容器,和第一个容器配置相比,不能用宿主机3306,数据卷也要新建一个,
//添加-e CLUSTER_JOIN=node1参数设置,表示加入集群,与node1进行同步,上面3306这个name叫node1
//ip端口也要换,主要--name名字也要换,这个容易忘
docker run -d -p 3307:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=net1 --ip 172.19.0.3 pxc
//以此类推创建第三个容器
docker run -d -p 3308:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=net1 --ip 172.19.0.4 pxc
进入实战
我使用的是云服务器,配置不高,就启动两个容器就好了,道理一样的

1、先创建需要的数据卷
在这里插入图片描述
2、创建第一个PXC节点,然后等着,先用管理工具连接一下,因为容器一瞬间就可以创建完成,但是里面的mysql最少2分钟才能启动完成,所以要确保用管理工具可以连接到,才表示容器一配置完成
在这里插入图片描述

注意如果你使用的是云服务器,需要先配置端口,往下看
这里连接的密码不是Linux的密码,是你创建容器时,指定的数据库ROOT密码

在这里插入图片描述
配置云服务器端口
在这里插入图片描述在这里插入图片描述在这里插入图片描述
创建第二个容器构成集群
在这里插入图片描述
使用工具连接
在这里插入图片描述

这样一个集群就创建好了,以此类推即可
最后你需要生成一个虚拟ip,篇幅太长,百度一下吧,不过咱们这项目就是个人博客,说实在的根本不需要集群

在这里插入图片描述
在这里插入图片描述

二、后端部署

1、打包

因为我们是spring boot工程,打包非常容易

在这里插入图片描述

<build>
        <finalName>Site</finalName><!--打完包的名字-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <classifier>exec</classifier><!--打包为可执行的-->
                </configuration>
            </plugin>
        </plugins>
    </build>
mvn clean package -Dmaven.test.skip=true

2、使用docker运行java容器,不需要tomcat,spirng boot自带

命令
docker run -it -d --name j1 -v j1:/home/soft --net=host java//创建一个名字为j1,数据卷为j1映射容器中home/soft,指定网段为宿主机,镜像名字为java

nohup java -jar /home/soft/jarbao.jar //进入容器运行jar包
实战
docker volume create j1

docker inspect j1


在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3、进入容器启动jar包

docker exec -it 容器id bash//以终端方式进入容器

nohup java -jar /home/soft/jarbao.jar //进入容器运行jar包

我这里直接用java -jar运行jar包了,这样肯定是不好的,推荐你使用nohup命令,我这里输错了不想重复截图
在这里插入图片描述
在这里插入图片描述

如果你是云服务器,需要将微服务端口打开,比如我们这里设置微服务端口为8001,那么就需要开启8001端口
详细操作在mysql集群时讲过了
到此后端部署完成
如果你想启动集群,和数据库集群一样,多开几个容器就好了

三、nginx前台打包

1、修改前端配置

在这里插入图片描述在这里插入图片描述

上面不是我们想要的结果,我们上面使用的是8001,因为目前只有一个微服务
但是如果有10个微服务呢?肯定需要网关来统一请求转发

在这里插入图片描述

2、打包前端项目

在这里插入图片描述在这里插入图片描述

3、配置nginx容器

进入实战

在这里插入图片描述
编辑一个nginx.config文件,从你的nginx中拷贝吧,然后通过WinSCP将文件放在目录中

核心配置如下
server {
		listen       80;# 配置你的nginx端口
		server_name  localhost;#服务名地址
		location / {
			root /home/fn1/myblog/dist;#你的路径地址,当你访问nginx80端口时默认跳转的端口
			index index.html;# 初始页面
			try_files $uri $uri/ /index.html;# 解决刷新页面404问题
		}
		location ~ /service_blog/ { #当我们请求的路径中包含/service_blog/时就将请求转发到http://你的ip地址:你的微服务地址
            proxy_pass   http://你的ip地址:你的微服务地址;
        }
    }

在这里插入图片描述

启动容器
//拉取nginx镜像
docker pull nginx
//启动容器
docker run -it -d --name fn1					//启动守护容器,名字为fn1
-v /home/fn1/nginx.conf:/etc/nginx/nginx.conf	//映射数据卷文件,这里映射的是nginx配置文件
-v /home/fn1/myblog:/home/fn1/myblog	//映射数据卷,这里是存放nginx文件的映射
--privileged --net=host 						//设置权限  网段为宿主机网段
nginx											//镜像名
//下面是方便你拷贝的命令
docker run -it -d --name fn1 -v /home/fn1/nginx.conf:/etc/nginx/nginx.conf -v/home/fn1/myblog:/home/fn1/myblog --privileged --net=host nginx

在这里插入图片描述

四、测试

在这里插入图片描述在这里插入图片描述

到这里就将开发流程就走完了,没有太用心做,因为之后我把学校的项目会重构代码,然后重新写博客的

猜你喜欢

转载自blog.csdn.net/grd_java/article/details/107533253