docker mysql集群

23 篇文章 0 订阅
7 篇文章 0 订阅
本文介绍了如何使用Docker实现数据持久化,通过Volume保存MySQL数据,并在容器销毁后恢复。此外,搭建了PXC强一致性MySQL集群以确保高可用性,并利用haproxy进行负载均衡。详细步骤包括创建Volume、启动和恢复MySQL容器、建立PXC集群以及配置haproxy代理。
摘要由CSDN通过智能技术生成

1. 容器内的数据如何持久化

  • 所有的容器都可能会崩溃销毁,如果使用mysql redis的数据可能就会消失,发生严重的灾难
  • volume可以把容器内的文件路径和宿主机上的文件路径一一映射,如果容器发生意外被销毁了,我们可以根据宿主机上的数据文件恢复数据。

1.1 常见命令

命令说明
docker volume ls查看volume列表信息
docker volume rm -f $(docker volume ls)删除所有的volume,正在使用的不能被删除,需要先删除容器
docker volume inspect volumeid查看volume详细信息
docker volume create v1创建volume
docker run -d --name mysql03 -p 33062:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=111111 mysql创建mysql容器,使用指定volume

1.2 根据已经volume恢复mysql数据库

1、创建一个volume v1
	docker volume create v1
	
2、创建mysql容器并使用v1
	docker run -d --name mysql01 -v v1:/var/lib/mysql -p 33061:3306 -e MYSQL_ROOT_PASSWORD=111111 mysql

3、查看宿主机上的v1映射文件
	docker volume inspect v1
	#获取其中的文件路径 如:/var/lib/docker/volumes/v1/_data
	ls /var/lib/docker/volumes/v1/_data

4、到容器中创建一个数据库,用来证明时恢复后的数据
	docker exec -it mysql02 bash
	#容器中命令
	mysql -u root -p111111
	create database test_database;
	show databases;
	#能看到自己创建的数据库 test_database
	
5、停止mysql容器
	docker rm -f mysql01

6、根据v1重新创建容器
	docker run -d --name mysql02 -v v1:/var/lib/mysql -p 33061:3306 -e MYSQL_ROOT_PASSWORD=111111 mysql

7、进入容器,使用root用户登陆,查看数据库,同步骤4部分操作

1.3 动态更新tomcat容器中问web文件

  • 创建tomcat容器,使用宿主机上的文件映射,实现实时更新tomcat中文件,达到更新网站的效果
1、确定tomcat的webapps在容器中路径
	docker run -d --name mytomkcat -p 8081:8080 tomcat
	docker exec -it mytomkcat bash
	#进入容器找到路径
	cd /usr/local/tomcat/webapps
2、新建容器
	docker run -d --name mytomkcat02 -p 8082:8080 -v /root/myweb:/usr/local/tomcat/webapps tomcat
3、宿主机在/root/myweb  下创建文件
	echo "helo" > /root/myweb/project_01/index.html

4、宿主机访问tomcat
	curl http://192.168.31.10:8082/project_01/index.html


1.4 mysql强一致性高可用集群搭建

  • PXC :Percona XtraDB Cluster
    强一致性,效率较低,可靠性较高
1、拉取镜像 
	docker pull percona/percona-xtradb-cluster:5.7.21
2、方便使用,添加tag
	docker tag percona/percona-xtradb-cluster:5.7.21 pxc
3、创建网络
	docker network create --subnet=172.18.0.0/24 pxc-net
4、创建volume
	docker volume create --name v1
	docker volume create --name v2
	docker volume create --name v3
5、启动
	docker run -d -p 3301:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=111111 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=111111 --privileged --name=node1 --net=pxc-net --ip 172.18.0.2 pxc

	docker run -d -p 3302:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=111111 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=111111 -e CLUSTER_JOIN=node1 --privileged --name=node2 --net=pxc-net --ip 172.18.0.3 pxc

	docker run -d -p 3303:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=111111 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=111111 -e CLUSTER_JOIN=node1 --privileged --name=node3 --net=pxc-net --ip 172.18.0.4 pxc





	




1.5 haproxy代理集群,完成负载均衡

1、 拉取镜像
docker pull haproxy
2、创建配置文件,用来完成haproxy容器配置文件的修改
mkdir -p /root/docker-package/haproxy
vi haproxy.cfg 

3、启动haproxy
docker run -d -p 3306:3306 -p 8888:8888 -v /root/docker-package/haproxy:/usr/local/etc/haproxy --name haproxy01 --privileged --net=pxc-net  haproxy

4、给mysql集群创建用户haproxy
CREATE USER 'haproxy'@'%' IDENTIFIED BY '';

  • haproxy.cfg
global
        #日志文件
        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_monitor
        #统计报告格式
        stats realm     Global\ statistics
        #登陆帐户信息
        stats auth  admin:admin
        #数据库负载均衡
        listen  proxy-mysql
        #访问的IP和端口,haproxy开发的端口为3306
        #假如有人访问haproxy的3306端口,则将请求转发给下面的数据库实例
        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_1 172.18.0.2:3306 check weight 1 maxconn 2000
        server  MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000
        server  MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000
        #使用keepalive检测死链
        option  tcpka
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值