springboot负载均衡mysql_在Docker中通过nginx实现springboot+mysql项目的负载均衡集群部署...

本文详细介绍了如何在Docker环境中通过创建网络、部署MySQL、构建SpringBoot应用并将其集群化,最后利用Nginx进行负载均衡。步骤包括创建network、安装MySQL、构建SpringBoot应用的Docker镜像、启动多个应用实例和配置Nginx代理。通过这种方式,实现了对SpringBoot应用的高可用部署。
摘要由CSDN通过智能技术生成

1、创建network che-net02,

docker network create --subnet=172.21.0.0/24 che-net02

26c347d68991178212277f7763fafe63.png

2、安装mysql(创建volume che-v5,)

docker volume create che-v5

f8260986b42a10dc9e333fb4f060f48e.png

创建mysql实例che-mysql,使用che-v5 volume,che-net02网络,ip为172.21.0.6,mysql:5.7镜像,端口为6607

docker run -d --name che-mysql -v che-v5:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --net=che-net02 --ip 172.21.0.6 --privileged mysql:5.7

192a964c084fb10cc7b20a9b8ec80cb1.png

进入到che-mysql实例中,

2ff320a99496e99ce2d73636672442ac.png

使用mysql客户端工具连接che-mysql数据库实例

a0c38f2395dfb914e1553342b3c86534.png

创建数据库testDB,并创建数据表t_user,并添加数据如下图

# 表结构

CREATE TABLE `t_user` (

`id` int(11) NOT NULL,

`username` varchar(50) NOT NULL,

`password` varchar(50) NOT NULL,

`number` varchar(100) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 数据

insert into t_user (id,username,password,number) values (1,'tom','123456','0001');

insert into t_user (id,username,password,number) values (2,'james','123456','0002');

insert into t_user (id,username,password,number) values (3,'张三','123456','0003');

80d52c826511d70e3f83ced885637899.png

3、创建一个springboot+mysql工程,并将工程打成jar包,做成docker image镜像

创建springboot+mysql工程,参考idea+Spring Boot之springboot+mysql+mybatis搭建

工程中的application.yml文件如下:

spring:

datasource:

url: jdbc:mysql://my-mysql:3306/testDB?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

username: root

password: 123456

driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:

mapper-locations: classpath:mapper/*.xml

打成jar后,最好在本地使用jar -jar xxx.jar运行测试一下(如下图)。

4d93c594cd94d62326398d9b198182e8.png

3b347212518c69f70a265088bc172a36.png

如何做成docker image镜像,请参考本人使用Docker创建一个springboot项目的镜像,并在容器中部署

我创建的springboot+mysql工程docker image镜像为docker-demo2-image,如下图

d52907b69b9b3a592c48554488ca7fd8.png

使用docker-demo2-image创建多个项目容器(使用network che-net02)

docker run -d --name docker-demo-1 -p 9001:8080 --net=che-net02 --ip 172.21.0.11 docker-demo2-image

docker run -d --name docker-demo-2 -p 9002:8080 --net=che-net02 --ip 172.21.0.12 docker-demo2-image

docker run -d --name docker-demo-3 -p 9003:8080 --net=che-net02 --ip 172.21.0.13 docker-demo2-image

a8e8d1975c03d26d8de5c2cbe4480ca6.png

然后在浏览器中分别访问http://192.168.1.9:9001/user/listall,http://192.168.1.9:9002/user/listall,http://192.168.1.9:9003/user/listall (此处大家需要理解一下ip和端口为什么如此)

26020e524081997da5ff73bc5463c7ab.png

4、创建nginx

在宿主机/tmp目录下创建nginx.conf文件,文件内容如下(此处同样要用心去理解、去想为做么配的三个server的ip和端口是这样的)(另外,我们可以将nginx.conf文件在windows系统创建好,上传到centos系统的/tmp目录下,我就是这样做的):

user nginx;

worker_processes 1;

events {

worker_connections 1024;

}

http {

include /etc/nginx/mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

server {

listen 80;

location / {

proxy_pass http://balance;

}

}

upstream balance{

server 172.21.0.11:8080;

server 172.21.0.12:9002;

server 172.21.0.13:9003;

}

include /etc/nginx/conf.d/*.conf;

}

拉取nginx镜像

86df3d5c36d0c339681e15b26274ffd9.png

创建nginx容器che-nginx,使用network che-net02,ip设置为172.21.0.10,端口设为80,并且使用/tmp/nginx.conf配置文件

docker run -d --name che-nginx -p 80:80 -v /tmp/nginx.conf:/etc/nginx/nginx.conf --network=che-net02 --ip 172.21.0.10 nginx

b649a07e60393c16ebbc7d4777879868.png

在浏览器中输入http://192.168.1.9/user/listall

d8845f2fb340340e4c155ba9f42e855e.png

5、小结

我们首先先创建了一个network che-net02,che-net02的网段为172.21.0.0,然后创建mysql和springboot+mysql镜像的三个实例、nginx,都用了che-net02这个网段,保证了各个容器之间的通信畅通。而且我们还可以修改springboot+mysql镜像的数据库连接配制文件中的数据库ip改为数据库容器实例名称che-mysql,在此就不截图了,大家有兴趣可以自已试一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值