阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Percona XtraDB Cluster 初探

119次阅读
没有评论

共计 6579 个字符,预计需要花费 17 分钟才能阅读完成。

Percona XtraDB Cluster(下文简称 PXC 集群)提供了 MySQL 高可用的一种实现方法。PXC 集群以节点组成(推荐至少 3 节点,后面会讨论两节点的情况),每个节点都是基于常规的 MySQL/Percona Server,意味着你可以从集群中分离出某节点单独使用。集群中每个节点都包含完整的数据。

PXC 集群主要由两部分组成:Percona Server with XtraDB 和 Write Set Replication patches(使用了 Galera library,一个通用的用于事务型应用的同步、多主复制插件)。

PXC 的特性和优点:

  • 同步复制
  • 支持多主复制
  • 支持并行复制
  • 相比其他高可用方案更像真正意义上的高可用

PXC 的局限和劣势:

  • 当前版本(5.6.20)的复制只支持 InnoDB 引擎,其他存储引擎的更改不复制。然而,DDL(Data Definition Language)语句在 statement 级别被复制,并且,对 mysql.* 表的更改会基于此被复制。例如 CREATE USER…语句会被复制,但是 INSERT INTO mysql.user…语句则不会。(也可以通过 wsrep_replicate_myisam 参数开启 myisam 引擎的复制,但这是一个实验性的参数)
  • 由于 PXC 集群内部一致性控制的机制,事务有可能被终止,原因如下:集群允许在两个节点上通知执行操作同一行的两个事务,但是只有一个能执行成功,另一个会被终止,同时集群会给被终止的客户端返回死锁错误(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK))
  • 写入效率取决于节点中最弱的一台,因为 PXC 集群采用的是强一致性原则,一个更改操作在所有节点都成功才算执行成功

下面从安装部署和功能和性能测试三个方面开始 PXC 之旅。

安装部署

实验环境:三台 server(硬件配置相同),信息如下:

node #1
    hostname: percona1
    IP: 192.168.1.35
node #2
    hostname: percona2
    IP: 192.168.1.36
node #3
    hostname: percona3
    IP: 192.168.1.37

注意:Firewall has been set up to allow connecting to ports 3306, 4444,4567 and 4568
SELinux isdisabled 如果不关闭 SELinux,启动其他(node1 之外)节点时,错误日志里会记录“[ERROR] WSREP:Permission denied”

在三台 server 安装 Percona-XtraDB-Cluster-56

  1. 安装 epel 源
    yum install http://dl.Fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
    (包含比较全比较新的软件源。最关键的是包含 PreconaXtraDB Cluster 所依赖的 socat 软件)
    vi /etc/yum.repos.d/epel.repo(修改 epel 原配置以可用 epel 源)
    Percona XtraDB Cluster 初探
    将其中 baseurl 行的注释去掉,同时将 mirror 行注释

  2. 安装 Precona XtraDB Cluster 所需要的扩展包,以防在后期配置时候报错
    yum install -y cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bisonlibtool ncurses5-devel boost

  3. 安装配置 Precona 官方 yum 源
    yum install http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
  4. 安装 socat
    socat is a relay for bidirectional data transfer between two independentdata channels.(Socat 是一个在两个独立数据的双向传输之间起到中继作用的软件)

    配置好 epel 源之后,可直接执行 yum install socat*
    若无法 yum 安装 socat,则按照以下步骤编译安装

    wget  http://www.dest-unreach.org/socat/download/socat-1.7.2.4.tar.gz
    tar zxvf  socat-1.7.2.4.tar.gz
    ./configure
    Make && make install
  5. 安装 perl 组件(xtrabackup 需要的组件)
    yum install perl-DBD-MySQL perl-DBI perl-Time-HiRes

  6. 安装 Percona-XtraDB-Cluster 及其相关组件
    yum install Percona-XtraDB-Cluster-56(如下图)
    Percona XtraDB Cluster 初探

初始化 Percona-XtraDB-Cluster 集群

在任意节点(一般为 node1)上执行集群的初始化操作
创建 /etc/my.cnf,内容如下

[mysqld]
datadir=/var/lib/mysql
user=mysql
# Path to Galeralibrary
wsrep_provider=/usr/lib64/libgalera_smm.so
# Cluster connectionURL contains the IPs of node#1, node#2 and node#3---- 所有节点的 ip
# 第一次启动 node1 节点时,此处不写各节点 IP,需写成下面一行配置
wsrep_cluster_address=gcomm://
# 第一次启动 node1(初始化集群)完成后,此处需要改成下面一行配置
#wsrep_cluster_address=gcomm://192.168.1.35,192.168.1.36,192.168.1.37
# In order for Galerato work correctly binlog format should be ROW
binlog_format=ROW
# MyISAM storageengine has only experimental support
default_storage_engine=InnoDB
# This changes howInnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2
# Node #1 address---- 本机 ip
wsrep_node_address=192.168.1.35
# SST method---- 节点间同步的方式
wsrep_sst_method=xtrabackup-v2
# Cluster name
wsrep_cluster_name=my_CentOS_cluster
# Authentication forSST method---- 来做节点间数据同步的账号密码
wsrep_sst_auth="sstuser:s3cret"

(其他 mysql 相关参数绝大多数也可以直接在配置文件里添加)

注意:第一次启动 node1(初始化集群)时,配置文件里 wsrep_cluster_address=gcomm:// 不需加上各节点 IP, 否则其他节点会无法启动;当初始化完成后,需将此处修改为加上各节点 IP

在 node1 执行 /etc/init.d/mysql bootstrap-pxc 来初始化集群,如图
Percona XtraDB Cluster 初探

然后再修改配置文件 my.cnf 将wsrep_cluster_address=gcomm:// 行改为 wsrep_cluster_address=gcomm://192.168.1.35,192.168.1.36,192.168.1.37

然后,执行service mysql restart 至此,集群初始化完成,并且 node1 启动

置 mysql root 密码
mysql@percona1>UPDATE mysql.user SET password=PASSWORD("Passw0rd") whereuser=’root’;
mysql@percona1>FLUSH PRIVILEGES;
设置用于复制的账户密码
mysql@percona1>GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO’sstuser’@’localhost’identified by‘s3cret’;

配置 node2、node3 并启动

将 node1 的 /etc/my.cnf 内容拷贝至 node2 和 node3,并修改其中 wsrep_node_address=192.168.1.35 改为本机 ip。

然后启动 node2、node3。执行 service mysql start
注意:node2、node3 会从 node1 同步账号设置的更改

配置成功以后如果集群内所有节点实例均 crash 后,再启动时都需要选择一个存有最新正 确数据的节点作为主节点,执 行 /etc/init.d/mysql bootstrap-pxc 启动;然后再启动他节点。

写入效率初测

测试方法为
1. 将三个节点分别作为单独的 server 导入一个 sql 文件,执行三次取时间平均值

time mysql -uroot -pxxx system < /system.sql
平均时间约为 6m20s

2. 开启完整集群,在三个节点分别执行一遍导入操作,取三次执行时间平均值

平均时间约为 7m50s

经过初步测试写性能 PXC 集群相比单 server 下降约 12%。

部分参数调优

  1. Variable wsrep_slave_threads:复制线程的数量,galera 支持真正的并行复制,适当增大此值可以在复制时获得更好的吞吐量,如果更改此值后遇到复制的某些问题,尝试将此值改回 1,查看是否解决。(默认 1)

  2. wsrep_provider_options=”gcache.size=512M”,调节 galera 的缓存大小,或许对减少 IO 有帮助

  3. variable gcache.mem_size

  4. variable gcache.size 此参数定义作为‘IST 增量同步’的内容源的 galera.cache 文件的大小。此文件设置的大些以便节点重新加入集群式更有可能采用 IST 而非 SST。(默认 128M)

  5. variable gcs.fc_master_slave 此变量指定集群中是否只有一个 master 节点

  6. variable pc.weight This variable specifies thenode weight that’sgoing to be used for Weighted Quorumcalculations. Default Value 1

  7. innodb_flush_log_at_trx_commit
    为 0 时:log buffer 每秒向 logfile 刷新一次,同时 log file 每秒执行一次所记录语句,以使数据持久化。
    为 1 时:默认值。每次事务提交后,log buffer 向 log file 刷新一次,同时 log file 执行一次数据持久化操作。
    为 2 时:每次事务提交后,log buffer 向 log file 刷新一次,但是从 log file 向磁盘做数据持久化的操作是每秒执行一次
    将此值改为 0 后,插入全量测试数据的时间有了质的飞越

Hapeoxy 代理

上文主要介绍了 PXC 集群本身的内容,PXC 作为一个集群,需要前端配以代理服务器,做负载均衡,才能真正实现其高可用的价值。Percona 官方推荐用 haproxy 作为前端代理,下面介绍一下 haproxy 的简要配置:

个人感觉 haproxy 配置上比 lvs 相对简单,但功能并不逊色,我试验环境的 haproxy 配置文件如下

#---------------------------------------------------------------------
# Example configuration for a possibleweb application.  See the
# full configuration options online.
#  http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
   # to have these messages end up in /var/log/haproxy.log you will
   # need to:
   # 1) configure syslog to accept network log events.  This is done
   #    by adding the '-r' option tothe SYSLOGD_OPTIONS in
   #    /etc/sysconfig/syslog
   # 2) configure local2 events to go to the /var/log/haproxy.log
   #   file. A line like thefollowing can be added to
   #   /etc/sysconfig/syslog
   #
   #    local2.*                       /var/log/haproxy.log
   #
   log         127.0.0.1      local0
   log         127.0.0.1      local1 notice
   chroot      /var/lib/haproxy
   pidfile     /var/run/haproxy.pid
   maxconn     4000
   user        haproxy
   group       haproxy
   daemon
   # turn on stats unix socket
   stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
   mode                    http
   log                     global
   option                  tcplog
   option                 dontlognull
#  option http-server-close
#  option forwardfor       except127.0.0.0/8
   option                  redispatch
   retries                 3
   maxconn                 2000
   timeout connect         5s
   timeout client          50s
   timeout server          50s
#  timeout http-keep-alive 10s
   timeout check           10s
listen mysql-cluster 0.0.0.0:3306
    mode tcp
    balance roundrobin
    server node1 192.168.1.35:3306 check
    server node2 192.168.1.36:3306 check
    server node3 192.168.1.37:3306 check
# 建议首先设置 haproxy 的监控界面,便于直观的观察后端节点是否在线
listen status 192.168.1.34:8080
     stats enable 
     stats uri /status
     stats auth admin:xxxx
     stats realm (haproxy\ statistic)

如何搭建 Percona XtraDB Cluster 集群  http://www.linuxidc.com/Linux/2016-06/132700.htm

Percona XtraDB Cluster 的详细介绍:请点这里
Percona XtraDB Cluster 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/136217.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计6579字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中