系列大纲 |
---|
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
四、测试
到这里就将开发流程就走完了,没有太用心做,因为之后我把学校的项目会重构代码,然后重新写博客的 |
---|