手机html网站开发工具,做电商网站一般多少钱,校园网站建设 必要性分析,上海推广背景【注意】: 鄙人认为本篇适合做入门测试/学习之用#xff0c;选择的 单机多节点配置#xff0c;后面再整理 多机配置文章.近期正突击学习数据库知识想着对 PXC 集群部署实际操作一番#xff0c;提高技能点#xff0c;为后续的升职加薪做充足的准…背景【注意】: 鄙人认为本篇适合做入门测试/学习之用选择的 单机多节点配置后面再整理 多机配置文章.近期正突击学习数据库知识想着对 PXC 集群部署实际操作一番提高技能点为后续的升职加薪做充足的准备于是在此记录一下既能作为采坑笔记又能帮助到后期有需要的道友欢迎指摘 …【注】Percona XtraDB Cluster(简称 PXC 集群)PXC的优缺点PXC 最大的优势强一致性、无同步延迟 推荐阅读 【Docker 部署 Mysql集群】MySQL 常见集群方案 【Replication vs PXC】环境CentOS版本 CentOS Linux release 7.9.2009 (Core)MySQL 版本 5.7.32PXC 版本 percona/percona-xtradb-cluster:5.7其实一开始鄙人也是计划直接操作多机部署经验基本百度出来的都是这一类的只好先摸索一番吧 …前期准备1). 开启四个 PXC 环境所涉及的端口3306:# mysql 实例端口4567:# PXC cluster 相互通讯的端口4444:# 用于 SST(State Snapshot Transfer): 全量传输4568:# 用于 IST(Incremental state Transfer):增量传输传送以鄙人使用宝塔面板操作为例注意以上端口的开启2). 部署前建议关闭 SELINUX、将 MySQL 数据库服务停止安全增强型 Linux(Security-Enhanced Linux)SELinux 主要由美国国家安全局开发一种方法【荐】永久关闭 Selinuxvi /etc/selinux/config 把 SELINUX 属性值设置成 disabled然后 reboot 重启另一种方法或者执行命令 Linux 临时关闭 Selinux: setenforce 03). 安装 docker因为PXC 官方提供了 Docker 镜像所以我们可以很方便的搭建 PXC 集群所以如果没有安装 docker需要先执行命令 yum install docker搭建 PXC 集群1). 下载 PXC 镜像 (可以指定版本)Docker 仓库中的 PXC 官方镜像https://hub.docker.com/r/percona/percona-xtradb-cluster因为我所使用的 MySQL 版本为 5.7.32此处对应选择的 PXC 版本就是 5.7docker pull percona/percona-xtradb-cluster:5.7[rootlocalhost download]# docker pull percona/percona-xtradb-cluster:5.7Trying to pull repository docker.io/percona/percona-xtradb-cluster ...5.7: Pulling from docker.io/percona/percona-xtradb-cluster75f829a71a1c: Already existscf0efe55f10d: Already existse632c0ccd2fb: Already exists4c86e21499a1: Already exists32a8cd67d865: Already exists3672a73f6188: Already exists6c6c92c55055: Already existscd786bd32ef1: Pull complete8236bd03304c: Pull completebd59b303b228: Pull completec574c241c2a3: Pull complete030daf9905bb: Pull completeDigest: sha256:d95cfa86d2dca1a2c62c05e53050fd569512bf4b78d867b0e5f8f234d7f3999aStatus: Downloaded newer image for docker.io/percona/percona-xtradb-cluster:5.7[rootlocalhost download]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/percona/percona-xtradb-cluster 5.7 3a0dc027d8ac 2 months ago 442 MB重命名镜像名称 (名称太长重命名一下)docker tag percona/percona-xtradb-cluster:5.7 pxc删除原始镜像docker rmi percona/percona-xtradb-cluster:5.72). 创建 Docker 网络出于安全考虑给 PXC 集群创建 Docker 内部网络用于 PXC 集群独立使用docker network create --subnet172.20.0.0/16 pxc-network-mT【拓展】:查看网段 docker network inspect pxc-network-mT所有网段 docker network ls删除网段 docker network rm pxc-network-mT3). 创建数据卷 (用于之后挂载)使用 Docker 时业务数据应保存在宿主机中采用目录映射这样可以使数据与容器独立。但是容器中的 PXC 无法直接使用映射目录解决办法是采用 Docker 卷 来映射本文以最常用的三个节点作为配置所以就可以创建三个数据卷[rootlocalhost ~]# docker volume create vMZ1vMZ1[rootlocalhost ~]# docker volume create vMZ2vMZ2[rootlocalhost ~]# docker volume create vMZ3vMZ3【拓展】: 删除数据卷命令为 docker volume rm vMZ1 (最后一项为数据卷名称可自定义)查看数据卷[rootlocalhost download]# docker inspect vMZ1[{Driver: local,Labels: {},Mountpoint: /var/lib/docker/volumes/vMZ1/_data, # 这里是在宿主机的保存位置Name: vMZ1,Options: {},Scope: local}]4). 创建节点(PXC 容器)注意在这一步之前要把 MySQL 数据库停止服务 [rootlocalhost ~]# service mysqld statusSUCCESS! MySQL running (1992)[rootlocalhost ~]# service mysqld stopShutting down MySQL.. SUCCESS!A. 创建第一个节点执行命令(对于参数释义请移步 【附录 - a】 )docker run -di --namenode1 --netpxc-network-mT -p 9000:3306 -v vMZ1:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORDmT123456 -e CLUSTER_NAMEcluster-mT -e XTRABACKUP_PASSWORDmT123456 --ip 172.20.0.2 pxc因为后续节点的添加需要关联到第一个节点所以此时需要等待数据库启动完成 【自动执行正常情况下会发现 mySQL 服务启动了】通过查看日志docker logs node1如果出现下面的输出证明启动成功2021-01-08T10:00:17.143767Z 0 [Note] InnoDB: Buffer pool(s) load completed at 210108 10:00:17【拓展】:如果发现启动有误建议先将容器停止不然 mysqld 服务各种报错删除节点命令为 docker rm node1停止节点运行:docker stop node1查看所有节点docker ps此时可以通过 Navicat 等数据库连接工具测试是否能够连接 【前提9000 端口开放】也可以同过命令 docker ps查看已创建的节点B. 加入第二个/第三个…节点只有主节点可以访问了才能创建从节点加入第二个节点执行命令docker run -di --namenode2 --netpxc-network-mT -p 9001:3306 -v vMZ2:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORDmT123456 -e CLUSTER_NAMEcluster-mT -e XTRABACKUP_PASSWORDmT123456 -e CLUSTER_JOINnode1 --ip 172.20.0.3 pxc需要注意是 第二个节点开始需要增加 -e CLUSTER_JOINnode1 参数表示与 node1 节点同步,否则 node2容器会自动关闭当 PXC 集群中存在两个节点以上之后就没有主节点的概念了。集群中最后一个退出的节点就会变为主节点加入第三个节点执行命令docker run -di --namenode3 --netpxc-network-mT -p 9002:3306 -v vMZ3:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORDmT123456 -e CLUSTER_NAMEcluster-mT -e XTRABACKUP_PASSWORDmT123456 -e CLUSTER_JOINnode1 --ip 172.20.0.4 pxc查看挂载情况[rootlocalhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESdb0a01e25a4d pxc /entrypoint.sh my... 5 seconds ago Up 4 seconds 4567-4568/tcp, 0.0.0.0:9002-3306/tcp node3501d6b015853 pxc /entrypoint.sh my... 6 minutes ago Up 6 minutes 4567-4568/tcp, 0.0.0.0:9001-3306/tcp node2079cfbecc5b0 pxc /entrypoint.sh my... 27 minutes ago Up 27 minutes 4567-4568/tcp, 0.0.0.0:9000-3306/tcp node1[rootlocalhost ~]#进入 node1 节点docker exec -it node1 /usr/bin/mysql -uroot -pmT123456查看状态mysql show status like wsrep%;可以看到 wsrep_incoming_addresses 的值就是我们三个容器的IP地址 wsrep_incoming_addresses | db0a01e25a4d:3306,501d6b015853:3306,079cfbecc5b0:3306 5). 集群同步验证最直接的方式就是操作数据库进行数据比对为了操作方便我直接使用 Navicat 客户端分别使用端口 9000、9001、9002 连接然后在节点 node2 上创建数据库 test_pxc以及表 test-pxc随便更改数据会发现其他节点的数据也是同步变化的初步探索到这吧后面再做多机部署的测试、整理 …宕机操作对于节点的停止操作分第一个节点和其他节点是不同的1). 如果 【node1】 节点不是最后一个离开集群如果 【node1】 节点不是最后一个离开集群的不能再以主节点的形式启动了此时只运行 docker start node1 命令过会会发现 【node1】没有启动这时需要通过 docker volume inspect vMZ1进入数据卷目录查看是否存在 grastate.dat文件将 safe_to_bootstrap 参数值修改为 1保存退出然后再进入 【node1】节点中查看数据试着修改一下看是否和其他节点数据同步我发现我这里时可以同步的但根据网友经验多数是不会同步的此时可以 删除 【node1】容器 : docker stop node1、docker rm node1然后再以从节点方式加入集群注意参数 -e CLUSTER_JOINnode3 的指定(此时是【node3】未停止)后面再检查数据是否能同步 !2). 如果其他以指定主节点形式的节点离开集群后可以通过命令docker start node2(形如) 进入 PXC 集群创建的容器然后通过 docker ps 查看是否进入成功附录a. 创建节点参数解释–namenode1 容器名称–netpxc-network-mT加入到 pxc-network-mT 的虚拟网络-p 9000:3306随机端口映射容器内部端口9000随机映射到主机 mySQL 数据库的 3306 端口-v vMZ1:/var/lib/mysql数据卷挂载在 vMZ1 数据卷。可以理解为虚拟的磁盘容器在保存数据的时候往 /var/lib/mysql 路径保存数据其实就是把数据包存在数据卷上了–privileged表示有读写权限-e MYSQL_ROOT_PASSWORDmT123456 Mysql 的 root 密码 (跟原来数据库设定的 root 密码没关系)-e CLUSTER_NAMEcluster-mTPXC 集群名称 (注意不要命为PXC)-e XTRABACKUP_PASSWORDmT123456 PXC 集群之间数据同步的密码-e CLUSTER_JOINnode1 :表示与 node1 节点同步pxc来自哪个镜像创建b. 数据卷操作指令查看当前存在的数据卷docker volume ls创建一个的数据卷 ,name数据卷名称docker volume create ${name}删除某个数据卷,name数据卷名称docker volume rm ${name}查看某个数据卷,name数据卷名称docker volume inspect ${name}c. 文章d. 报错排查及解决1). ERROR! MySQL server PID file could not be found!基本就是 节点启动有警告、错误信息建议先退出节点排查错误基本上退出后就不用报这个错咯 …2). Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?执行命令systemctl restart docker.service3). ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists那就删除这个文件第一个节点启动报错2021-01-07T12:09:53.283195Z 0 [Note] Event Scheduler: Loaded 0 events2021-01-07T12:09:53.283401Z 0 [Note] mysqld: ready for connections.Version: 5.7.31-34-57 socket: /tmp/mysql.sock port: 3306 Percona XtraDB Cluster (GPL), Release rel34, Revision d76a6e8, WSREP version 31.45, wsrep_31.452021-01-07T12:09:53.285952Z 2 [Note] WSREP: Initialized wsrep sidno 22021-01-07T12:09:53.285963Z 2 [Note] WSREP: Auto Increment Offset/Increment re-align with cluster membership change (Offset: 1 - 1) (Increment: 1 - 1)2021-01-07T12:09:53.285973Z 2 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.2021-01-07T12:09:53.286017Z 2 [Note] WSREP: Assign initial position for certification: 18, protocol version: 42021-01-07T12:09:53.286056Z 0 [Note] WSREP: Service thread queue flushed.2021-01-07T12:09:53.286093Z 2 [Note] WSREP: GCache history reset: 23f2c29d-50b6-11eb-9f32-1eec49f8ecb5:0 - 23f2c29d-50b6-11eb-9f32-1eec49f8ecb5:182021-01-07T12:09:53.288361Z 2 [Note] WSREP: Synchronized with group, ready for connections2021-01-07T12:09:53.288374Z 2 [Note] WSREP: Setting wsrep_ready to true2021-01-07T12:09:53.288377Z 2 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.如果发现启动有误建议先将容器停止不然 MySQL 服务各种报错[rootlocalhost ~]# docker stop pn-mT1pn-mT1[rootlocalhost ~]# docker rm pn-mT1pn-mT1[rootlocalhost ~]#此时会注意到 MySQL 服务自动停止5). transport: x509: certificate has expired or is not yet valid[rootlocalhost ~]# yum -y install ntp ntpdate[rootlocalhost ~]# ntpdate 0.asia.pool.ntp.org[rootlocalhost ~]# hwclock --systohc[rootlocalhost ~]# date2021年 01月 08日 星期五 09:54:23 CST本文同步分享在 博客“moTzxx”(CSDN)。如有侵权请联系 supportoschina.cn 删除。本文参与“OSC源创计划”欢迎正在阅读的你也加入一起分享。