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 ...
随机推荐
- 【转】 VC中TCP实现 异步套接字编程的原理+代码
所谓的异步套接字编程就是 调用了 如下函数 WSAAsyncSelect 设置了 套接字的状态为异步,有关函数我会在下面详细介绍... 异步套接字解决了 套接字编程过程中的堵塞问题 .... ...
- c++ 函数指针应用,定义一个方法,传入两个参数和一个函数指针,并返回结果
#include <iostream> #include <string> using namespace std; double add(double x, double y ...
- NOIP模拟赛 篮球比赛1
篮球比赛1(basketball1.*) Czhou为了提高机房里各种神牛的身体素质,决定在每次训练后举行篮球比赛.为了保持比赛公平,Czhou要将神牛们分成两队.首先神牛们赛前都要排成固定的队伍:然 ...
- MySQL自学笔记_聚集函数
1. 使用场景 很多时候我们需要查找数据库中符合特定条件的数据的计数.最大值.最小值.平均值等一个数字,并需要要导出所有相关数据明细.此时就需要用到聚集函数. 而返回所有数据明细会占用数据库资源和网络 ...
- k8s Pod的自动水平伸缩(HPA)
我们知道,当访问量或资源需求过高时,使用:kubectl scale命令可以实现对pod的快速伸缩功能 但是我们平时工作中我们并不能提前预知访问量有多少,资源需求多少. 这就很麻烦了,总不能为了需求总 ...
- 《linux设备驱动开发详解》笔记——7并发控制
linux中并发无处不在,底层驱动需要考虑. 7.1 并发与竞争 7.1.1 概念 并发:Concurrency,多个执行单元同时.并行执行 竞争:Race Condistions,并发的执行单元对共 ...
- Python语言程序设计之一--for循环中累加变量是否要清零
最近学到了Pyhton中循环这一章.之前也断断续续学过,但都只是到了函数这一章就停下来了,写过的代码虽然保存了下来,但是当时的思路和总结都没有记录下来,很可惜.这次我开通了博客,就是要把这些珍贵的学习 ...
- leetcode-20-Dynamic Programming
303. Range Sum Query - Immutable 解题思路: Note里说sumRange会被调用很多次..所以简直强烈暗示要做cache啊...所以刚开始,虽然用每次都去遍历数组求和 ...
- Persona5
65536K Persona5 is a famous video game. In the game, you are going to build relationship with your ...
- selenium2等待元素加载
1.硬性等待 Thread.sleep(8000); 所谓的硬性等待就是,执行完相应操作就等待我设置的8s.无论网速快与慢,网速快的话,也许5s就打开网页了,可是程序必须接着等待剩下的3秒. 网速慢的 ...