安装 Percona-XtraDB-Cluster

架构:

三个节点:

pxc_node_0 30.0.0.196
pxc_node_1 30.0.0.198
pxc_node_2 30.0.0.199

防火墙:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4444 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4567 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4568 -j ACCEPT
软件包:
compat-readline5-5.2-17.4.x86_64.rpm
libev4-4.15-7.1.x86_64.rpm
numactl-2.0.9-2.el6.x86_64.rpm
percona-xtrabackup-24-2.4.12-1.el6.x86_64.rpm
Percona-XtraDB-Cluster-57-5.7.23-31.31.2.el6.x86_64.rpm
Percona-XtraDB-Cluster-client-57-5.7.23-31.31.2.el6.x86_64.rpm
Percona-XtraDB-Cluster-devel-57-5.7.23-31.31.2.el6.x86_64.rpm
Percona-XtraDB-Cluster-server-57-5.7.23-31.31.2.el6.x86_64.rpm
Percona-XtraDB-Cluster-shared-57-5.7.23-31.31.2.el6.x86_64.rpm
qpress-11-1.el6.x86_64.rpm
socat-1.7.2.4-1.el6.rf.x86_64.rpm
安装:

下载:

wget https://repo.percona.com/release/centos/6Server/RPMS/x86_64/Percona-XtraDB-Cluster-devel-57-5.7.23-31.31.2.el6.x86_64.rpm
wget https://repo.percona.com/release/centos/6Server/RPMS/x86_64/Percona-XtraDB-Cluster-server-57-5.7.23-31.31.2.el6.x86_64.rpm
wget https://repo.percona.com/release/centos/6Server/RPMS/x86_64/Percona-XtraDB-Cluster-57-5.7.23-31.31.2.el6.x86_64.rpm
wget https://repo.percona.com/release/centos/6Server/RPMS/x86_64/Percona-XtraDB-Cluster-client-57-5.7.23-31.31.2.el6.x86_64.rpm
wget https://repo.percona.com/release/centos/6Server/RPMS/x86_64/Percona-XtraDB-Cluster-shared-57-5.7.23-31.31.2.el6.x86_64.rpm
wget https://repo.percona.com/release/centos/6Server/RPMS/x86_64/percona-xtrabackup-24-2.4.12-1.el6.x86_64.rpm
wget https://repo.percona.com/release/centos/6Server/RPMS/x86_64/qpress-11-1.el6.x86_64.rpm
wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/viliampucik:/obs/RedHat_RHEL-6/x86_64/compat-readline5-5.2-17.4.x86_64.rpm
wget ftp://ftp.pbone.net/mirror/ftp.centos.org/6.9/os/x86_64/Packages/numactl-2.0.9-2.el6.x86_64.rpm
wget ftp://ftp.pbone.net/mirror/apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/socat-1.7.2.4-1.el6.rf.x86_64.rpm
wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/rudi_m:/devel-snap/CentOS_CentOS-6/x86_64/libev4-4.15-7.1.x86_64.rpm

安装:

rpm -ivh libev4-4.15-7.1.x86_64.rpm
rpm -ivh socat-1.7.2.4-1.el6.rf.x86_64.rpm
rpm -ivh numactl-2.0.9-2.el6.x86_64.rpm
rpm -ivh compat-readline5-5.2-17.4.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.8-1.el6.x86_64.rpm
rpm -ivh qpress-11-1.el6.x86_64.rpm
rpm -ivh Percona-XtraDB-Cluster-shared-57-5.7.19-29.22.3.el6.x86_64.rpm
rpm -ivh Percona-XtraDB-Cluster-client-57-5.7.19-29.22.3.el6.x86_64.rpm
rpm -ivh Percona-XtraDB-Cluster-57-5.7.19-29.22.3.el6.x86_64.rpm
rpm -ivh Percona-XtraDB-Cluster-server-57-5.7.19-29.22.3.el6.x86_64.rpm
rpm -ivh Percona-XtraDB-Cluster-devel-57-5.7.19-29.22.3.el6.x86_64.rpm
配置:

配置文件:

vim /etc/my.cnf
[client]
port=3306
socket = /tmp/mysql.sock [mysqld]
server-id=1
port=3306
datadir=/data/database/mysql
socket=/tmp/mysql.sock
log-error=/var/run/mysqld/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
user=mysql # General
back_log=2000
connect_timeout=15
skip_name_resolve=ON
max_connections=5000
table_definition_cache=2000
table_open_cache=10000
metadata_locks_hash_instances=256
ssl=0
core_file # Innodb
innodb_buffer_pool_size = 10240M
innodb_buffer_pool_instances=8
innodb_log_file_size = 1024M
innodb_log_buffer_size = 16M
innodb_lock_wait_timeout = 20
innodb_autoinc_lock_mode=2
innodb_read_io_threads = 5
innodb_write_io_threads = 5
innodb_thread_concurrency = 8
innodb_doublewrite=1
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = 'O_DIRECT'
innodb-page-cleaners=8
innodb_purge_threads=4
innodb_lru_scan_depth=2048
innodb_io_capacity=8000
innodb_io_capacity_max=16000
innodb_adaptive_hash_index=OFF
innodb-change-buffering=none
innodb_flush_neighbors=0
innodb_max_dirty_pages_pct = 90
innodb_max_dirty_pages_pct_lwm = 10 # Binlog
relay-log=relay-1
binlog_format=ROW
enforce-gtid-consistency
gtid-mode=on
master-info-repository=TABLE
relay-log-info-repository=TABLE
binlog-checksum=NONE
log-bin
log_slave_updates
expire_logs_days=3
sync_binlog=1 # Monitoring
innodb_monitor_enable='%'
performance_schema=ON
performance_schema_instrument='%synch%=on' # Galera
symbolic-links=0
explicit_defaults_for_timestamp=true
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://30.0.0.196,30.0.0.198,30.0.0.199
default_storage_engine=InnoDB
wsrep_slave_threads= 20
wsrep_log_conflicts
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc3
wsrep_node_address=30.0.0.196
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:s3cret"

差异化配置:

# 需要根据相应的节点配置
server-id=1
wsrep_node_name=pxc3
wsrep_node_address=30.0.0.196

配置数据目录:

mkdir -p /data/database/mysql
chown mysql:mysql -R /data/database/mysql
启动:

启动第一个节点

/etc/init.d/mysql bootstrap-pxc

或者这样:

# 初始化
/usr/sbin/mysqld --defaults-file=/etc/my.cnf --initialize --datadir=/data/database/mysql --user=mysql
# 启动
/usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --wsrep-new-cluster &

查看密码

# root初始化密码被记录到log-error中
grep 'temporary password' /var/run/mysqld/mysqld.log

修改root密码,并配置SST认证账号

mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql> FLUSH PRIVILEGES;

启动其他节点

/etc/init.d/mysql start

各个加点都采用第一个几点修改的root密码登录

偷窥一下:

查看节点数:

show global status like 'wsrep_cluster_size';

查看集群状态:

show global status like 'wsrep%';

查看当前节点状态:

show global status like 'wsrep_cluster_status';

讲点小故事

重要的配置参数
  • wsrep_provider:指定Galera库路径,没有这个库,节点只是一个MySQL单实例,无法参与pxc集群

    • Debian or Ubuntu: /usr/lib/libgalera_smm.so
    • Red Hat or CentOS: /usr/lib64/galera3/libgalera_smm.so
  • wsrep_cluster_name:集群名称,所有节点相同

  • wsrep_cluster_address:集群所有节点IP地址列表

  • wsrep_node_name:节点名称,默认为主机名称

  • wsrep_node_address:节点IP地址

  • wsrep_sst_method:指定SST方法,推荐wsrep_sst_method=xtrabackup-v2

  • wsrep_sst_auth:SST认证账号密码

    • <sst_user>:<sst_pass>
    • 当第一个节点启动后手动创建该账号密码,并授予相应的权限
  • pxc_strict_mode:PXC严格控制模式,

一些名词解释
  • WS:write set写数据集,写/更新事务

  • IST:Incremental State Transfer 增量同步

  • SST:State Snapshot Transfe 全量同步。

    • SST支持的方法有:mysqldump,rsync ,xtrabackup
    • mysqldump,rsync同步需要READ LOCK, (SST applies FLUSH TABLES WITH READ LOCK command)
    • xtrabackup 在整个同步数据过程中不需要READ LOCK
    • 配置参数:wsrep_sst_method=xtrabackup-v2
  • UUID:节点状态改变及顺序的唯一标识

  • GTID:Global Transaction ID,由UUID和sequence number偏移量组成。wsrep api中定义的集群内部全局事务id,用于记录集群中发生状态改变的唯一标识以及队列中的偏移量。

  • WSRWP API:在DBMS库和wsrep provider之间提供接口

集群端口说明
  • 3306:数据库对外提供服务的端口

  • 4444:全量数据传输SST,集群数据同步端口,全量同步,新节点加入时启用该端口接受数据(DONOR节点接受新节点的请求后会启动一个随机端口主动来连接4444端口)

  • 4567:集群节点间相互通信的端口

  • 4568:增量数据同步IST,节点下线、重启后启用该端口接受数据(DONOR节点接受新节点的请求后会启动一个随机端口主动来连接4568端口)

MySQL PXC集群部署的更多相关文章

  1. MySQL Cluster 集群部署

    前言 此篇博客用以介绍 MySQL Cluster 集群部署方法 一.节点规划 序号 IP地址 节点名称 1 172.16.1.201 mysql-manage 2 172.16.1.202 mysq ...

  2. MySQL PXC集群安装配置

    1.关闭防火墙 [root@node04 ~]#systemctl disable firewalld [root@node04 ~]#systemctl stop firewalld [root@n ...

  3. MySQL数据库高可用集群搭建-PXC集群部署

    Percona XtraDB Cluster(下文简称PXC集群)提供了MySQL高可用的一种实现方法.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. PXC原理描述: 分布式 ...

  4. docker中mysql pxc集群

    PXC集群 https://hub.docker.com/r/percona/percona-xtradb-cluster 安装PXC镜像 下载镜像或者导入本地镜像 docker pull perco ...

  5. Galera Cluster mysql+keepalived集群部署

    1.卸载mysql 查找本机安装的mysqlrpm -qa | grep -i mysql --nodeps --force rpm -ev MySQL-server-5.6.15-1.el6.x86 ...

  6. mysql PXC集群方案总结

    同时写集群内的所有机器 写性能依赖最慢的那个机器 读性能提高X倍

  7. docker mysql pxc集群(percona-xtradb-cluster)

    docker pull percona/percona-xtradb-cluster docker tag percona/percona-xtradb-cluster pxc docker netw ...

  8. 02使用java脚本向Pxc集群写入数据

    使用java脚本向Pxc集群写入数据 批量写入pxc集群程序 导入mysql驱动包 # 批量插入数据的java脚本 package pxc_demo; import java.sql.Connecti ...

  9. openstack高可用集群21-生产环境高可用openstack集群部署记录

    第一篇 集群概述 keepalived + haproxy +Rabbitmq集群+MariaDB Galera高可用集群   部署openstack时使用单个控制节点是非常危险的,这样就意味着单个节 ...

随机推荐

  1. 96A

    #include <iostream> #include <string> #include <cctype> using namespace std; int m ...

  2. Java 基础 接口和多态

    接口 接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的 ...

  3. 【Java】-NO.16.EBook.4.Java.1.004-【疯狂Java讲义第3版 李刚】- 内部类

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.004-[疯狂Java讲义第3版 李刚]- 内部类 Style:EBook Series:Java S ...

  4. 【LeetCode每天一题】Find First and Last Position of Element in Sorted Array(找到排序数组中指定元素的开始和结束下标)

    Given an array of integers nums sorted in ascending order, find the starting and ending position of ...

  5. python 常见报错汇总

    python官方文档:https://docs.python.org/zh-cn/3/tutorial/index.html 1.indentationerror:unindent does not ...

  6. 21-Python3 模块

    fibo.py文件 def fib(n): a,b = 0,1 while b<n: print(b,end='') a,b = b,a+b print() def fib2(n): resul ...

  7. Golang package

    今天,灵感一现:不能一个文件干到底吧,那要是工程大了怎么办? 答案很简单,“包”啊 GO里的包,看起来很简单,但又不简单 一开始,我想当然的以为就是include 路径一样的问题 事实是,GO以GOP ...

  8. 从零开始一起学习SLAM | 为什么要用齐次坐标?

    在涉及到计算机视觉的几何问题中,我们经常看到齐次坐标这个术语.本文介绍一下究竟为什么要用齐次坐标?使用齐次坐标到底有什么好处? 什么是齐次坐标?简单的说:齐次坐标就是在原有坐标上加上一个维度: 使用齐 ...

  9. 3.十分钟搞定Vue搭建

    Vue推荐开发环境 Node.js 6.2.0.npm 3.8.9.webpack 1.13.vue-cli 2.5.1.webstrom2016 现在开始安装环境 安装nodejs 可以在终端里下载 ...

  10. 如何使用Apache log4net库与ASP.NET MVC 5日志记录

    在运行软件程序的时候,跟踪和监控日志是一种记录过程的好方法. 简介: 在运行软件程序的时候,跟踪和监控日志是一种记录过程的好方法.尤其在应用程序出错的时候,日志是我们最需要的文件.不管是在web,wi ...