前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker搭建pxc

Docker搭建pxc

原创
作者头像
风起--追风
修改2021-11-09 10:14:25
8490
修改2021-11-09 10:14:25
举报

一.PXC集群介绍

pxc是基于Galera,可以实现多节点间的数据同步以及不需要读写分离可以随时访问任一节点,保证数据库的强一致性(无延迟)以及高可用,但牺牲了部分性能

优点:真正的多主,强一致性,热备高可用,不需要处理主从故障转移

二.实验操作

1.关闭selinux,开放firewalld端口:4444(全量传输,sst用于其他worker的同步),4567(集群通信的端口),4568(增量传输)

vim /etc/selinux/config#将selinux设置为disable

firewall-cmd --zone=public --add-port=4444/tcp --permanent

firewall-cmd --zone=public --add-port=4567/tco --permanent

firewall-cmd --zone=public --add-port=4568/tcp --permanent

direwann-cmd --zone=public --add-port=9001/tcp --permanent

2.时间同步(配置NTP服务)

rpm -qa | grep ntp

yum install -y ntp

ntpdate 210.72.145.44(中国国家授时中心)

date

3.下载percona/percona-xtradb-cluster

docker pull percona/percona-xtradb-cluster

docker tag percona/percona-xtradb-cluster pxc

docker rm percona/percona-xtradb-cluster

4.创建swarm集群

  • 第一个创建的是pxc集群的master,需要初始化pxc集群
  • pxc集群是不需要进行读写分离配置的,任意一个节点写入都是能强一致的同步到其他节点

pxc

  • docker swarm init#将生成的docker swarm join...:2377复制到其他主机会显示AS A WORKER
  • swarm集群常用命令:docker node ls#查看swarm集群
  • docker node rm#移除swarm的某一节点
  • docker swarm leave -f 强制解散swarm集群

5.创建net网络

创建一个docker网络给pxc集群,后期也方便不同的pxc集群进行区分维护

docker network create -d overlay -attachable swarm-mysql

6.创建pxc主节点

docker run -d -p 9001:3306 \#将容器的3306端口映射到宿主机

-e MYSQL_ROOT_PASSWORD=123456 \#设置mysql的root账号和密码

-e XTRADB_ROOT_PASSWORD=123456 \

-e CLUSTER_NAME=pxc1 \#给集群取名pxc1

-v v1:/var/lib/mysql --priviliges \#将容器的mysql目录与宿主机数据卷v1挂载

-name=pnv1 --net=swarm-mysql \

pxc

注:数据卷v1可以提前创建docker volume create 卷名 --创建

docker volume ls --查看

docker volume inspect 卷名 --查看数据卷详情

待主节点创建成功后,可以docker ps 查看容器工作状态

等待1分钟左右使用Navicat客户端工具进行连接

7.创建pxc其他worker节点

docker run -d -p 9001:3306 \#将容器的3306端口映射到宿主机

-e MYSQL_ROOT_PASSWORD=123456 \#设置mysql的root账号和密码

-e XTRADB_ROOT_PASSWORD=123456 \

-e CLUSTER_NAME=pxc1 \#给集群取名pxc1

-e CLUSTER_JOIN=pnv1 \加入集群p剩下的worker可以按照上面的格式,进行部分修改,没添加一个worker后需要等待它连接成功再进行下一个worker的创建,

否则容易出现闪退

8.查看挂载情况

  • 可以使用docker network inspect swarm-mysql #查看overlay虚拟网络上各节点的挂载情况
  • 可以进入任意节点数据库访问以pnv2为例docker exec -it pnv2 bash
  • mysql -uroot -p'123456'
  • show status like 'wsrep%';
  • 可以看到"wsrep_incoming_addresses"的值对应的就是我们的节点ip

9.pxc集群测试

在任意节点数据库或Nacicat新增数据库test,刷新其他节点数据库能看到数据库test同步,即为成功

10.数据库备份

因为pxc集群是强一致性,无延时同步,所以对数据库进行备份可以登入任意节点进行备份

docker exec -it pnv1 bash

进入容器内mysqldumo -uroot -p 数据库名 > /var/lib/mysql/backup.sql

/var/lib/mysql挂载在宿主机v1卷,所以可以同步看到backup

脚本备份

#!/bin/bash

mysql_container="mysql"

mysql_user="root"

mysql_password="****"

dbname='test'

backtime=`date +%Y%m%d%H%M`

logpath='/var/lib/mysql/backlog'

datapath='/var/lib/mysql/backdata'

if [ ! -d "$logpath" ]; then

mkdir -p "$logpath"

fi

if [ ! -d "$datapath" ]; then

mkdir -p "$datapath"

fi

echo ‘”备份时间为${backtime},备份数据库表 ${dbname} 开始” >> ${logpath}/mysql.log

for table in $dbname;

do

source=`docker exec -i ${mysql_container} mysqldump -u${mysql_user} -p${mysql_password} --single-transaction ${table}> ${datapath}/${backtime}.sql` 2>> ${logpath}/mysql.log;

if [ "$?" != 0 ] ; then

echo “数据库表 ${dbname} 备份失败!!” >> ${logpath}/mysql.log

else

cd $datapath

tar jcf ${table}${backtime}.tar.bz2 ${backtime}.sql > /dev/null

rm -f ${datapath}/${backtime}.sql

find $datapath -name "*.tar.bz2" -type f -mtime +90 -exec rm -rf {} \; > /dev/null 2>&1

echo “数据库表 ${dbname} 备份成功!!” >> ${logpath}/mysql.log

fi

done

设置crontab定时任务

crontab -e

00 00 * * * sh /脚本路径/backup.sh

crontab -l 查看现有任务

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档