docker部署mysql集群

本文详细介绍了如何在Linux环境中利用Docker部署MySQL的PerconaXtraDB集群,包括创建网络、数据卷、启动容器以及处理启动问题。同时,文章还展示了如何配置HAProxy以实现负载均衡,确保数据库服务的高可用性。
摘要由CSDN通过智能技术生成

Linux使用docker部署MySQL集群

条件:1.部署过docker

一、选择集群方案

1.

二、创建网段

docker network create --subnet=172.18.0.0/16 pxc-network

宿主机防火墙的状态发生了改变,Docker就无法设置容器的IP了
可能会出现的报错

Error response from daemon: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-21b48e7ddaeb -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))

解决方法:重启docker

service docker restart

三、创建数据卷

防止容器删除后数据丢失

docker volume create --name db_v1
docker volume create --name db_conf1

docker volume create --name db_v2
docker volume create --name db_conf2

四、创建容器

1.拉取集群镜像

#拉取镜像  
#低版本percona/percona-xtradb-cluster:5.7.30 
#启动第二个容器时不会报错
#同下修改为5.7.30
docker pull percona/percona-xtradb-cluster
#标记镜像
docker tag percona/percona-xtradb-cluster:latest pxc
#删除镜像
docker rmi percona/percona-xtradb-cluster:latest

2.启动容器

# 运行容器
# -d				后台运行
# --restart=always	重启
# -p				指定端口映射
# -v				数据卷挂载
# -e				设置环境变量
# --net				设置容器的网络连接方式
docker run -d --restart=always -p 3301:3306 -v db_v1:/var/lib/mysql -v db_conf1:/etc/mysql/ -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=password.888 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=password.888 --name=pxc-master --net=pxc-network pxc

#子节点
docker run -d --restart=always -p 3302:3306 -v db_v2:/var/lib/mysql -v db_conf2:/etc/mysql/ -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=password.888 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=password.888 -e CLUSTER_JOIN=pxc-master --name=pxc-slave --net=pxc-network pxc 

注意事项:

1.启动第二个容器报错,原因:pxc镜像版本过高

在这里插入图片描述

解决方法:
1.https://blog.csdn.net/fly7632785/article/details/114025288
2.使用旧版本
我用的是:percona/percona-xtradb-cluster:5.7.30

2.先启动主节点,后启动子节点

3.服务器开放对应端口

测试数据库连接是否成功
在这里插入图片描述

五、添加负载均衡(Haproxy)

1.拉取镜像,创建目录、文件

docker pull haproxy:2.3.13
mkdir /opt/haproxy
vim /opt/haproxy/haproxy.cfg

haproxy.cfg

#----------------
#Global settings
#----------------
global
    log         127.0.0.1 local2
    maxconn     4000
    daemon
defaults
    mode                    http
    log                     global
    option                  tcplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 500
    
frontend stats_monitor
        bind    *:33012
        stats   enable
        stats   uri     /dbs
        stats   auth    root:xzq.888
        stats   admin   if      TRUE
        stats   refresh 5s
        stats   realm   baison-test-Haproxy
 
listen  proxy-mysql
        bind    *:33011
        mode    tcp
        balance roundrobin 
		server  mysql-node1 172.18.0.1:3306 check weight 1 maxconn 2000  
		server  mysql-node2 172.18.0.2:3306 check weight 1 maxconn 2000  
	option  tcpka 

global  
    #工作目录  
    chroot /usr/local/etc/haproxy  
    #日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info  
    log 127.0.0.1 local5 info  
    #守护进程运行  
    daemon  
  
defaults  
    log global  
    mode    http  
    #日志格式  
    option  httplog  
    #日志中不记录负载均衡的心跳检测记录  
    option  dontlognull  
    #连接超时(毫秒)  
    timeout connect 5000  
    #客户端超时(毫秒)  
    timeout client  50000  
    #服务器超时(毫秒)  
    timeout server  50000  
  
#监控界面  
listen  admin_stats  
    #监控界面的访问的IP和端口  
    bind  0.0.0.0:8888  
    #访问协议  
    mode        http  
    #URI相对地址  
    stats uri   /dbs  
    #统计报告格式  
    stats realm     Global\ statistics  
    #登录帐户信息  
    stats auth  admin:123456  
#数据库负载均衡  
listen  proxy-mysql  
    #访问的IP和端口  
    bind  0.0.0.0:3306  
    #网络协议  
    mode  tcp  
    #负载均衡算法(轮询算法)  
    #轮询算法:roundrobin  
    #权重算法:static-rr  
    #最少连接算法:leastconn  
    #请求源IP算法:source  
    balance  roundrobin  
    #日志格式  
    option  tcplog  
    #在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测  
    option  mysql-check user haproxy  
    server  mysql-node1 172.18.0.1:3306 check weight 1 maxconn 2000  
    server  mysql-node2 172.18.0.2:3306 check weight 1 maxconn 2000   
    #使用keepalive检测死链  
    option  tcpka

2.进入数据库容器创建haproxy用户,启动容器

docker exec -it pxc-master /bin/bash
mysql -uroot -p****888
create user 'haproxy'@'%' identified by '';
docker run -it -d --name haproxy -p 33012:33012 -p 33011:33011 --restart always --privileged=true -v /opt/haproxy:/usr/local/etc/haproxy --net=pxc-network --ip 172.18.0.4 haproxyd

3.进入haproxy容器,启动haproxy.cfg

docker exec -it haproxy /bin/bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg 

4.通过 IP地址:端口号/dbs 访问页面

参考:
https://blog.csdn.net/easylife206/article/details/122749473

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值