Docker-compose部署集群


先做宿主机的hosts劫持:
192.168.1.81   bu.yuanyu.zhangmin
[root@localhost ~]# cd pes/
[root@localhost pes]# vim docker-compose.yml                      
version: "3"
services:
        web0:
                container_name: web0
                image: nginx:latest
                #ports:
                #- "80:80"
                volumes:
                - /root/pes/web/src/dist:/usr/share/nginx/html
                hostname: web01.yuanyu.zhangmin
                expose:
                - 80
        web1:
                container_name: web1
                image: nginx:latest
                #ports:
                #- "81:80"
                volumes:
                - /root/pes/web/src/dist:/usr/share/nginx/html
                hostname: web01.yuanyu.zhangmin
                expose:
                - 80
        web2:
                container_name: web2
                image: nginx:latest
                #ports:
                #- "82:80"
                volumes:
                - /root/pes/web/src/dist:/usr/share/nginx/html
                hostname: web01.yuanyu.zhangmin
                expose:
                - 80
        java0:
                container_name: java0
                build: ./java
                #ports:
                #- "8080:8080"
                volumes:
                - /root/pes/java/src/:/java/src/
                hostname: java01.yuanyu.zhangmin
        java1:
                container_name: java1
                image: pes_java:latest 
                #ports:
                #- "8080:8080"
                volumes:
                - /root/pes/java/src/:/java/src/
                hostname: java01.yuanyu.zhangmin
        java2:
                container_name: java2
                image: pes_java:latest
                #ports:
                #- "8080:8080"
                volumes:
                - /root/pes/java/src/:/java/src/
                hostname: java01.yuanyu.zhangmin
        mysql:
                container_name: mysql01
                image: mysql:5.7.44
                ports:
                - "3306:3306"
                volumes:
                - /root/pes/mysql/data:/var/lib/mysql/
        haproxy:
                container_name: haproxy01
                image: haproxy:latest
                volumes:
                - ./haproxy/:/haproxy-override
                - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
                ports:
                - "5000:5000"
                - "8888:8888"
                - "8080:8080"
                expose:
                - 5000
                - 8888
                - 8080
                links:
                - web0
                - web1
                - web2
                - java0
                - java1
                - java2

注意:如果docker-compse没有按照顺序创建java时,我们可以在docker-compose文件里在java1、java2的后面按照格式添加

                depends_on:

                - java0

这样就是说明 java1、java2的创建需要依赖于java0  docker-compose就会先去创建java0


[root@localhost pes]# vim haproxy/haproxy.cfg                     //haproxy配置文件
global
        daemon
        # nbproc 1
        # pidfile /var/run/haproxy.pid
        # 工作目录
       # chroot /usr/local/etc/haproxy

defaults
        log 127.0.0.1 local0 err #[err warning info debug]
        mode http                #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        retries 2                #两次连接失败就认为是服务器不可用,也可以通过后面设置
        option redispatch        #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        option abortonclose      #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        option dontlognull       #日志中不记录负载均衡的心跳检测记录
        maxconn 4096             #默认的最大连接数
        timeout connect 5000ms   #连接超时
        timeout client 30000ms   #客户端超时
        timeout server 30000ms   #服务器超时
        #timeout check 2000      #=心跳检测超时

######## 监控界面配置 #################
listen admin_status
        # 监控界面访问信息
        bind 0.0.0.0:8888
        mode http
        # URI相对地址
        stats uri /dbs
        # 统计报告格式
        stats realm Global\ statistics
        # 登录账户信息
        stats auth admin:123456
########frontend配置##############

######## mysql负载均衡配置 ###############
listen proxy-mysql
        bind 0.0.0.0:3306
        mode tcp
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server MYSQL_1 192.168.130.100:3306 check weight 1 maxconn 2000
        server MYSQL_2 192.168.130.101:3306 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################

######## java负载均衡配置 ###############
listen proxy-java
        bind 0.0.0.0:8080
        mode tcp
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        #option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server java0 java0:8080 check weight 1 maxconn 2000
        server java1 java1:8080 check weight 1 maxconn 2000
        server java2 java2:8080 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################

######## web负载均衡配置 ###############
listen proxy-web
        bind 0.0.0.0:5000
        mode http
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        #option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server web0 web0:80 check weight 1 maxconn 2000
        server web1 web1:80 check weight 1 maxconn 2000
        server web2 web2:80 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################
[root@localhost pes]# docker-compose up -d                //运行
[root@localhost pes]# docker-compose ps   

进行浏览器访问后可以看到mysql 是处于关闭状态的,要想连上mysql需要进行一下的更改;

2、部署加入mysql

[root@localhost pes]# vim docker-compose.yml                      
version: "3"
services:
        web0:
                container_name: web0
                image: nginx:latest
                #ports:
                #- "80:80"
                volumes:
                - /root/pes/web/src/dist:/usr/share/nginx/html
                hostname: web01.yuanyu.zhangmin
                expose:
                - 80
        web1:
                container_name: web1
                image: nginx:latest
                #ports:
                #- "81:80"
                volumes:
                - /root/pes/web/src/dist:/usr/share/nginx/html
                hostname: web01.yuanyu.zhangmin
                expose:
                - 80
        web2:
                container_name: web2
                image: nginx:latest
                #ports:
                #- "82:80"
                volumes:
                - /root/pes/web/src/dist:/usr/share/nginx/html
                hostname: web01.yuanyu.zhangmin
                expose:
                - 80
        java0:
                container_name: java0
                build: ./java
                #ports:
                #- "8080:8080"
                volumes:
                - /root/pes/java/src/:/java/src/
                hostname: java01.yuanyu.zhangmin
        java1:
                container_name: java1
                image: pes_java:latest 
                #ports:
                #- "8080:8080"
                volumes:
                - /root/pes/java/src/:/java/src/
                hostname: java01.yuanyu.zhangmin
        java2:
                container_name: java2
                image: pes_java:latest
                #ports:
                #- "8080:8080"
                volumes:
                - /root/pes/java/src/:/java/src/
                hostname: java01.yuanyu.zhangmin
        mysql:
                container_name: mysql01
                image: mysql:5.7.44
                expose:
                - 3306
                volumes:
                - /root/pes/mysql/data:/var/lib/mysql/

mysql:
                container_name: mysql02
                expose:
                - 3306
                volumes:
                - /root/pes/mysql/data0:/var/lib/mysql/
        haproxy:
                container_name: haproxy01
                image: haproxy:latest
                volumes:
                - ./haproxy/:/haproxy-override
                - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
                ports:
                - "5000:5000"
                - "8888:8888"
                - "8080:8080"
                expose:
                - 5000
                - 8888
                - 8080
                - 3306

注意:最新版docker-compose出于对安全稳定的考虑不使用link连接,这里他会自己创建一个默认的网络连接。

[root@localhost pes]# vim haproxy/haproxy.cfg
global
        daemon
        # nbproc 1
        # pidfile /var/run/haproxy.pid
        # 工作目录
       # chroot /usr/local/etc/haproxy

defaults
        log 127.0.0.1 local0 err #[err warning info debug]
        mode http                #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        retries 2                #两次连接失败就认为是服务器不可用,也可以通过后面设置
        option redispatch        #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        option abortonclose      #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
        option dontlognull       #日志中不记录负载均衡的心跳检测记录
        maxconn 4096             #默认的最大连接数
        timeout connect 5000ms   #连接超时
        timeout client 30000ms   #客户端超时
        timeout server 30000ms   #服务器超时
        #timeout check 2000      #=心跳检测超时

######## 监控界面配置 #################
listen admin_status
        # 监控界面访问信息
        bind 0.0.0.0:8888
        mode http
        # URI相对地址
        stats uri /dbs
        # 统计报告格式
        stats realm Global\ statistics
        # 登录账户信息
        stats auth admin:123456
########frontend配置##############

######## mysql负载均衡配置 ###############
listen proxy-mysql
        bind 0.0.0.0:3306
        mode tcp
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server MYSQL_1 mysql01:3306 check weight 1 maxconn 2000
        server MYSQL_2 mysql02:3306 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################

######## java负载均衡配置 ###############
listen proxy-java
        bind 0.0.0.0:8080
        mode tcp
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        #option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server java0 java0:8080 check weight 1 maxconn 2000
        server java1 java1:8080 check weight 1 maxconn 2000
        server java2 java2:8080 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################

######## web负载均衡配置 ###############
listen proxy-web
        bind 0.0.0.0:5000
        mode http
        # 负载均衡算法
        # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
        balance roundrobin
        # 日志格式
        option tcplog
        # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
        # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
        #option mysql-check user haproxy
         # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
        server web0 web0:80 check weight 1 maxconn 2000
        server web1 web1:80 check weight 1 maxconn 2000
        server web2 web2:80 check weight 1 maxconn 2000
        #server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
        # 使用keepalive检测死链
        # option tcpka
#########################################

[root@localhost pes]# vim java/src/application.properties 

spring.application.name=Project_ExamSystem


# 优化部分 -----------------start---------------
# Tomcat
server.port=8080
server.tomcat.uri-encoding=utf-8
#最小线程数
server.tomcat.threads.min-spare=500
#最大链接数 
server.tomcat.max-connections=6500
 #最大等待队列长度
server.tomcat.accept-count=500
 #最大线程数
server.tomcat.threads.max=2500 
#请求头最大长度kb
server.max-http-request-header-size=1048576

#请请求体最大长度kb
server.tomcat.max-http-form-post-size=2MB

##  Hikari 连接池配置 ------ 详细配置请访问:https://github.com/brettwooldridge/HikariCP
## 最小空闲连接数量
spring.datasource.hikari.minimum-idle=30
## 空闲连接存活最大时间,默认600000(10分钟)
spring.datasource.hikari.idle-timeout=180000
## 连接池最大连接数,默认是10
spring.datasource.hikari.maximum-pool-size=100
## 此属性控制从池返回的连接的默认自动提交行为,默认值:true
spring.datasource.hikari.auto-commit=true
## 连接池母子
spring.datasource.hikari.pool-name=PES_HikariCP
## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
spring.datasource.hikari.max-lifetime=1800000
## 数据库连接超时时间,默认30秒,即30000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT now()

# 优化部分 -----------------stop---------------


spring.datasource.url=jdbc:mysql://haproxy01:3306/project_exam_system
spring.datasource.username=zhangmin
spring.datasource.password=zhangmin
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#日志设置 显示MyBatis SQL语句
logging.level.root=INFO
logging.level.com.dn.es.mapper=DEBUG    


# 配置静态资源路径
spring.mvc.static-path-pattern=/static/**
spring.web.resources.static-locations=classpath:/static/
#spring.web.resources.static-locations=classpath:/static/,file:E:/static/

#Redis 配置
#spring.data.redis.host=127.0.0.1
#spring.data.redis.database=0
#spring.data.redis.password=
#spring.data.redis.port=6379
#spring.data.redis.timeout=10s
# Redis 连接池 
#spring.data.redis.lettuce.pool.enabled=true
 # 最大空闲连接
#spring.data.redis.lettuce.pool.max-idle=10
# 最小空闲连接
#spring.data.redis.lettuce.pool.min-idle=0
# 阻塞等待时间
#spring.data.redis.jedis.pool.max-wait=-1ms
# 最大连接数
#spring.data.redis.jedis.pool.max-active=200
#    @Autowrid
#     private RedisTemplate<String,Object> redisTmplate;
#

[root@localhost pes]# rm -rf mysql/data/*

[root@localhost pes]# cp -p mysql/data mysql/data0
[root@localhost pes]# docker exec -it mysql01 mysql -proot

mysql>create user 'haproxy'@'%' identified by '';
[root@localhostpes]# docker exec -it mysql02 mysql -proot

mysql>create user 'haproxy'@'%' identified by '';

此时访问就可以看到mysql也连接上了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值