CentOS7 安装 Percona XtraDB Cluster

  • 关闭 SeLinux

    [all]

    setenforce 0
    sed -i 's/^SELINUX *=.*/SELINUX=disabled/g' /etc/selinux/config
  • 端口放行

    [all]

    firewall-cmd --add-port=3306/tcp --add-port=4444/tcp --add-port=4567/tcp --add-port=4568/tcp
    firewall-cmd --add-port=3306/tcp --add-port=4444/tcp --add-port=4567/tcp --add-port=4568/tcp --permanent
  • 安装percona

    [all]

    yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
  • 安装软件包

    [all]

    yum install Percona-XtraDB-Cluster-57
  • 配置集群

    [all]

    # 指定Galera库的路径
    # Debian或Ubuntu: /usr/lib/libgalera_smm.so
    # 红帽或CentOS: /usr/lib64/galera3/libgalera_smm.so
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'wsrep_provider' '/usr/lib64/galera3/libgalera_smm.so'
    
    # 默认情况下,Percona XtraDB群集使用Percona XtraBackup进行状态快照传输(SST)。wsrep_sst_method=xtrabackup-v2强烈建议进行设置。此方法需要在初始节点上设置用户SST。使用wsrep_sst_auth变量提供SST用户凭据。
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'wsrep_sst_method' 'xtrabackup-v2'
    
    # 指定认证凭证SST 作为<sst_user>:<sst_pass>。您必须在引导第一个节点时创建此用户 并为其提供必要的权限
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'wsrep_sst_auth' 'sstuser:passw0rd'
    
    # PXC严格模式默认启用并设置为ENFORCING,这会阻止在Percona XtraDB Cluster中使用实验和不支持的功能
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'pxc_strict_mode' 'ENFORCING'
    
    # Galera仅支持行级复制,因此请设置binlog_format=ROW
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'binlog_format' 'ROW'
    
    # Galera完全支持InnoDB存储引擎。它无法与MyISAM或任何其他非事务性存储引擎一起正常工作。将此变量设置为default_storage_engine=InnoDB。
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'default_storage_engine' 'InnoDB'
    
    # Galera仅支持2InnoDB的interleaved()锁定模式。设置传统(0)或连续(1)锁定模式可能会导致复制因未解决的死锁而失败。将此变量设置为innodb_autoinc_lock_mode=2
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'innodb_autoinc_lock_mode' '2'
    
    # 指定群集的逻辑名称。对于群集中的所有节点,它必须相同
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'wsrep_cluster_name' 'pxc-cluster'
    
    # 指定群集中节点的IP地址。节点加入群集至少需要一个,但建议列出所有节点的地址。这样,如果列表中的第一个节点不可用,则加入节点可以使用其他地址。
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'wsrep_cluster_address' 'gcomm://10.0.100.61,10.0.100.62,10.0.100.63'

    [pcx1]

    # 指定每个节点的逻辑名称。如果未指定此变量,则将使用主机名
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'wsrep_node_name' 'pxc1'
    
    # 指定此特定节点的IP地址
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'wsrep_node_address' '10.0.100.61'

    [pcx2]

    # 指定每个节点的逻辑名称。如果未指定此变量,则将使用主机名
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'wsrep_node_name' 'pxc2'
    
    # 指定此特定节点的IP地址
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'wsrep_node_address' '10.0.100.62'

    [pcx3]

    # 指定每个节点的逻辑名称。如果未指定此变量,则将使用主机名
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'wsrep_node_name' 'pxc3'
    
    # 指定此特定节点的IP地址
    crudini --set /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 'mysqld' 'wsrep_node_address' '10.0.100.63'
  • 引导集群启动

    [pcx1]

    systemctl restart [email protected]
    systemctl status [email protected]
  • 查看初始化密码

    [pcx1]

    sudo grep 'temporary password' /var/log/mysqld.log
  • 安全设置

    [pcx1]

    mysql_secure_installation
  • 添加 SST 用户

    [pcx1]

    在配置文件的wsrep_sst_auth项中配置的用户名和密码

    mysql -uroot -p
    
    CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'passw0rd';
    GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
    FLUSH PRIVILEGES;
  • 依次启动其它节点

    [other]

    systemctl restart mysqld.service
    systemctl status mysqld.service

    注意:连接数据库,查询当前节点状态wsrep_local_state_comment,结果为Synced才能在下一个节点启动数据库。

    • 重启第一节点

      [pcx1]

      systemctl stop [email protected]
      systemctl restart mysqld.service
      systemctl status mysqld.service

最后更新于