MySQL PXC(Percona XtraDB Cluster)环境搭建记录

Wesley13
• 阅读 872

MySQL PXC(Percona XtraDB Cluster)环境搭建记录

2018年06月07日 17:13:08 偏居一方的梦想 阅读数 564

MySQL PXC环境搭建记录

由于最近项目的需要,要给客户搭建一个高可用环境,其中涉及了数据库的高可用,最终使用了PXC+LVS的方案,所以在此记录一下PXC的搭建。

首先简单介绍一下PXC,percona官网地址:https://www.percona.com/,官网介绍如下:
MySQL PXC(Percona XtraDB Cluster)环境搭建记录
Percona XtraDB Cluster(PXC)是MySQL集群的一种高可用性和高伸缩性的开源解决方案。

PXC会使用大概是4个端口号
- 3306 数据库对外服务的端口号
- 4444 请求SST SST: 指数据一个镜象传输 xtrabackup , rsync ,mysqldump
- 4567 : 组成员之间进行沟通的一个端口号
- 4568 : 传输IST用的。相对于SST来说的一个增量



环境介绍

本文档涉及的ip等信息都是虚假的。

IP

操作系统

172.13.13.1

CentOS7+

172.13.13.2

CentOS7+

172.13.13.3

CentOS7+

开始

1、准备相关文件

首先去percona官网下载相关文件,从https://www.percona.com/downloads/Percona-XtraDB-Cluster-LATEST/,选择对应的操作系统及版本,选择下载tar,里面有全部的文件。
MySQL PXC(Percona XtraDB Cluster)环境搭建记录
https://www.percona.com/downloads/XtraBackup/LATEST/,下载XtraBackup的rpm文件,不需要下载tar,debuginfo和test不是必需的。

2、修改hostname

修改hostname,如下所示:
MySQL PXC(Percona XtraDB Cluster)环境搭建记录
修改hosts文件,三台机器都修改如下所示:
MySQL PXC(Percona XtraDB Cluster)环境搭建记录

3、安装PXC

首先安装依赖的一些软件等。
yum install socat yum install libev

将下载的PXC的tar和XtraBackup的rpm文件,移到/usr/local/pxc/下(自定义的一个文件夹),然后解压tar到当前文件夹。
MySQL PXC(Percona XtraDB Cluster)环境搭建记录

首先安装依赖,shared和shared-compat两个rpm包;
再安装xtrabackup,此时会提示依赖perl或DBD_MySQL等,执行下面命令:
yum install percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm
,来安装所有依赖(如果通过yum install perl-DBD-MySQL,安装得到的mysql会依赖maraidb_libs,而pxc的server安装时会提示需要卸载mariadb_libs),安装完之后再执行rpm -ivh percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm ;
接着安装devel等。也可以执行rpm -ivh percona-XtraDB*命令,来自动安装。

自动安装中可能会出错,提示依赖qpress。执行yum install qpress,如果提示无可用安装时,修改rpm源,
rpm -Uvh [https://www.percona.com/downloads/percona-release/redhat/latest/percona-release-0.1-4.noarch.rpm](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.percona.com%2Fdownloads%2Fpercona-release%2Fredhat%2Flatest%2Fpercona-release-0.1-4.noarch.rpm),然后再执行install。

安装完成之后,PXC会在/etc下生成percona-xtradb-cluster.conf.d/目录,该目录下有三个配置文件,其中wsrep.cnf是集群信息的配置文件。

由于想要让PXC的文件、日志、数据等信息,生成到指定的地址,所以在安装server、client以及57-5.7之前,先自己创建了/etc下的my.cnf文件,里面定义了PXC相关的配置,PXC部分内容如下:

\### MySQL 相关部分配置 [mysqld] log-error=/var/log/mysqld.log \## General user = mysql port = 3306 socket = /usr/local/pxc_data/sock/mysql.sock pid-file = /usr/local/pxc_data/run/mysqld.pid basedir = /usr datadir = /usr/local/pxc_data/datafile tmpdir = /usr/local/pxc_data/tempfile slave_load_tmpdir = /usr/local/pxc_data/tempfile

### Percona XtraDB Cluster 官方配置 begin

wsrep_provider = /usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_name = pxc-cluster #pxc集群名称

wsrep_cluster_address = gcomm://172.13.13.1,172.13.13.2,172.13.13.3 #集群的三个节点的ip

wsrep_node_name = pxc_node1 #hostname

wsrep_node_address = 172.13.13.1 #本机ip

wsrep_sst_method = xtrabackup-v2 #数据同步方式

wsrep_sst_auth = sstuser:sstpassword #同步时的用户及密码

wsrep_provider_options=”gcache.size=8G;”

pxc_strict_mode = enforcing

binlog_format = ROW

default_storage_engine = InnoDB

innodb_autoinc_lock_mode = 2

然后在相应的位置创建文件夹,例如本次是生成在/usr/local/pxc_data/下,分别创建如下文件夹:
mkdir /usr/local/pxc_data/{relaylog,genaral,slowlog,logs,binlog,tempfile,datafile} -p
创建完成之后,需要将权限用户组修改一下,不然PXC启动的时候会报错,启动失败。
chown mysql.mysql -R *

4、启动PXC

三个节点如上配置完毕(注意my.conf中pxc的相关修改),准备启动PXC集群,首先启动主节点。
在172.13.13.1上执行systemctl start mysql@bootstrap.service,如果提示没有bootstrap这种启动方式,那么就是没有安装gardb这个rpm包,则执行rpm -ivh Percona-XtraDB-Cluster-garbd-57-5.7.21-29.26.1.el7.x86_64.rpm,安装完成之后,重新启动。

当启动成功之后,要想通过命令行进入数据库,需要得到数据库的root账号的默认密码,通过日志文件来得到(grep pass 3306-error.log)。
然后连接数据库:
mysql -u root -p 'XXXXX'
如果出现sock文件之类的问题,那么需要指定sock文件,即:
mysql -u root -p 'XXXXX' -S "sock文件地址"
登入成功之后,首先根据提示修改root密码,不然无法进行其他操作。
修改完成之后,新增一个sstuser用户(这个用户是pxc配置中的那个,用来三个节点之间数据同步),并授权。
GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstusrr'@'localhost' identified by "sstpassword";

添加并授权成功之后,在172.13.13.2/172.13.13.3上执行systemctl start mysql[@service](https://my.oschina.net/service)

如果有错则根据提示查看相关日志确定问题。
三个节点启动完成之后,登入mysql执行 show status like 'wsrep%';可以查看pxc的一些信息。

5、其他

出现
[ERROR] WSREP: wsrep_load(): dlopen(): /usr/lib64/galera3/libgalera_smm.so: symbol SSL_COMP_free_compression_methods, version libssl.so.10 not defined in file libssl.so.10 with link time reference
,是因为openssl版本低,执行yum update openssl即可。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这