下后端代码
引入本地Windows测试运行
执行后段关于数据库建表sql
之前蜗牛老梁讲的mysql mycat主从复制就是replication方案
PXC任何节点都可以读写,不分主从
replication的弱一致性演示
2个库
停止从库
已停止
第一个库写入 成功,第二个库没有这个数据,证明了弱一致性
关掉PXC其中一个db端口,进入到集群中一个节点容器里面通过它的防火墙,关闭它pxc同步的端口,需要封闭入站和出站两个端口。
docker搭建mysql的pxc集群
pxc集群很特殊,只能安装在linux之上
docker pull docker.io/percona/percona-xtradb-cluster
重命名镜像,实际上是复制了一份
删除旧名字镜像
现在要创建5个节点pxc集群就要创建5个pxc容器
创建出来的pxc容器不要直接对接docker以外的网络,不安全
要在docker内部给pxc划分一个网段,这个网段外部无法直接访问,向外部开放什么端口,用docker端口映射技术实现
说明,创建内部网段指令是docker network create 网段名
那么这个网段ip是多少?docker虚拟机自带网段是172.17.0.xxx,这是内置的网段
创建第一个网段net1,网段默认ip就应该是172.18.0.xxx
在创建第二个net2,网段默认ip就应该是172.19.0.xxx
当然可以自己指定ip
docker network create --subnet=172.18.0.0/24 net1
查看刚刚创建的net1
注意看Subnet
创建出的docker容器要把数据保存到宿主机里面,所以就用容器卷,映射宿主机目录,
pxc集群在docker容器里面运行,无法直接使用映射目录,映射目录直接给到在pxc启动的容器,会闪退
就要用容器卷
创建一个数据卷
然后再宿主机中查看
可以删除
-d表示后台运行(要进入容器是-it),-p 宿主机端口:容器端口
-v标示数据卷, v1 :容器里面的映射目录
-e 是参数,注意 XTRABACKUP_PASSWORD=abc123456
–privileged 是赋予最高权限
–net 是用那个网段
最后pxc就是从哪个容器克隆
CLUSTER_NAME名字就是PXC
docker run -d -p 3306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 --privileged --name=pxc_node1 --net=net1 --ip 172.18.0.2 pxc
加入第一个node1
docker run -d -p 3307:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pxc_node1 --privileged --name=pxc_node2 --net=net1 --ip 172.18.0.3 pxc
docker run -d -p 3308:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pxc_node1 --privileged --name=pxc_node3 --net=net1 --ip 172.18.0.4 pxc
docker run -d -p 3309:3306 -v v4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pxc_node1 --privileged --name=pxc_node4 --net=net1 --ip 172.18.0.5 pxc
docker run -d -p 3310:3306 -v v5:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pxc_node1 --privileged --name=pxc_node5 --net=net1 --ip 172.18.0.6 pxc
注意!!!启动第一个后要耐心等个2分钟以上,不然后面的集群节点可能接不上,会闪退(通过navicat连接测试)
就可以创建第二个容器节点了
第二个容器节点初始化就很快了,然后再用navicat测试连接,只有第一个最慢
注意重启vm、重启docker服务,再次重启pxc容器会闪退,出现抱错
就要去宿主机中搜索文件grastate.dat
find / -name grastate.dat
需要修改grastate.dat文件将safe_to_bootstrap的值置为1
要在后面页面看到正常提供服务的数据库
注意先关防火墙
注意先关防火墙
注意先关防火墙
0.0.0.0:3306 表示任何IP都可以访问这个3306端口
docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name haproxy1 --privileged --net=net1 --ip 172.18.0.7 haproxy
设置一个haproxy对于所负责负载均衡的数据库实例心跳检查的登陆账号
create user ‘haproxy’@’%’ IDENTIFIED BY ‘’
%表示任何ip都能以该账号登陆到mysql数据库,密码为空
宿主机ip:4001/dbs
成功进入控制监视界面
down掉其中一个db节点
监视器中就显红了
用navicate连接这个haproxy,以后就只通过这个负载均衡器往数据库里面读写了
在haproxy容器中安装keepalived
apt-get update加速
重要 - 设置ubuntu apt-get 源(ubuntu官方跟阿里云的)
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
apt-get clean
然后
apt-get update
apt-get upgrade
apt-get install vim
vim /etc/keepalived/keepalived.conf
后面没了????
引用完整参考如下
https://blog.csdn.net/qq_21108311/article/details/82973763
xtrabackup不需要锁表就备份数据了,LVM要锁表
往往第一次是全量备份,第二次是增量
在容器中备份的数据一定要通过docker数据卷持久化到宿主机