022、Python+fastapi,第一个Python项目走向第22步:ubuntu 24.04 docker 安装mysql8集群、redis集群(三)

 这次来安装mysql8了,以前安装不是docker安装,这个我也是第一次,人人都有第一次嚒


前言

前面的redis安装还是花了点时间的,主要是网上教程,各有各的好,大家千万别取其长处,个人觉得这个环境影响很大?反正我照着装很多也不能安装完成。

这次安装mysql希望快点,不过也没关系,陪娃做作业,我就安装这玩意

我们直接安装集群。看时间允许,我们也安装个单机版的


一、MGR简介

        确保数据库稳定运行是DBA核心价值之一。通过搭建灾备库,利用复制技术同步主库的数据更新,在主库不可用时,启用备库可以快速恢复数据库服务,减少对业务的影响,同时,备库也可用于负载均衡、数据备份、统计报表等场景。带来诸多好处的同时,自然也有其弊端:增加了额外的硬件、维护成本,以及复制中主从数据延迟或不一致等多种问题。MySQL在3.23.15版本中新增了复制功能,接下来是一系列的增强和优化:row based,半同步复制,GTID,多线程,多源复制,组复制等,本文使用2016年底官方GA的Group Replicaion(下文简称MGR)

架构图: 

  • MGR(MySQL Group Replication)是MySQL 5.7.17提出的集群方案,它既可以很好地保证数据一致性,又具备故障检测和转移功能,MGR还支持多节点写入,这是一项被普遍看好的技术。 
  • MGR(MySQL Group Replication)是MySQL自带的一个插件,可以灵活部署。MySQL MGR集群是多个MySQL Server节点共同组成的分布式集群,每个Server都有完整的副本,它是基于行(ROW)格式的二进制日志文件。
  • MGR是一个多主结构,通过组复制(Group Replication)机制实现各节点数据的一致性,这与Replication的异步复制、PXC的同步复制都不相同。
  • 如图所示,DB1、DB2、DB3构成的MGR集群,集群中每个DB都有MGR层,MGR层功能也可简单理解为由Paxos模块和冲突检测Certify模块实现
  • Paxos模块基于Paxos算法,确保所有节点收到相同广播消息,Transactionmessage(交易信息)就是广播消息的内容结构;冲突检测Certify(保证)模块进行冲突检测确保数据的最终一致性。
  • 当DB1上有事务T1要执行时,T1对DB1来说是本地事务,对于DB2、DB3来说是远端事务;DB1在事务T1被执行后,会把执行事务T1的信息广播给集群中各个节点,包括DB1本身;通过Paxos模块广播给MGR集群中的各个节点,半数以上的节点同意并且达成共识,之后共识信息进入各个节点的冲突检测Certify模块,各个节点各自进行冲突检测验证,最终保证事务在集群中的最终一致性。
  • 在冲突检测通过之后,本地事务T1在DB1直接提交即可,否则直接回滚。远端事务T1在DB2和DB3分别先更新到relaylog,然后应用到binlog,完成数据的同步,否则直接放弃该事务。
  • 优点:避免脑裂:MGR中不会出现脑裂的现象;数据一致性保障:MGR的冗余能力很好,能够保证Binlog Event至少被复制到超过一半的成员上,只要同时宕机的成员不超过半数便不会导致数据丢失

 二、集群安装

1、环境

victor_t400@victort400:/home$ uname -a
Linux victort400 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
victor_t400@victort400:/home$ docker --version
Docker version 24.0.7, build 24.0.7-0ubuntu4

2、拉取镜像

victor_t400@victort400:/home$ docker pull mysql:8.0.20
8.0.20: Pulling from library/mysql

Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6
Status: Downloaded newer image for mysql:8.0.20
docker.io/library/mysql:8.0.20
victor_t400@victort400:/home$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        latest    8251f0669c6e   3 days ago    623MB
redis        latest    9509c4dd19fb   4 weeks ago   116MB
mysql        8.0.20    be0dbf01a0f3   3 years ago   541MB
 

3、创建容器网络

victor_t400@victort400:/home$ docker network create --subnet=172.72.0.0/24 mysql-net
96ab815083147c7bdba564c92585ee6d0b64e923beea43844f1c8c9eb08a0b71
victor_t400@victort400:/home$docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
90725f91b3dc   bridge      bridge    local
d009f7a9343b   host        host      local
96ab81508314   mysql-net   bridge    local
f9c89145d9ab   none        null      local
a09e80dd0716   redis-net   bridge    local
 

4、创建mysql的数据目录 

sudo mkdir -p /home/mysql-mgr/mysql-mgr-master/conf.d
sudo mkdir -p /home/mysql-mgr/mysql-mgr-master/data
sudo mkdir -p /home/mysql-mgr/mysql-mgr-slave01/conf.d
sudo mkdir -p /home/mysql-mgr/mysql-mgr-slave01/data
sudo mkdir -p /home/mysql-mgr/mysql-mgr-slave02/conf.d
sudo mkdir -p /home/mysql-mgr/mysql-mgr-slave02/data

5、拉起容器 

密码设置不要用123456,这个就可以 LzloveYou123!

docker run -d --name mysql-mgr-master -h mysql-mgr-master \
   -p 13066:3306 -p 33011:33011 \
   --net=mysql-net --ip 172.72.0.101 \
   -v /home/mysql-mgr/mysql-mgr-master/conf.d:/etc/mysql/conf.d \
   -v /home/mysql-mgr/mysql-mgr-master/data:/var/lib/mysql/ \
   -e MYSQL_ROOT_PASSWORD=123456 \
   -e TZ=Asia/Shanghai \
   --privileged=true mysql:8.0.20
docker run -d --name mysql-mgr-slave01 -h mysql-mgr-slave01 \
   -p 23066:3306 -p 33012:33012 \
   --net=mysql-net --ip 172.72.0.102 \
   -v /home/mysql-mgr/mysql-mgr-slave01/conf.d:/etc/mysql/conf.d \
   -v /home/mysql-mgr/mysql-mgr-slave01/data:/var/lib/mysql/ \
   -e MYSQL_ROOT_PASSWORD=123456 \
   -e TZ=Asia/Shanghai \
   --privileged=true mysql:8.0.20
docker run -d --name mysql-mgr-slave02 -h mysql-mgr-slave02 \
   -p 33066:3306 -p 33013:33013 \
   --net=mysql-net --ip 172.72.0.103 \
   -v /home/mysql-mgr/mysql-mgr-slave02/conf.d:/etc/mysql/conf.d \
   -v /home/mysql-mgr/mysql-mgr-slave02/data:/var/lib/mysql/ \
   -e MYSQL_ROOT_PASSWORD=123456 \
   -e TZ=Asia/Shanghai \
   --privileged=true mysql:8.0.20

 victor_t400@victort400:/home/mysql-mgr$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                                                                                   NAMES
26b69bc2a374   mysql     "docker-entrypoint.s…"   4 seconds ago   Up 2 seconds   0.0.0.0:33011->33011/tcp, :::33011->33011/tcp, 33060/tcp, 0.0.0.0:13066->3306/tcp, :::13066->3306/tcp   mysql-mgr-master
ee9ac39c7cf9   mysql     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:33012->33012/tcp, :::33012->33012/tcp, 33060/tcp, 0.0.0.0:23066->3306/tcp, :::23066->3306/tcp   mysql-mgr-slave01
20f7e28c414e   mysql     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:33013->33013/tcp, :::33013->33013/tcp, 33060/tcp, 0.0.0.0:33066->3306/tcp, :::33066->3306/tcp   mysql-mgr-slave02

这样就建了3个docker容器节点,运行了起来

6、修改配置mysql参数配置文件

a、删除旧的配置文件

sudo rm -rf /home/mysql-mgr/mysql-mgr-master/conf.d/my.cnf
sudo rm -rf /home/mysql-mgr/mysql-mgr-slave01/conf.d/my.cnf
sudo rm -rf /home/mysql-mgr/mysql-mgr-slave02/conf.d/my.cnf

b、mysql-mgr集群master配置文件

sudo touch /home/mysql-mgr/mysql-mgr-master/conf.d/my.cnf
sudo chmod 777 /home/mysql-mgr/mysql-mgr-master/conf.d/my.cnf
sudo cat > /home/mysql-mgr/mysql-mgr-master/conf.d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值