• mysql集群搭建 (PXC)


    一、PXC介绍


    1.1 关于PXC

    PXC(Percona XtraDB Cluster)是MySQL数据库的一种高可用集群策略,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性。

    1.2 PXC的特性和优点

    • 完全兼容MySQL
    • 同步复制,事务要么在所有节点提交或者不提交
    • 多主复制,可以在任意节点进行写操作
    • 在从服务器上并行应用事件,真正意义上的并行复制
    • 节点自动配置,数据一致性,不再是异步复制
    • 故障切换:因为支持多点写入,所以在出现数据库故障时可以很容易的进行故障切换
    • 自动节点克隆:在新增节点或者停机维护时,增量数据或基础数据不需要人工手动备份提供,galera cluster会自动拉去在线节点数据,集群最终会变为一致

    1.3 PXC的局限和劣势

    • 复制只支持InnoDB引擎,其他存储引擎的更改不复制
    • 写入效率取决于节点中最慢的一台
    • 不能有效解决写缩放问题,所有的写操作都将发生在所有节点上
    • 每次新增节点都需要复制完整的数据库备份到新节点
    • 有多少个节点就有多少重复的数据
    • 不支持表级锁
    • query log日志不能存在表里面,必须存放在文件
    • 不支持在没有主键的表上DELETE操作,在没有主键的表上select limit也会在不同节点上返回不同的值
    • 由于集群是基于乐观的并发控制(optimistic concurrency control),事务冲突的情况可能会在commit阶段发生,当多个节点修改同时同一行数据,只有其中一个节点能够成功,失败的节点将终止,并且返回死锁
    • 不支持XA事务,因为XA事务有可能在commit的时候出现异常发生rollback
    • 如果DDL语句有问题,很可能会破坏整个集群,需要非常特殊的对待DDL语句

    二、PXC5.7安装


    官方文档

    [Note] 确认服务器的以下端口开放,并且未被其他进程占用,PXC需要使用这些端口来进行节点间沟通。

     - 3306
     - 4444
     - 4567
     - 4568
    Ubuntu或基于Debian
    如果已经安装了MySQL,apparmor配置文件可能会阻碍PXC节点间沟通
    sudo apt-get remove apparmor
    
    添加源
    sudo apt-get update
    sudo apt-get install -y wget gnupg2 lsb-release curl
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
    sudo apt-get update
    
    从apt安装
    sudo apt-get install percona-xtradb-cluster-57
    CentOS或Red Hat

    SELinux安全模块可以约束对PXC集群的数据访问。最好的解决方案是通过运行以下命令将模式从强制改为允许 setenforce 0

    • 从yum安装
      sudo yum install Percona-XtraDB-Cluster-57

    三、配置PXC


    停止MySQL服务
    sudo systemctl stop mysql
    

      

    示例节点
    NodeHostIP
    Node 1 pxc1 192.168.227.148
    Node 2 pxc2 192.168.227.149
    Node 3 pxc3 192.168.227.150
    配置第一个节点
    • Ubuntu或Debian添加到 /etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf

      [mysqld]
      wsrep_provider=/usr/lib/libgalera_smm.so
      wsrep_cluster_name=pxc-cluster # 所有节点保持一致
      
      wsrep_cluster_address=gcomm://192.168.227.148,192.168.227.149,192.168.227.150 # 所有节点IP,所有节点保持一致
      
      wsrep_node_name=pxc1 # 节点名称,唯一 
      wsrep_node_address=192.168.227.148 # 当前节点IP
      
      wsrep_sst_method=xtrabackup-v2  # PXC同步方式
      wsrep_sst_auth=sstuser:iiecas # PXC同步账号
      pxc_strict_mode=ENFORCING
      binlog_format=ROW 
      
      default_storage_engine=InnoDB 
      innodb_autoinc_lock_mode=2
    • CentOS或Red Hat添加到 /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

      [mysqld]
      wsrep_provider=/usr/lib64/galera3/libgalera_smm.so 
      wsrep_cluster_name=pxc-cluster # 所有节点保持一致
      
      wsrep_cluster_address=gcomm://192.168.227.148,192.168.227.149,192.168.227.150 # 所有节点IP,所有节点保持一致
      
      wsrep_node_name=pxc1 # 节点名称,唯一 
      wsrep_node_address=192.168.227.148 # 当前节点IP
      
      wsrep_sst_method=xtrabackup-v2  # PXC同步方式
      wsrep_sst_auth=sstuser:iiecas # PXC同步账号
      pxc_strict_mode=ENFORCING
      binlog_format=ROW 
      
      default_storage_engine=InnoDB 
      innodb_autoinc_lock_mode=2
      

        

    配置剩余节点

    剩余节点修改以下两项

     wsrep_node_name=pxc2 # 节点名称,唯一
     wsrep_node_address=192.168.227.149 # 当前节点IP
    启动第一个节点
    Ubuntu或Debian
    /etc/init.d/mysql bootstrap-pxc
    CentOS或Red Hat systemctl start mysql@bootstrap


    创建PXC同步账户 CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'iiecas'; GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost'; FLUSH PRIVILEGES;

    其他节点

    正常启动mysql

    service mysql start
    查看PXC状态

    可在mysql中通过执行以下命令查看PXC状态

    mysql>show status like 'wsrep%';
    +----------------------------------+--------------------------------------+
    | Variable_name                    | Value                                |
    +----------------------------------+--------------------------------------+
    | wsrep_local_state_uuid           | 75f17970-465a-11eb-bd1e-83dedd47aa3a |
    | wsrep_protocol_version           | 9                                    |
    | wsrep_last_applied               | 0                                    |
    | wsrep_last_committed             | 0                                    |
    | wsrep_replicated                 | 0                                    |
    | wsrep_replicated_bytes           | 0                                    |
    | wsrep_repl_keys                  | 0                                    |
    | wsrep_repl_keys_bytes            | 0                                    |
    | wsrep_repl_data_bytes            | 0                                    |
    | wsrep_repl_other_bytes           | 0                                    |
    | wsrep_received                   | 2                                    |
    | wsrep_received_bytes             | 144                                  |
    | wsrep_local_commits              | 0                                    |
    | wsrep_local_cert_failures        | 0                                    |
    | wsrep_local_replays              | 0                                    |
    | wsrep_local_send_queue           | 0                                    |
    | wsrep_local_send_queue_max       | 1                                    |
    | wsrep_local_send_queue_min       | 0                                    |
    | wsrep_local_send_queue_avg       | 0.000000                             |
    | wsrep_local_recv_queue           | 0                                    |
    | wsrep_local_recv_queue_max       | 2                                    |
    | wsrep_local_recv_queue_min       | 0                                    |
    | wsrep_local_recv_queue_avg       | 0.500000                             |
    | wsrep_local_cached_downto        | 0                                    |
    | wsrep_flow_control_paused_ns     | 0                                    |
    | wsrep_flow_control_paused        | 0.000000                             |
    | wsrep_flow_control_sent          | 0                                    |
    | wsrep_flow_control_recv          | 0                                    |
    | wsrep_flow_control_interval      | [ 100, 100 ]                         |
    | wsrep_flow_control_interval_low  | 100                                  |
    | wsrep_flow_control_interval_high | 100                                  |
    | wsrep_flow_control_status        | OFF                                  |
    | wsrep_cert_deps_distance         | 0.000000                             |
    | wsrep_apply_oooe                 | 0.000000                             |
    | wsrep_apply_oool                 | 0.000000                             |
    | wsrep_apply_window               | 0.000000                             |
    | wsrep_commit_oooe                | 0.000000                             |
    | wsrep_commit_oool                | 0.000000                             |
    | wsrep_commit_window              | 0.000000                             |
    | wsrep_local_state                | 4                                    |
    | wsrep_local_state_comment        | Synced                               |
    | wsrep_cert_index_size            | 0                                    |
    | wsrep_cert_bucket_count          | 22                                   |
    | wsrep_gcache_pool_size           | 1320                                 |
    | wsrep_causal_reads               | 0                                    |
    | wsrep_cert_interval              | 0.000000                             |
    | wsrep_open_transactions          | 0                                    |
    | wsrep_open_connections           | 0                                    |
    | wsrep_ist_receive_status         |                                      |
    | wsrep_ist_receive_seqno_start    | 0                                    |
    | wsrep_ist_receive_seqno_current  | 0                                    |
    | wsrep_ist_receive_seqno_end      | 0                                    |
    | wsrep_incoming_addresses         | 192.168.227.148:3306                 |
    | wsrep_cluster_weight             | 1                                    |
    | wsrep_desync_count               | 0                                    |
    | wsrep_evs_delayed                |                                      |
    | wsrep_evs_evict_list             |                                      |
    | wsrep_evs_repl_latency           | 0/0/0/0/0                            |
    | wsrep_evs_state                  | OPERATIONAL                          |
    | wsrep_gcomm_uuid                 | dc0142e3-465d-11eb-a10b-8a33e043e7a3 |
    | wsrep_cluster_conf_id            | 1                                    |
    | wsrep_cluster_size               | 1                                    |
    | wsrep_cluster_state_uuid         | 75f17970-465a-11eb-bd1e-83dedd47aa3a |
    | wsrep_cluster_status             | Primary                              |
    | wsrep_connected                  | ON                                   |
    | wsrep_local_bf_aborts            | 0                                    |
    | wsrep_local_index                | 0                                    |
    | wsrep_provider_name              | Galera                               |
    | wsrep_provider_vendor            | Codership Oy <info@codership.com>    |
    | wsrep_provider_version           | 3.45(ra60e019)                       |
    | wsrep_ready                      | ON                                   |
    +----------------------------------+--------------------------------------+
    

      


    Note

    实际使用中可搭配高可用代理服务和keepalived,若节点间网络连接不稳定可能出现脑裂情况。

  • 相关阅读:
    项目管理--项目干系人与组织
    项目管理--项目生命周期概述
    项目管理--简介
    算法学习之冒泡排序,6174问题
    算法学习之基础题
    PHP5.3.8连接Sql Server SQLSRV30
    解决:安装SQl 2008为SQL Server代理服务提供的凭据无效
    Sublime Text2不自动打开最近的项目
    unix网络编程之简介
    算法学习之函数
  • 原文地址:https://www.cnblogs.com/qianniao2122/p/14200783.html
Copyright © 2020-2023  润新知