zoukankan      html  css  js  c++  java
  • PXC快速入门

    1.快速入门

    实验环境:

    Node Host IP
    Node1 pxc1 192.168.70.61
    Node2 pxc2 192.168.70.62
    Node3 pxc3 192.168.70.63

    1.1 安装Percona-XtraDb-Cluster

    yum源:

    [percona]
    name=percona_repo
    baseurl = https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
    enabled = 1
    gpgcheck = 0
    
    yum -y install Percona-XtraDB-Cluster-57
    

    注意,装了Percona-XtraDB-Cluster就自带好了Percona-mysql,不要再装MySQL,不要再装MySQL,不要再装MySQL。不止一个人因为这个问题,PXC死活启动不了。典型错误提示:

    unknown variable 'wsrep_provider=/usr/lib64/libgalera_smm.so'
    

    1.2 提供配置文件

    第一个节点配置文件/etc/my.cnf

    [mysqld]
    server-id=100               # 各节点不同
    datadir=/data
    socket=/data/mysql.sock
    log-error=/data/error.log
    pid-file=/data/mysqld.pid
    log-bin=/data/master-bin
    log_slave_updates
    
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    wsrep_cluster_name=pxc-cluster
    wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63
    wsrep_node_name=pxc1               # 各节点不同
    wsrep_node_address=192.168.70.61   # 各节点不同
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth=sstuser:passw0rd
    pxc_strict_mode=ENFORCING
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    

    第二个节点配置文件

    [mysqld]
    server-id=110               # 各节点不同
    datadir=/data
    socket=/data/mysql.sock
    log-error=/data/error.log
    pid-file=/data/mysqld.pid
    log-bin=/data/master-bin
    log_slave_updates
    
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    wsrep_cluster_name=pxc-cluster
    wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63
    wsrep_node_name=pxc2               # 各节点不同
    wsrep_node_address=192.168.70.62   # 各节点不同
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth=sstuser:passw0rd
    pxc_strict_mode=ENFORCING
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    

    第三个节点配置文件

    [mysqld]
    server-id=120               # 各节点不同
    datadir=/data
    socket=/data/mysql.sock
    log-error=/data/error.log
    pid-file=/data/mysqld.pid
    log-bin=/data/master-bin
    log_slave_updates
    
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    wsrep_cluster_name=pxc-cluster
    wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63
    wsrep_node_name=pxc3               # 各节点不同
    wsrep_node_address=192.168.70.63   # 各节点不同
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth=sstuser:passw0rd
    pxc_strict_mode=ENFORCING
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2
    

    配置文件各项配置意义:

    • wsrep_provider:指定Galera库的路径
    • wsrep_cluster_name:Galera集群的名称
    • wsrep_cluster_address:Galera集群中各节点地址。地址使用组通信协议gcomm://(group communication)
    • wsrep_node_name:本节点在Galera集群中的名称
    • wsrep_node_address:本节点在Galera集群中的通信地址
    • wsrep_sst_method:state_snapshot_transfer(SST)使用的传输方法,可用方法有mysqldump、rsync和xtrabackup,前两者在传输时都需要对Donor加全局只读锁(FLUSH TABLES WITH READ LOCK),xtrabackup则不需要(它使用percona自己提供的backup lock)。强烈建议采用xtrabackup
    • wsrep_sst_auth:在SST传输时需要用到的认证凭据,格式为:"用户:密码"
    • pxc_strict_mode:是否限制PXC启用正在试用阶段的功能,ENFORCING是默认值,表示不启用
    • binlog_format:二进制日志的格式。Galera只支持row格式的二进制日志
    • default_storage_engine:指定默认存储引擎。Galera的复制功能只支持InnoDB
    • innodb_autoinc_lock_mode:只能设置为2,设置为0或1时会无法正确处理死锁问题

    1.3 引导Galera中的第一个节点

    引导启动Galera集群。

    /etc/init.d/mysql bootstrap-pxc
    # 或
    systemctl start mysql@bootstrap.service
    

    引导后,查看状态:

    mysql@pxc1> show status like 'wsrep%';
    +----------------------------+--------------------------------------+
    | Variable_name              | Value                                |
    +----------------------------+--------------------------------------+
    | wsrep_local_state_uuid     | c2883338-834d-11e2-0800-03c9c68e41ec |
    | ...                        | ...                                  |
    | wsrep_local_state          | 4                                    |
    | wsrep_local_state_comment  | Synced                               |
    | ...                        | ...                                  |
    | wsrep_cluster_size         | 1                                    |
    | wsrep_cluster_status       | Primary                              |
    | wsrep_connected            | ON                                   |
    | ...                        | ...                                  |
    | wsrep_ready                | ON                                   |
    +----------------------------+--------------------------------------+
    

    上述状态表示,该Galera集群中只有一个节点,状态为Synced(4),表示数据已同步完成(因为是第一个引导节点,无数据需要同步)。角色为Primary,且已经完全连接并准备好,connected和ready状态决定了该节点是否是Galera中的正式成员,正式成员才能向外提供MySQL服务。

    正确引导了第一个节点后,需要在第一个节点(Galera的初始化引导节点)上创建SST的认证用户,注意这个用户名和密码需要和配置文件中的对应。

    create user 'sstuser'@localhost identified by 'passw0rd';
    grant reload,lock tables,process,replication client on *.* to 'sstuser'@localhost;
    flush privileges;
    

    1.4 向Galera中加入第二、第三个节点

    加入节点非常简单,只需正常启动MySQL服务即可,在启动时会读取配置文件,并根据配置自动加入到对应的Galera集群中。

    #### 在第二个节点上执行
    /etc/init.d/mysql start
    
    #### 在第三个节点上执行
    /etc/init.d/mysql start
    

    查看各节点状态:

    mysql@pxc3> show status like 'wsrep%';
    +----------------------------+--------------------------------------+
    | Variable_name              | Value                                |
    +----------------------------+--------------------------------------+
    | wsrep_local_state_uuid     | c2883338-834d-11e2-0800-03c9c68e41ec |
    | ...                        | ...                                  |
    | wsrep_local_state          | 4                                    |
    | wsrep_local_state_comment  | Synced                               |
    | ...                        | ...                                  |
    | wsrep_cluster_size         | 3                                    |
    | wsrep_cluster_status       | Primary                              |
    | wsrep_connected            | ON                                   |
    | ...                        | ...                                  |
    | wsrep_ready                | ON                                   |
    +----------------------------+--------------------------------------+
    

    可见这两个节点已经完成了数据同步,且已经是Galera集群中的正式成员,可以向外提供MySQL服务。

    注意,一个节点加入到Galera集群有两种情况:新节点加入集群、暂时离组的成员再次加入集群。

    1.新节点加入Galera集群

    新节点加入集群时,需要从当前集群中选择一个Donor节点来同步数据,也就是所谓的state_snapshot_tranfer(SST)过程。SST同步数据的方式由选项wsrep_sst_method决定,一般选择的是xtrabackup。

    必须注意,新节点加入Galera时,会删除新节点上所有已有数据,再通过xtrabackup(假设使用的是该方式)从Donor处完整备份所有数据进行恢复。所以,如果数据量很大,新节点加入过程会很慢。而且,在一个新节点成为Synced状态之前,不要同时加入其它新节点,否则很容易将集群压垮。

    如果是这种情况,可以考虑使用wsrep_sst_method=rsync来做增量同步,既然是增量同步,最好保证新节点上已经有一部分数据基础,否则和全量同步没什么区别,且这样会对Donor节点加上全局read only锁。

    2.旧节点加入Galera集群

    如果旧节点加入Galera集群,说明这个节点在之前已经在Galera集群中呆过,有一部分数据基础,缺少的只是它离开集群时的数据。这时加入集群时,会采用IST(incremental snapshot transfer)传输机制,即使用增量传输。

    但注意,这部分增量传输的数据源是Donor上缓存在GCache文件中的,这个文件有大小限制,如果缺失的数据范围超过已缓存的内容,则自动转为SST传输。如果旧节点上的数据和Donor上的数据不匹配(例如这个节点离组后人为修改了一点数据),则自动转为SST传输。

    关于GCache以及Galera是如何判断数据状态的,本文不展开描述,可参见Understanding GCache in Galera

    1.5 验证Galera集群是否正确工作

    可在不同节点上写入数据、不同节点上查询数据,看看个节点上数据能否同步。

  • 相关阅读:
    洛谷 简单字符串 'P1055ISBN号码' 问题
    P1424
    洛谷训练P1008(循环+暴力)
    C语言中一些知识点
    二叉树的基本功能实现方法(C++)
    值传递,引用传递,指针传递
    istringstream、ostringstream、stringstream类介绍
    类模板的友元
    C++ 标准库和标准模板库(STL)
    常用数据类型对应字节数
  • 原文地址:https://www.cnblogs.com/f-ck-need-u/p/9364877.html
Copyright © 2011-2022 走看看