zoukankan      html  css  js  c++  java
  • MySQL之PXC

    Galera Cluster特点

    多主架构:真正的多点读写的集群,在任何时候读写数据,都是最新的
    同步复制:集群不同节点之间数据同步,没有延迟,在数据库挂掉之后,数据不会丢失
    并发复制:从节点APPLY数据时,支持并行执行,更好的性能
    故障切换:在出现数据库故障时,因支持多点写入,切换容易
    热插拔:在服务期间,如果数据库挂了,只要监控程序发现的够快,不可服务时间就会非常少。在
    节点故障期间,节点本身对集群的影响非常小
    自动节点克隆:在新增节点,或者停机维护时,增量数据或者基础数据不需要人工手动备份提供,
    Galera Cluster会自动拉取在线节点数据,最终集群会变为一致
    对应用透明:集群的维护,对应用程序是透明的
    

    Galera Cluster 缺点

    由于DDL 需全局验证通过,则集群性能由集群中最差性能节点决定(一般集群节点配置都是一样
    的)
    新节点加入或延后较大的节点重新加入需全量拷贝数据(SST,State Snapshot Transfer),作为
    donor( 贡献者,如: 同步数据时的提供者)的节点在同步过程中无法提供读写
    只支持innodb存储引擎的表
    

    PXC最常使用如下4个端口号:

    3306:数据库对外服务的端口号
    4444:请求SST的端口号
    4567:组成员之间进行沟通的端口号
    4568:用于传输IST的端口号
    

    下面是MyCat结合PXC的架构图

    PXC:Percona XtraDB Cluster,是Percona对Galera的实现
    参考仓库:

    https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
    

    案例:Percona XtraDB Cluster(PXC 5.7)


    1 环境准备

    四台主机

    pxc1:172.31.0.7
    pxc2:172.31.0.17
    pxc3:172.31.0.27
    pxc4:172.31.0.37
    

    OS 版本目前不支持CentOS 8

    关闭防火墙和SELinux,保证时间同步
    注意:如果已经安装MySQL,必须卸载

    此处使用清华大学yum源,官方源太慢了

    [root@localhost ~]# vim /etc/yum.repos.d/pxc.repo
    [percona]
    name=percona-repo
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
    enabled=1
    gpgcheck=0
    
    # 把镜像源拷贝到远端服务器
    [root@localhost ~]# scp /etc/yum.repos.d/pxc.repo 172.31.0.17:/etc/yum.repos.d/
    [root@localhost ~]# scp /etc/yum.repos.d/pxc.repo 172.31.0.27:/etc/yum.repos.d/
    
    # 在三个节点都安装好PXC 5.7
    [root@localhost ~]# yum install Percona-XtraDB-Cluster-57 -y
    [root@localhost ~]# yum install Percona-XtraDB-Cluster-57 -y
    [root@localhost ~]# yum install Percona-XtraDB-Cluster-57 -y
    

    在各个节点上分别配置mysql及集群配置文件

    /etc/my.cnf为主配置文件,当前版本中,其余的配置文件都放在/etc/percona-xtradb-cluster.conf.d目
    录里,包括mysqld.cnf,mysqld_safe.cnf,wsrep.cnf 三个文件

    # 主配置文件不需要修改
    [root@localhost ~]# vim /etc/my.cnf
    
    # 各个节点改id号即可
    [root@localhost ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf 
    # Template my.cnf for PXC
    # Edit to your requirements.
    [client]
    socket=/var/lib/mysql/mysql.sock
    
    [mysqld]
    server-id=17
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    log-bin
    log_slave_updates
    expire_logs_days=7
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    # PXC的配置文件必须修改
    # 172.31.0.17
    [root@localhost ~]# grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 
    [mysqld]
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    wsrep_cluster_address=gcomm://172.31.0.17,172.31.0.27,172.31.0.37   # 各个节点IP
    binlog_format=ROW
    default_storage_engine=InnoDB
    wsrep_slave_threads= 8
    wsrep_log_conflicts
    innodb_autoinc_lock_mode=2
    wsrep_node_address=172.31.0.17  # 本机ip
    wsrep_cluster_name=pxc-cluster-m520
    wsrep_node_name=pxc-cluster-node-1-m520 # 各个节点指定的ID
    pxc_strict_mode=ENFORCING
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth="sstuser:s3cretPass"
    
    # 172.31.0.27
    [root@localhost ~]# grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 
    [mysqld]
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    wsrep_cluster_address=gcomm://172.31.0.17,172.31.0.27,172.31.0.37
    binlog_format=ROW
    default_storage_engine=InnoDB
    wsrep_slave_threads= 8
    wsrep_log_conflicts
    innodb_autoinc_lock_mode=2
    wsrep_node_address=172.31.0.27
    wsrep_cluster_name=pxc-cluster-m520
    wsrep_node_name=pxc-cluster-node-2-m520   # 各个节点指定的ID
    pxc_strict_mode=ENFORCING
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth="sstuser:s3cretPass" # 取消注释
    
    # 172.31.0.37
    [root@localhost ~]# grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 
    [mysqld]
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    wsrep_cluster_address=gcomm://172.31.0.17,172.31.0.27,172.31.0.27
    binlog_format=ROW
    default_storage_engine=InnoDB
    wsrep_slave_threads= 8
    wsrep_log_conflicts
    innodb_autoinc_lock_mode=2
    wsrep_node_address=172.31.0.37
    wsrep_cluster_name=pxc-cluster-m520
    wsrep_node_name=pxc-cluster-node-3-m520
    pxc_strict_mode=ENFORCING
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth="sstuser:s3cretPass"
    

    注意:尽管Galera Cluster不再需要通过binlog的形式进行同步,但还是建议在配置文件中开启二进制日
    志功能,原因是后期如果有新节点需要加入,老节点通过SST全量传输的方式向新节点传输数据,很可
    能会拖垮集群性能,所以让新节点先通过binlog方式完成同步后再加入集群会是一种更好的选择

    配置文件各项配置意义

    配置 说明
    wsrep_provider 指定Galera库的路径
    wsrep_cluster_name Galera集群的名称
    wsrep_cluster_address Galera集群中各节点地址。地址使用组通信协议gcomm://(groupcommunication)
    wsrep_node_name 本节点在Galera集群中的名称
    wsrep_node_address 本节点在Galera集群中的通信地址
    wsrep_sst_method state_snapshot_transfer(SST)使用的传输方法,可用方法有mysqldump、rsync和xtrabackup,前两者在传输时都需要对Donor加全局只读锁(FLUSH TABLES WITH READLOCK),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时会无法正确处理死锁问题

    启动PXC集群中任意的节点可以作为第一节点

    [root@localhost ~]# systemctl start mysql@bootstrap.service
    
    # 查看端口有4567和3306
    [root@localhost ~]# ss -tunl
    Netid  State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
    tcp    LISTEN     0      128               *:22                            *:*                  
    tcp    LISTEN     0      128               *:4567                          *:*                  
    tcp    LISTEN     0      100       127.0.0.1:25                            *:*                  
    tcp    LISTEN     0      80               :::3306                         :::*                  
    tcp    LISTEN     0      128              :::22                           :::*                  
    tcp    LISTEN     0      100             ::1:25                           :::* 
    
    # 查看root密码
    [root@localhost ~]# grep "temporary password" /var/log/mysqld.log 
    2021-05-22T13:50:17.837284Z 1 [Note] A temporary password is generated for root@localhost: +Egpg69fijV%
    
    [root@localhost ~]# mysql -uroot -p'+Egpg69fijV%'
    
    # 修改root密码
    mysql> alter user 'root'@'localhost' identified by 'centos';
    Query OK, 0 rows affected (0.00 sec)
    
    # 创建相关用户并授权
    mysql> create user 'sstuser'@'localhost' identified by 's3cretPass';
    Query OK, 0 rows affected (0.01 sec)
    
    # 授权
    mysql> grant reload,lock tables,process,replication client on *.* to 'sstuser'@'localhost';
    Query OK, 0 rows affected (0.00 sec)
    
    # 查看相关变量
    mysql> show variables like 'wsrep%'G
    *************************** 1. row ***************************
    Variable_name: wsrep_OSU_method
            Value: TOI
    *************************** 2. row ***************************
    Variable_name: wsrep_RSU_commit_timeout
            Value: 5000
    *************************** 3. row ***************************
    Variable_name: wsrep_auto_increment_control
            Value: ON
    *************************** 4. row ***************************
    Variable_name: wsrep_causal_reads
            Value: OFF
    *************************** 5. row ***************************
    Variable_name: wsrep_certification_rules
            Value: strict
    *************************** 6. row ***************************
    Variable_name: wsrep_certify_nonPK
            Value: ON
    *************************** 7. row ***************************
    Variable_name: wsrep_cluster_address
            Value: gcomm://172.31.0.17,172.31.0.27,172.31.0.37
    *************************** 8. row ***************************
    Variable_name: wsrep_cluster_name
            Value: pxc-cluster
    *************************** 9. row ***************************
    Variable_name: wsrep_convert_LOCK_to_trx
            Value: OFF
    *************************** 10. row ***************************
    Variable_name: wsrep_data_home_dir
            Value: /var/lib/mysql/
    *************************** 11. row ***************************
    Variable_name: wsrep_dbug_option
            Value: 
    *************************** 12. row ***************************
    Variable_name: wsrep_debug
            Value: OFF
    *************************** 13. row ***************************
    Variable_name: wsrep_desync
            Value: OFF
    *************************** 14. row ***************************
    Variable_name: wsrep_dirty_reads
            Value: OFF
    *************************** 15. row ***************************
    Variable_name: wsrep_drupal_282555_workaround
            Value: OFF
    *************************** 16. row ***************************
    Variable_name: wsrep_forced_binlog_format
            Value: NONE
    *************************** 17. row ***************************
    Variable_name: wsrep_load_data_splitting
            Value: ON
    *************************** 18. row ***************************
    Variable_name: wsrep_log_conflicts
            Value: ON
    *************************** 19. row ***************************
    Variable_name: wsrep_max_ws_rows
            Value: 0
    *************************** 20. row ***************************
    Variable_name: wsrep_max_ws_size
            Value: 2147483647
    *************************** 21. row ***************************
    Variable_name: wsrep_mode
            Value: 
    *************************** 22. row ***************************
    Variable_name: wsrep_node_address
            Value: 172.31.0.17
    *************************** 23. row ***************************
    Variable_name: wsrep_node_incoming_address
            Value: AUTO
    *************************** 24. row ***************************
    Variable_name: wsrep_node_name
            Value: pxc-cluster-node-1
    *************************** 25. row ***************************
    Variable_name: wsrep_notify_cmd
            Value: 
    *************************** 26. row ***************************
    Variable_name: wsrep_on
            Value: ON
    *************************** 27. row ***************************
    Variable_name: wsrep_preordered
            Value: OFF
    *************************** 28. row ***************************
    Variable_name: wsrep_provider
            Value: /usr/lib64/galera3/libgalera_smm.so
    *************************** 29. row ***************************
    Variable_name: wsrep_provider_options
            Value: base_dir = /var/lib/mysql/; base_host = 172.31.0.17; base_port = 4567; cert.log_conflicts = no; cert.optimistic_pa = yes; debug = no; evs.auto_evict = 0; evs.causal_keepalive_period = PT1S; evs.debug_log_mask = 0x1; evs.delay_margin = PT1S; evs.delayed_keep_period = PT30S; evs.inactive_check_period = PT0.5S; evs.inactive_timeout = PT15S; evs.info_log_mask = 0; evs.install_timeout = PT7.5S; evs.join_retrans_period = PT1S; evs.keepalive_period = PT1S; evs.max_install_timeouts = 3; evs.send_window = 10; evs.stats_report_period = PT1M; evs.suspect_timeout = PT5S; evs.use_aggregate = true; evs.user_send_window = 4; evs.version = 0; evs.view_forget_timeout = P1D; gcache.dir = /var/lib/mysql/; gcache.freeze_purge_at_seqno = -1; gcache.keep_pages_count = 0; gcache.keep_pages_size = 0; gcache.mem_size = 0; gcache.name = /var/lib/mysql//galera.cache; gcache.page_size = 128M; gcache.recover = no; gcache.size = 128M; gcomm.thread_prio = ; gcs.fc_debug = 0; gcs.fc_factor = 1; gcs.fc_limit = 100; gcs.fc_master_slave = no; 
    *************************** 30. row ***************************
    Variable_name: wsrep_recover
            Value: OFF
    *************************** 31. row ***************************
    Variable_name: wsrep_reject_queries
            Value: NONE
    *************************** 32. row ***************************
    Variable_name: wsrep_replicate_myisam
            Value: OFF
    *************************** 33. row ***************************
    Variable_name: wsrep_restart_slave
            Value: OFF
    *************************** 34. row ***************************
    Variable_name: wsrep_retry_autocommit
            Value: 1
    *************************** 35. row ***************************
    Variable_name: wsrep_slave_FK_checks
            Value: ON
    *************************** 36. row ***************************
    Variable_name: wsrep_slave_UK_checks
            Value: OFF
    *************************** 37. row ***************************
    Variable_name: wsrep_slave_threads
            Value: 8
    *************************** 38. row ***************************
    Variable_name: wsrep_sst_allowed_methods
            Value: mysqldump,rsync,skip,xtrabackup,xtrabackup-v2
    *************************** 39. row ***************************
    Variable_name: wsrep_sst_auth
            Value: ********
    *************************** 40. row ***************************
    Variable_name: wsrep_sst_donor
            Value: 
    *************************** 41. row ***************************
    Variable_name: wsrep_sst_donor_rejects_queries
            Value: OFF
    *************************** 42. row ***************************
    Variable_name: wsrep_sst_method
            Value: xtrabackup-v2
    *************************** 43. row ***************************
    Variable_name: wsrep_sst_receive_address
            Value: AUTO
    *************************** 44. row ***************************
    Variable_name: wsrep_start_position
            Value: 00000000-0000-0000-0000-000000000000:-1
    *************************** 45. row ***************************
    Variable_name: wsrep_sync_wait
            Value: 0
    45 rows in set (0.01 sec)
    
    
    # 查看相关状态变量
    mysql> show status like 'wsrep%'G
    *************************** 1. row ***************************
    Variable_name: wsrep_local_state_uuid
            Value: a9af3ceb-bb04-11eb-8cd1-d26e25aee8cd
    *************************** 2. row ***************************
    Variable_name: wsrep_protocol_version
            Value: 9
    *************************** 3. row ***************************
    Variable_name: wsrep_last_applied
            Value: 3
    *************************** 4. row ***************************
    Variable_name: wsrep_last_committed
            Value: 3
    *************************** 5. row ***************************
    Variable_name: wsrep_replicated
            Value: 3
    *************************** 6. row ***************************
    Variable_name: wsrep_replicated_bytes
            Value: 752
    *************************** 7. row ***************************
    Variable_name: wsrep_repl_keys
            Value: 3
    *************************** 8. row ***************************
    Variable_name: wsrep_repl_keys_bytes
            Value: 96
    *************************** 9. row ***************************
    Variable_name: wsrep_repl_data_bytes
            Value: 460
    *************************** 10. row ***************************
    Variable_name: wsrep_repl_other_bytes
            Value: 0
    *************************** 11. row ***************************
    Variable_name: wsrep_received
            Value: 2
    *************************** 12. row ***************************
    Variable_name: wsrep_received_bytes
            Value: 153
    *************************** 13. row ***************************
    Variable_name: wsrep_local_commits
            Value: 0
    *************************** 14. row ***************************
    Variable_name: wsrep_local_cert_failures
            Value: 0
    *************************** 15. row ***************************
    Variable_name: wsrep_local_replays
            Value: 0
    *************************** 16. row ***************************
    Variable_name: wsrep_local_send_queue
            Value: 0
    *************************** 17. row ***************************
    Variable_name: wsrep_local_send_queue_max
            Value: 1
    *************************** 18. row ***************************
    Variable_name: wsrep_local_send_queue_min
            Value: 0
    *************************** 19. row ***************************
    Variable_name: wsrep_local_send_queue_avg
            Value: 0.000000
    *************************** 20. row ***************************
    Variable_name: wsrep_local_recv_queue
            Value: 0
    *************************** 21. row ***************************
    Variable_name: wsrep_local_recv_queue_max
            Value: 2
    *************************** 22. row ***************************
    Variable_name: wsrep_local_recv_queue_min
            Value: 0
    *************************** 23. row ***************************
    Variable_name: wsrep_local_recv_queue_avg
            Value: 0.500000
    *************************** 24. row ***************************
    Variable_name: wsrep_local_cached_downto
            Value: 1
    *************************** 25. row ***************************
    Variable_name: wsrep_flow_control_paused_ns
            Value: 0
    *************************** 26. row ***************************
    Variable_name: wsrep_flow_control_paused
            Value: 0.000000
    *************************** 27. row ***************************
    Variable_name: wsrep_flow_control_sent
            Value: 0
    *************************** 28. row ***************************
    Variable_name: wsrep_flow_control_recv
            Value: 0
    *************************** 29. row ***************************
    Variable_name: wsrep_flow_control_interval
            Value: [ 100, 100 ]
    *************************** 30. row ***************************
    Variable_name: wsrep_flow_control_interval_low
            Value: 100
    *************************** 31. row ***************************
    Variable_name: wsrep_flow_control_interval_high
            Value: 100
    *************************** 32. row ***************************
    Variable_name: wsrep_flow_control_status
            Value: OFF
    *************************** 33. row ***************************
    Variable_name: wsrep_flow_control_active
            Value: false
    *************************** 34. row ***************************
    Variable_name: wsrep_flow_control_requested
            Value: false
    *************************** 35. row ***************************
    Variable_name: wsrep_cert_deps_distance
            Value: 1.000000
    *************************** 36. row ***************************
    Variable_name: wsrep_apply_oooe
            Value: 0.000000
    *************************** 37. row ***************************
    Variable_name: wsrep_apply_oool
            Value: 0.000000
    *************************** 38. row ***************************
    Variable_name: wsrep_apply_window
            Value: 1.000000
    *************************** 39. row ***************************
    Variable_name: wsrep_commit_oooe
            Value: 0.000000
    *************************** 40. row ***************************
    Variable_name: wsrep_commit_oool
            Value: 0.000000
    *************************** 41. row ***************************
    Variable_name: wsrep_commit_window
            Value: 1.000000
    *************************** 42. row ***************************
    Variable_name: wsrep_local_state
            Value: 4
    *************************** 43. row ***************************
    Variable_name: wsrep_local_state_comment
            Value: Synced
    *************************** 44. row ***************************
    Variable_name: wsrep_cert_index_size
            Value: 1
    *************************** 45. row ***************************
    Variable_name: wsrep_cert_bucket_count
            Value: 22
    *************************** 46. row ***************************
    Variable_name: wsrep_gcache_pool_size
            Value: 2192
    *************************** 47. row ***************************
    Variable_name: wsrep_causal_reads
            Value: 0
    *************************** 48. row ***************************
    Variable_name: wsrep_cert_interval
            Value: 0.000000
    *************************** 49. row ***************************
    Variable_name: wsrep_open_transactions
            Value: 0
    *************************** 50. row ***************************
    Variable_name: wsrep_open_connections
            Value: 0
    *************************** 51. row ***************************
    Variable_name: wsrep_ist_receive_status
            Value: 
    *************************** 52. row ***************************
    Variable_name: wsrep_ist_receive_seqno_start
            Value: 0
    *************************** 53. row ***************************
    Variable_name: wsrep_ist_receive_seqno_current
            Value: 0
    *************************** 54. row ***************************
    Variable_name: wsrep_ist_receive_seqno_end
            Value: 0
    *************************** 55. row ***************************
    Variable_name: wsrep_incoming_addresses
            Value: 172.31.0.17:3306
    *************************** 56. row ***************************
    Variable_name: wsrep_cluster_weight
            Value: 1
    *************************** 57. row ***************************
    Variable_name: wsrep_desync_count
            Value: 0
    *************************** 58. row ***************************
    Variable_name: wsrep_evs_delayed
            Value: 
    *************************** 59. row ***************************
    Variable_name: wsrep_evs_evict_list
            Value: 
    *************************** 60. row ***************************
    Variable_name: wsrep_evs_repl_latency
            Value: 0/0/0/0/0
    *************************** 61. row ***************************
    Variable_name: wsrep_evs_state
            Value: OPERATIONAL
    *************************** 62. row ***************************
    Variable_name: wsrep_gcomm_uuid
            Value: a9ae769b-bb04-11eb-83d4-c3d7162c47bc
    *************************** 63. row ***************************
    Variable_name: wsrep_gmcast_segment
            Value: 0
    *************************** 64. row ***************************
    Variable_name: wsrep_cluster_conf_id
            Value: 1
    *************************** 65. row ***************************
    Variable_name: wsrep_cluster_size
            Value: 1
    *************************** 66. row ***************************
    Variable_name: wsrep_cluster_state_uuid
            Value: a9af3ceb-bb04-11eb-8cd1-d26e25aee8cd
    *************************** 67. row ***************************
    Variable_name: wsrep_cluster_status
            Value: Primary
    *************************** 68. row ***************************
    Variable_name: wsrep_connected
            Value: ON
    *************************** 69. row ***************************
    Variable_name: wsrep_local_bf_aborts
            Value: 0
    *************************** 70. row ***************************
    Variable_name: wsrep_local_index
            Value: 0
    *************************** 71. row ***************************
    Variable_name: wsrep_provider_name
            Value: Galera
    *************************** 72. row ***************************
    Variable_name: wsrep_provider_vendor
            Value: Codership Oy <info@codership.com>
    *************************** 73. row ***************************
    Variable_name: wsrep_provider_version
            Value: 3.49(r0ef0d79)
    *************************** 74. row ***************************
    Variable_name: wsrep_ready
            Value: ON
    74 rows in set (0.00 sec)
    
    ## 重点关注下面内容
    mysql> show status like 'wsrep%';
    +----------------------------------+--------------------------------------+
    | Variable_name                    | Value                                |
    +----------------------------------+--------------------------------------+
    | wsrep_local_state_uuid           | a9af3ceb-bb04-11eb-8cd1-d26e25aee8cd |
    ...                                |...
    | wsrep_local_state                | 4                                    |
    | wsrep_local_state_comment        | Synced                               |
    ...                                |...
    | wsrep_cluster_size               | 1                                    |
    | wsrep_cluster_status             | Primary                              |
    | wsrep_connected                  | ON                                   |
    ...                                |...
    | wsrep_ready                      | ON                                   |
    +----------------------------------+--------------------------------------+
    74 rows in set (0.00 sec)
    
    # 说明:
    wsrep_cluster_size表示,该Galera集群中只有一个节点
    wsrep_local_state_comment 状态为Synced(4),表示数据已同步完成(因为是第一个引导节点,无数据
    需要同步)。 如果状态是Joiner, 意味着 SST 没有完成. 只有所有节点状态是Synced,才可以加新节点
    wsrep_cluster_status为Primary,且已经完全连接并准备好
    

    启动PXC集群中其它所有节点

    # 除了名义上的master之外,其它的node节点只需要启动mysql即可
    [root@localhost ~]# systemctl start mysql
    

    查看集群状态,验证集群是否成功

    #在任意节点,查看集群状态
    mysql> show variables like 'wsrep_node_name';
    +-----------------+-------------------------+
    | Variable_name   | Value                   |
    +-----------------+-------------------------+
    | wsrep_node_name | pxc-cluster-node-1-m520 |
    +-----------------+-------------------------+
    1 row in set (0.00 sec)
    
    
    mysql> show variables like 'wsrep_node_address';
    +--------------------+-------------+
    | Variable_name      | Value       |
    +--------------------+-------------+
    | wsrep_node_address | 172.31.0.17 |
    +--------------------+-------------+
    1 row in set (0.00 sec)
    
    
    mysql> show variables like 'wsrep_on';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | wsrep_on      | ON    |
    +---------------+-------+
    1 row in set (0.00 sec)
    
    # 查看集群成员个数
    mysql> show status like 'wsrep_cluster_size';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 1     |
    +--------------------+-------+
    1 row in set (0.00 sec)
    
    # 在任意节点查看数据库
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    
    # 在任意节点创建数据库
    [root@localhost mysql]# mysql -uroot -pcentos
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 11
    Server version: 5.7.33-36-57-log Percona XtraDB Cluster (GPL), Release rel36, Revision a1ed9c3, WSREP version 31.49, wsrep_31.49
    
    Copyright (c) 2009-2021 Percona LLC and/or its affiliates
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.01 sec)
    
    mysql> create database db1;
    Query OK, 1 row affected (0.00 sec)
    
    # 其他任意节点查询可以看到创建的db1库
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | db1                |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    5 rows in set (0.00 sec)
    
    # 上面的节点添加完,在任意节点执行可以查看集群的个数
    mysql> show status like 'wsrep_cluster_size';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 3     |
    +--------------------+-------+
    1 row in set (0.00 sec)
    

    扩展

    在PXC集群中加入节点

    一个节点加入到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传输。
    

    在PXC集群中再加一台新的主机PXC4:172.31.0.47

    [root@localhost ~]# yum install Percona-XtraDB-Cluster-57 -y
    
    # 改配置文件 
    [root@localhost ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
    [client]
    socket=/var/lib/mysql/mysql.sock
    
    [mysqld]
    server-id=47
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    log-bin
    log_slave_updates
    expire_logs_days=7
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    # 改配置文件(添加新的节点需要每台都把ip加上)
    [root@localhost ~]# grep -Ev "^#|^$" /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 
    [mysqld]
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    wsrep_cluster_address=gcomm://172.31.0.17:4567,172.31.0.27:4567,172.31.0.37:4567,172.31.0.47
    binlog_format=ROW
    default_storage_engine=InnoDB
    wsrep_slave_threads= 8
    wsrep_log_conflicts
    innodb_autoinc_lock_mode=2
    wsrep_node_address=172.31.0.47
    wsrep_cluster_name=pxc-cluster-m520
    wsrep_node_name=pxc-cluster-node-4-m520
    pxc_strict_mode=ENFORCING
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth="sstuser:s3cretPass"
    
    # 启动
    [root@localhost ~]# systemctl start mysql
    
    # 查看端口4567和3306
    [root@localhost ~]# ss -tnul
    Netid  State      Recv-Q Send-Q                                              Local Address:Port                                                             Peer Address:Port              
    tcp    LISTEN     0      128                                                             *:22                                                                          *:*                  
    tcp    LISTEN     0      128                                                             *:4567                                                                        *:*                  
    tcp    LISTEN     0      100                                                     127.0.0.1:25                                                                          *:*                  
    tcp    LISTEN     0      80                                                             :::3306                                                                       :::*                  
    tcp    LISTEN     0      128                                                            :::22                                                                         :::*                  
    tcp    LISTEN     0      100                                                           ::1:25                            :::*
    
    

    任意节点查询会发现从3变成了4,说明已经添加成功

    mysql> show status like 'wsrep_cluster_size';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 4     |
    +--------------------+-------+
    1 row in set (0.01 sec)
    

    在除第一个启动节点外的任意节点停止服务

    [root@localhost ~]# systemctl stop mysql
    
    # 在其它任意节点查看wsrep_cluster_size变量少了一个节点
    mysql> show status like 'wsrep_cluster_size';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 3     |
    +--------------------+-------+
    1 row in set (0.00 sec)
    

    报错

    启动从服务报错

    [root@localhost ~]# vim /var/log/mysqld.log 
    2021-05-22T15:42:13.975755Z 0 [Warning] WSREP: last inactive check more than PT1.5S (3*evs.inactive_check_period) ago (PT3.50712S), skipping check
    2021-05-22T15:42:43.527512Z 0 [Note] WSREP: Current view of cluster as seen by this node
    view ((empty))
    2021-05-22T15:42:43.527657Z 0 [ERROR] WSREP: failed to open gcomm backend connection: 110: failed to reach primary view (pc.wait_prim_timeout): 110 (Connection timed out)
             at gcomm/src/pc.cpp:connect():161
    2021-05-22T15:42:43.527671Z 0 [ERROR] WSREP: gcs/src/gcs_core.cpp:gcs_core_open():209: Failed to open backend connection: -110 (Connection timed out)
    2021-05-22T15:42:43.527949Z 0 [ERROR] WSREP: gcs/src/gcs.cpp:gcs_open():1527: Failed to open channel 'pxc-cluster' at 'gcomm://172.31.0.17,172.31.0.27,172.31.0.37': -110 (Connection timed out)
    2021-05-22T15:42:43.527962Z 0 [ERROR] WSREP: gcs connect failed: Connection timed out
    2021-05-22T15:42:43.527968Z 0 [ERROR] WSREP: Provider/Node (gcomm://172.31.0.17,172.31.0.27,172.31.0.37) failed to establish connection with cluster (reason: 7)
    2021-05-22T15:42:43.527973Z 0 [ERROR] Aborting
    
    2021-05-22T15:42:43.527981Z 0 [Note] Giving 0 client threads a chance to die gracefully
    2021-05-22T15:42:43.527988Z 0 [Note] WSREP: Waiting for active wsrep applier to exit
    2021-05-22T15:42:43.528011Z 0 [Note] WSREP: Service disconnected.
    2021-05-22T15:42:43.528015Z 0 [Note] WSREP: Waiting to close threads......
    2021-05-22T15:42:48.528984Z 0 [Note] WSREP: Some threads may fail to exit.
    2021-05-22T15:42:48.535147Z 0 [Note] WSREP: Service thread queue flushed.
    2021-05-22T15:42:48.535255Z 0 [Note] WSREP: MemPool(SlaveTrxHandle): hit ratio: 0, misses: 0, in use: 0, in pool: 0
    2021-05-22T15:42:48.535398Z 0 [Note] WSREP: Shifting CLOSED -> DESTROYED (TO: 0)
    2021-05-22T15:42:48.536037Z 0 [Note] Binlog end
    2021-05-22T15:42:48.536169Z 0 [Note] /usr/sbin/mysqld: Shutdown complete
    

    上面其他节点启动报错问题解决方法:

    其他节点配置文件加上4567端口(组成员之间进行沟通的端口号),启动mysql服务即可
    [root@localhost ~]# vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf 
    wsrep_cluster_address=gcomm://172.31.0.17:4567,172.31.0.27:4567,172.31.0.37:4567
    

    安装软件Percona-XtraDB-Cluster-57报错

    Error: percona-xtrabackup-24 conflicts with percona-xtrabackup-2.3.10-1.el7.x86_64
     You could try using --skip-broken to work around the problem
     You could try running: rpm -Va --nofiles --nodigest
    

    解决思路:因为曾经做实验安装过相关的软件造成冲突了,卸载然后再重新安装即可

    [root@localhost ~]# yum remove percona-xtrabackup* -y
    
  • 相关阅读:
    HOOK启思录---第二章 HOOK的根源
    无标题窗体的移动及其简单美化
    创建mySQL触发器
    HOOK启思录---第一章 HOOK的发展
    【原创】IE6实现PNG透明半透明
    mySQL常用命令
    IE中的条件注释
    HOOK启思录---前言:HOOK是一种思想
    说说出租车叫车流程
    ruby初学笔记1——看懂代码必备语法
  • 原文地址:https://www.cnblogs.com/xuanlv-0413/p/14801707.html
Copyright © 2011-2022 走看看