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

Percona XtraDB Cluster 初探

459次阅读
没有评论

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

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7965983
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...