3、PXC环境搭建
在host文件中设置了节点: (后面名称即为对应的ip)
centos1 10.3.13.213 node1
centos2 10.3.13.197 node2
centos3 10.3.13.194 node3
关闭防火墙
开放系统的3306端口 如果设置了防火墙的话,我们搭建的系统把防火墙已经关了
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
检查是否安装有MySQL Server: 在安装percona之前需要将mysql以及mariadb删除
rpm -qa | grep mysql
rpm -qa | grep mariadb 查找是否有mysql或mariadb存在
删除方法:
rpm -e mysql #普通删除模式
rpm -e --nodeps mysql #强行删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其强行删除。
yum remove mariadb-libs-5.5.41-2.el7_0.x86_64
要注意的是mariadb也是不能存在的,有的话就要删除,删除的时候有依赖关系,直接yum卸载
设置 vim /etc/selinux/config
SELINUX=disabled
需要reboot重启后生效
安装yum源
这个0.1-6已经是目前最新的yum源了
yum list | grep percona 查看当前安装的percona软件
安装依赖包
发现安装有问题需要依赖包:
yum install perl-IO-Socket-SSL.noarch
yum install perl-DBD-MySQL.x86_64
yum install perl-Time-HiRes
yum install openssl
yum install openssl-devel
yum install socat
备份用到的软件 yum install percona-xtrabackup-24.x86_64
安装集群服务等软件包
tar -xvf Percona-XtraDB-Cluster-5.7.23-31.31-r438-el7-x86_64-bundle.tar
yum install *.rpm
目前所有安装的内容:
$ rpm -qa|grep -i percona
Percona-XtraDB-Cluster-devel-57-5.7.23-31.31.2.el7.x86_64
percona-xtrabackup-24-2.4.13-1.el7.x86_64
Percona-XtraDB-Cluster-shared-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-57-debuginfo-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-57-5.7.23-31.31.2.el7.x86_64
percona-release-0.1-6.noarch
Percona-XtraDB-Cluster-shared-compat-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-test-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-garbd-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-server-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-client-57-5.7.23-31.31.2.el7.x86_64
Percona-XtraDB-Cluster-full-57-5.7.23-31.31.2.el7.x86_64
上面的操作需要在每个节点上进行,
配置文件
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
user=mysql
server-id=1 # PXC集群中MySQL实例的唯一ID,不能重复,必须是数字 (这个也可以不用配置,每一个节点都不需要配置)
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so 指定Galera库的路径
wsrep_cluster_name=pxc-cluster #PXC集群的名称
集群中各节点地址。地址使用组通信协议gcomm://(group communication)
wsrep_node_name=node1 #当前节点的名称
wsrep_node_address=10.3.13.213 #当前节点的IP(这里也可以填写host文件中ip对应的名称)
wsrep_sst_method=xtrabackup-v2 #同步方法(mysqldump、rsync、xtrabackup)
tate_snapshot_transfer(SST)使用的传输方法,可用方法有mysqldump、rsync和xtrabackup,前两者在传输时都需要对Donor加全局只读锁(FLUSH TABLES WITH READ LOCK),xtrabackup则不需要(它使用percona自己提供的backup lock)。强烈建议采用xtrabackup
wsrep_sst_auth= sstuser:Abc_123456 #同步使用的帐户,在SST传输时需要用到的认证凭据,格式为:"用户:密码"
pxc_strict_mode=ENFORCING #同步严厉模式 是否限制PXC启用正在试用阶段的功能,ENFORCING是默认值,表示不启用
binlog_format=ROW #基于ROW复制(安全可靠)
default_storage_engine=InnoDB #默认引擎
innodb_autoinc_lock_mode=2 #主键自增长不锁表 只能设置为2,设置为0或1时会无法正确处理死锁问题
主节点操作:
在启动前现需要运行下:停止MySQL服务 service mysql stop 否则下面的运行不能启动
主节点的启动命令与从节点是有区别的。
进入mysql进行操作:
#查看 root 密码
cat /var/log/mysqld.log | grep "A temporary password"
#修改 root 密码,建议先创建快照,以便恢复.
mysql_secure_installation
进入数据库
mysql -uroot -p
在数据库库中查看当前状态:mysql> show status like 'wsrep%';
在结果中注意
| wsrep_incoming_addresses | 10.3.13.213:3306 | 目前集群中只有一个ip
| wsrep_cluster_size | 1 | 目前node2和node3还没有加进来
从节点启动:
systemctl start mysqld
这里在启动从节点的时候一直报错,通过查找/var/lib/mysql下的错误日志和查看主节点的innobackup.backup.log
发现是同步账户sstuser的权限问题。
登录数据库
mysql -uroot -p
创建、授权、同步账号
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'Abc_123456';
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql> FLUSH PRIVILEGES;
数据库设置权限:
mysql> set global validate_password_policy=0 设置安全级别,0 是最低的
mysql> set global validate_password_length=4; 设置最小的密码长度
mysql> set PASSWORD=PASSWORD('123456'); 重新设置密码
赋予远程访问的权限:
mysql> grant all privileges on *.* to root@'%' identified by "123456"; 设置远程访问的权限
mysql> flush privileges;
4、PXC操作
对搭建的三个节点的数据库进行测试:
mysql -uroot -p
在节点node3上 mysql> create database yl123_db;
在节点node2上 mysql> show databases; 会发现数据已经同步过去了
将portal数据库转存储到percona上去
开始的时候portal数据库转存储为sql文件后,在保存到percona上出错,是因为version_history没有设置主键
percona的数据库中每个table都需要主键
将portal中的version_history添加主键后,poral数据库可以完全的拷贝到percona的一个节点,拷贝成功后,查看
其他节点,数据库已经同步过去了。
旧节点加入到集群中:
如果旧节点加入Galera集群,说明这个节点在之前已经在Galera集群中呆过,有一部分数据基础,缺少的只是它离开集群时的数据。
这时加入集群时,会采用IST(incremental snapshot transfer)传输机制,即使用增量传输。但注意,这部分增量传输的数据源是Donor
上缓存在GCache文件中的,这个文件有大小限制,如果缺失的数据范围超过已缓存的内容,则自动转为SST传输。如果旧节点上的数据和Donor
上的数据不匹配(例如这个节点离组后人为修改了一点数据),则自动转为SST传输。关于GCache以及Galera是如何判断数据状态的,本文不展开
节点在退出集群后, 从新加入的时候, 如果这个故障节点的ip 在自己的配置文件 wsrep_cluster_address 的选项中的第一个ip .
若是主节点,ip不能放在第一个,不能再用开始启动主节点的方式来进行启动 。
之前的从节点重启后就加入到集群中去了,没啥特殊
新节点加入到集群中:
新节点加入集群时,需要从当前集群中选择一个Donor节点来同步数据,也就是所谓的state_snapshot_tranfer(SST)过程。
SST同步数据的方式由选项wsrep_sst_method决定,一般选择的是xtrabackup。
wsrep_sst_method:state_snapshot_transfer(SST)使用的传输方法,可用方法有mysqldump、rsync和xtrabackup,前两者在传输时都需要对Donor加全局只读锁(FLUSH TABLES WITH READ LOCK),xtrabackup则不需要(它使用percona自己提供的backup lock)。强烈建议采用xtrabackup
必须注意,新节点加入Galera时,会删除新节点上所有已有数据,再通过xtrabackup(假设使用的是该方式)从Donor处完整备份
所有数据进行恢复。所以,如果数据量很大,新节点加入过程会很慢。而且,在一个新节点成为Synced状态之前,不要同时加入其它新
节点,否则很容易将集群压垮。如果是这种情况,可以考虑使用wsrep_sst_method=rsync来做增量同步,既然是增量同步,最好保证
新节点上已经有一部分数据基础,否则和全量同步没什么区别,且这样会对Donor节点加上全局read only锁
1 OPEN 节点启动成功,尝试连接到集群,如果失败则根据配置退出或创建新的集群
2 PRIMARY 节点已处于集群中,在新节点加入时,选取donor进行数据同步时会产生的状态
3 JOINER 节点处于等待接收/接收同步文件时的状态
4 JOINED 节点完成数据同步,但有部分数据没跟上,在尝试保持和集群进度一致的过程状态
例如某个节点故障后,重新加入集群,在追赶集群进度时的状态
5. SYNCED 节点正常提供服务的状态,表示已经同步完成并和集群进度保持一致。
6. DONOR 节点处于为新节点提供全量数据数据同步时的状态。此时该节点对客户端不提供服务。
如果是集群是新搭建的,或者说直接使用SST的方式加入新节点,那么新节点的配置就直接按照前面的主节点配置来就可以了,只是把wsrep_node_address改成
对应节点的IP即可,而对于已经运行了一段事件的集群,新加入节点使用SST传送全量数据的方式同步的代价比较高,所以下面讨论一个IST方式加入新节点同步数据的方式
5、JDBC连接
spring中的jdbc配置1:顺序优先的方式
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=123456
node1可用的时候,永远只连接上的是node1
node1挂掉之后,就会去连接node2,依次往后
spring中jdbc的配置2:负载均衡的模式
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=123456
- 03中间件mycat对pxc集群的分片处理
安装第二个pxc集群 作为mycat的第二个分片 直接拷贝其中的一个虚拟机,然后还原到最初的状态,这样会小很多,启动改一下IP和基础配置,然后再次拷贝这个虚拟机两份改IP重启即可 正常安装pxc集群即 ...
- 02使用java脚本向Pxc集群写入数据
使用java脚本向Pxc集群写入数据 批量写入pxc集群程序 导入mysql驱动包 # 批量插入数据的java脚本 package pxc_demo; import java.sql.Connecti ...
- Docker 搭建pxc集群 + haproxy + keepalived 高可用(二)
上一节我们有了两个分片的pxc集群,这一节我们接着安装haproxy和keepalived的实现集群的高可用 一.先下载haproxy的镜像 [root@localhost ~]# docker pu ...
- Docker 搭建pxc集群 + haproxy + keepalived 高可用(一)
一.首先需要安装好docker,安装方法可以参考之前一篇博文Centos7安装docker [root@localhost ~]# systemctl start docker [root@local ...
- Docker下配置双机热备PXC集群
架构: 步骤: 1.安装centos7 ,设置宿主机IP:192.168.1.224 2.先更新yum软件管理器,再安装docker 1.yum -y update 2.yum install - ...
- KeepAlived+HaProxy+MyCat+Percona双机热备PXC集群
一.搭建PXC集群 1.环境:centos7+PXC5.7.21+mycat1.6.5 2.卸载mariadb rpm -qa | grep mariadb* yum -y remove mariad ...
- 用6个案例说明如何恢复PXC集群
原文链接:https://blog.csdn.net/zengxuewen2045/article/details/51868976 1. 案例一:三个节点,关闭一个 由于维护和配置变更等工作需要 ...
- Docker搭建PXC集群
如何创建MySQL的PXC集群 下载PXC集群镜像文件 下载 docker pull percona/percona-xtradb-cluster 重命名 [root@hongshaorou ~]# ...
- MySQL PXC集群部署
安装 Percona-XtraDB-Cluster 架构: 三个节点: pxc_node_0 30.0.0.196 pxc_node_1 30.0.0.198 pxc_node_2 30.0.0.19 ...
随机推荐
- 01_8_session
01_8_session 1. session总结 1.1服务器的一块内存(存key-value) 1.2和客户端窗口对应(子窗口)(独一无二) 1.3客户端和服务器有对应的SessionID 1.4 ...
- cocos2dx观察者模式EventListenerCustom的使用(代替NotificationCenter)
在cocos2dx 3.x版本已经被弃用,改用EventDispatcher代替. 观察者模式是MVC模式的一种,一个model可以对应很多个观察者view,当model收到事件通知时,对应的view ...
- LeetCode939
问题:最小面积矩形 给定在 xy 平面上的一组点,确定由这些点组成的矩形的最小面积,其中矩形的边平行于 x 轴和 y 轴. 如果没有任何矩形,就返回 0. 示例 1: 输入:[[1,1],[1,3], ...
- python入门:输出1-100之内的所有奇数和偶数
#!/usr/bin/env python # -*- coding:utf-8 -*- #输出1-100之内的所有奇数和偶数 """ 给start赋值等于1,while ...
- CSS基础:block,inline和inline-block
css的display属性是前端开发中非常常见的属性,本文简单介绍下其中比较常用的属性值,即block.inline和inline-block. HTML组件中呈现一片空白区域的组件都可当盒模型(bo ...
- ccf 201712-4 行车路线(Python实现)
一.原题 问题描述 试题编号: 201712-4 试题名称: 行车路线 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将 ...
- LeetCode(173) Binary Search Tree Iterator
题目 Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ...
- LA 5007 Detector Placement 模拟
题意: 给出一束光线(射线),和一块三角形的棱镜 以及 棱镜的折射率,问光线能否射到X轴上,射到X轴上的坐标是多少. 分析: 其实直接模拟就好了,注意到题目中说不会发生全反射,所以如果射到棱镜中的话就 ...
- 小x的质数(线性O(n)筛素数)
小x的质数 题目描述 小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小 X 认为,质数是一切自然数起源的地方. 在小 X 的认知里,质数是除了本身和 11 以外,没有其他 ...
- 【MySQL】MySQL备份和恢复
一.为什么要备份数据 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大概分为以下几种. 硬件故障 软件故障 自然灾害 黑客攻击 误操作 (占比最大) 所以, 为了在数据丢失之后能够 ...