zoukankan      html  css  js  c++  java
  • 搭建PXC MySQL5.7环境集群

    参考:

    https://www.cnblogs.com/f-ck-need-u/p/9364877.html

     https://www.percona.com/doc/percona-xtradb-cluster/5.7/index.html  ---官方帮助文档写的还是比较详细的,只不过文档是使用的Yum安装,可能是网络问题,我本地一直装不上去,使用的是解压缩的方式进行安装

    一些PXC特性,安装步骤,其它详细说明,官文帮助文档都有写,有空可以详细看一下。

    本地环境:

    192.168.150.201    pxc1

    192.168.150.202    pxc2

    192.168.150.203    pxc3

    1、安装依赖包,卸载mysql mariadb等,调整环境

    关掉防火墙,第一次搭建时忘记关了,导致启动第二个节点时一直报错,加入不到集群中

    systemctl stop   firewalld
    service iptables stop

    关闭selinux,需要重启

    vi /etc/selinux/config 
    修改
    SELINUX=disabled

    查看是否有残留mysql或mariadb,有的话先卸载掉。

    rpm -qa|grep mysql
    rpm -qa|grep mariadb

    安装RPM依赖

    yum install -y perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Time-HiRes.x86_64 socat

    2、安装PXC

    https://www.percona.com/downloads/Percona-XtraDB-Cluster-57/LATEST/

    Software  选择:Linux-Generic,下载通用安装包

    解压缩

    tar xvf  Percona-XtraDB-Cluster-5.7.31-rel34-45.3.Linux.x86_64.glibc2.12.tar.gz -C /usr/local/

    重命名

    mv Percona-XtraDB-Cluster-5.7.31-rel34-45.3.Linux.x86_64.glibc2.12/ mysql

    创建data目录

    mkdir -p /usr/local/mysql/data/

    初始化数据库

    /usr/local/mysql/bin/mysqld --initialize --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --user=root

    记住输出的这行日志,这里保存的是密码

    2020-11-08T00:02:34.090014Z 1 [Note] A temporary password is generated for root@localhost: O;#X9tVOfQ=t

    先简单修改/etc/my.cnf配置文件,后面还要再改一次

    [mysqld]
    #datadir=/var/lib/mysql
    #socket=/var/lib/mysql/mysql.sock
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    # Settings user and group are ignored when systemd is used.
    # If you need to run mysqld under a different user or group,
    # customize your systemd unit file for mariadb according to the
    # instructions in http://fedoraproject.org/wiki/Systemd
    
    #[mysqld_safe]
    log-error=/usr/local/mysql/mysqld.log
    pid-file=/usr/local/mysql/mysql.pid
    
    #
    # include all files from the config directory
    #
    datadir=/usr/local/mysql/data
    basedir=/usr/local/mysql
    socket=/tmp/mysql.sock

    启动数据库

    /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=root

    登录数据库

    /usr/local/mysql/bin/mysql -uroot -p -S /tmp/mysql.sock

    修改root密码

    alter user 'root'@'localhost' identified by '123456'

    创建sstuser用户,在集群中新节点加入时,通过SST方式同步数据时,需要用到这个用户,配置文件中也会用到,host一定是localhost,

    之前参考过网上的精准授权语句,但在新节点加入集群时报错sstuser权限不足,暂时没有分析缺少哪个权限,简单粗暴的全加上了。

    create user 'sstuser'@'localhost' identified by '123456';
    grant all privileges on *.* to  'sstuser'@'localhost';

    将/usr/local/mysql/bin 加入到path环境变量中

    vi ~/.bash_profile
    编辑
    PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
    保存后,生效下这个文件
    source ~/.bash_profile

    为mysqld做软链接

    cd /usr/usbin
    ln -s /usr/local/mysql/bin/mysqld mysqld

    安装innobackup 2.4

    下载地址
    https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

    yum install https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.20/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm

    正规情况下应该添加mysql用户,并且为/usr/local/mysql目录授权mysql用户组,

    由于是测试,我基本都是用root用户启动的mysql进程

    useradd mysql
    chown -R mysql.mysql /usr/local/mysql

    关闭数据库命令如下,

    ./mysqladmin -uroot -p123456 -S /tmp/mysql.socket shutdown

    -------------------------------------------------------------------------------------------------------

    -------------------------第2 大步骤,三台机器都要操作一遍。----------------------------

    -------------------------------------------------------------------------------------------------------

    3、修改my.cnf配置文件

    说明:

    log-bin=mysql-bin   --开启binlog
    log_slave_updates   --备库也写同步过来的binlog
    
    server_id=203       ----server_id,每个实例都唯一
    wsrep_provider=/usr/local/mysql/lib/libgalera_smm.so     ----指定galera库
    wsrep_cluster_name=pxc-cluster                           ----PXC集群名称,可以自己修改
    wsrep_cluster_address=gcomm://192.168.150.201,192.168.150.202,192.168.150.203         ----集群三台机器的IP地址
    wsrep_node_name=pxc3                                     ---本节点名称,集群中唯一
    wsrep_node_address=192.168.150.203                       ---本节点IP地址,就是本服务器的IP地址。
    wsrep_sst_method=xtrabackup-v2                           ---指定SST同步方式
    wsrep_sst_auth=sstuser:123456                            ---xtrabackup软件需要用到的用户名和密码,之前已经创建了。
    pxc_strict_mode=ENFORCING                                ----PXC运行模式,官方建议就是ENFORCING
    binlog_format=ROW                                        ---binlog模式必须为row
    default_storage_engine=InnoDB                            ---默认存储引擎为Innodb,PXC只支持innodb表的同步。
    innodb_autoinc_lock_mode=2                               ---自增锁模式,必须为2

    192.168.150.201,修改my.cnf配置文件,添加如下内容

    log-bin=mysql-bin
    log_slave_updates
    
    server_id=201
    wsrep_provider=/usr/local/mysql/lib/libgalera_smm.so
    wsrep_cluster_name=pxc-cluster
    wsrep_cluster_address=gcomm://192.168.150.201,192.168.150.202,192.168.150.203
    wsrep_node_name=pxc1
    wsrep_node_address=192.168.150.201
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth=sstuser:123456
    pxc_strict_mode=ENFORCING
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2

    192.168.150.202,修改my.cnf配置文件,添加如下内容 

    log-bin=mysql-bin
    log_slave_updates
    
    server_id=202
    wsrep_provider=/usr/local/mysql/lib/libgalera_smm.so
    wsrep_cluster_name=pxc-cluster
    wsrep_cluster_address=gcomm://192.168.150.201,192.168.150.202,192.168.150.203
    wsrep_node_name=pxc2
    wsrep_node_address=192.168.150.202
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth=sstuser:123456
    pxc_strict_mode=ENFORCING
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2

    192.168.150.203,修改my.cnf配置文件,添加如下内容 

    log-bin=mysql-bin
    log_slave_updates
    
    server_id=203
    wsrep_provider=/usr/local/mysql/lib/libgalera_smm.so
    wsrep_cluster_name=pxc-cluster
    wsrep_cluster_address=gcomm://192.168.150.201,192.168.150.202,192.168.150.203
    wsrep_node_name=pxc3
    wsrep_node_address=192.168.150.203
    wsrep_sst_method=xtrabackup-v2
    wsrep_sst_auth=sstuser:123456
    pxc_strict_mode=ENFORCING
    binlog_format=ROW
    default_storage_engine=InnoDB
    innodb_autoinc_lock_mode=2

    4、

    先启动201节点,因为是启动集群中第个主节点,所以要加--wsrep-new-cluster 参数

    mysqld --defaults-file=/etc/my.cnf --wsrep-new-cluster --user=root

    再启动202节点

    mysqld --defaults-file=/etc/my.cnf  --user=root

    再启动203节点

    mysqld --defaults-file=/etc/my.cnf  --user=root

    PXC集群,启动成功,

    登录201节点,执行show status like '%wsrep%'; 可以查看集群状态,

    mysql>  show status like '%wsrep%';
    +----------------------------------+----------------------------------------------------------------+
    | Variable_name                    | Value                                                          |
    +----------------------------------+----------------------------------------------------------------+
    | wsrep_local_state_uuid           | 85718ad1-2276-11eb-a1ac-cbb3408042a7                           |
    | wsrep_protocol_version           | 9                                                              |
    | wsrep_last_applied               | 8                                                              |
    | wsrep_last_committed             | 8                                                              |
    | wsrep_replicated                 | 3                                                              |
    | wsrep_replicated_bytes           | 720                                                            |
    | wsrep_repl_keys                  | 4                                                              |
    | wsrep_repl_keys_bytes            | 104                                                            |
    | wsrep_repl_data_bytes            | 412                                                            |
    | wsrep_repl_other_bytes           | 0                                                              |
    | wsrep_received                   | 8                                                              |
    | wsrep_received_bytes             | 782                                                            |
    | 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.125000                                                       |
    | wsrep_local_cached_downto        | 5                                                              |
    | 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      | [ 173, 173 ]                                                   |
    | wsrep_flow_control_interval_low  | 173                                                            |
    | wsrep_flow_control_interval_high | 173                                                            |
    | wsrep_flow_control_status        | OFF                                                            |
    | wsrep_cert_deps_distance         | 1.000000                                                       |
    | wsrep_apply_oooe                 | 0.000000                                                       |
    | wsrep_apply_oool                 | 0.000000                                                       |
    | wsrep_apply_window               | 1.000000                                                       |
    | wsrep_commit_oooe                | 0.000000                                                       |
    | wsrep_commit_oool                | 0.000000                                                       |
    | wsrep_commit_window              | 1.000000                                                       |
    | wsrep_local_state                | 4                                                              |
    | wsrep_local_state_comment        | Synced                                                         |
    | wsrep_cert_index_size            | 3                                                              |
    | wsrep_cert_bucket_count          | 22                                                             |
    | wsrep_gcache_pool_size           | 2672                                                           |
    | 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.150.202:3306,192.168.150.201:3306,192.168.150.203:3306 |
    | wsrep_cluster_weight             | 3                                                              |
    | 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                 | 991e82fd-2290-11eb-b27e-cef2a67b4d13                           |
    | wsrep_cluster_conf_id            | 7                                                              |
    | wsrep_cluster_size               | 3                                                              |
    | wsrep_cluster_state_uuid         | 85718ad1-2276-11eb-a1ac-cbb3408042a7                           |
    | 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                                                             |
    +----------------------------------+----------------------------------------------------------------+
    71 rows in set (0.07 sec)

    参数说明

        1)集群完整性检查:

            wsrep_cluster_state_uuid:在集群所有节点的值应该是相同的,有不同值的节点,说明其没有连接入集群.

            wsrep_cluster_conf_id:正常情况下所有节点上该值是一样的.如果值不同,说明该节点被临时”分区”了.当节点之间网络连接恢复的时候应该会恢复一样的值.

            wsrep_cluster_size:如果这个值跟预期的节点数一致,则所有的集群节点已经连接.

            wsrep_cluster_status:集群组成的状态.如果不为”Primary”,说明出现”分区”或是”split-brain”状况.

     

        2)节点状态检查:

            wsrep_ready: 该值为ON,则说明可以接受SQL负载.如果为Off,则需要检查wsrep_connected.

            wsrep_connected: 如果该值为Off,且wsrep_ready的值也为Off,则说明该节点没有连接到集群.(可能是wsrep_cluster_address或wsrep_cluster_name等配置错造成的.具体错误需要查看错误日志)

            wsrep_local_state_comment:如果wsrep_connected为On,但wsrep_ready为OFF,则可以从该项查看原因.

     

        3)复制健康检查:

            wsrep_flow_control_paused:表示复制停止了多长时间.即表明集群因为Slave延迟而慢的程度.值为0~1,越靠近0越好,值为1表示复制完全停止.可优化wsrep_slave_threads的值来改善.

            wsrep_cert_deps_distance:有多少事务可以并行应用处理.wsrep_slave_threads设置的值不应该高出该值太多.

            wsrep_flow_control_sent:表示该节点已经停止复制了多少次.

            wsrep_local_recv_queue_avg:表示slave事务队列的平均长度.slave瓶颈的预兆.

            最慢的节点的wsrep_flow_control_sent和wsrep_local_recv_queue_avg这两个值最高.这两个值较低的话,相对更好.

     

        4)检测慢网络问题:

            wsrep_local_send_queue_avg:网络瓶颈的预兆.如果这个值比较高的话,可能存在网络瓶颈

     

        5)冲突或死锁的数目:

            wsrep_last_committed:最后提交的事务数目

            wsrep_local_cert_failures和wsrep_local_bf_aborts:回滚,检测到的冲突数目

    做写入测试,

    201节点

    create database ceshi;

    202节点

    create table t1(id int primary key auto_increment,name varchar(200));

    203节点,可以看到创建的t1,也可以写入数据。

    ysql> use ceshi;
    Database changed
    mysql> show tables;
    +-----------------+
    | Tables_in_ceshi |
    +-----------------+
    | t1              |
    +-----------------+
    1 row in set (0.00 sec)

    5、

    局限性

    1.目前的复制仅仅支持InnoDB存储引擎。任何写入其他引擎的表,包括mysql.*表将不会复制。但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的。

    2.DELETE操作不支持没有主键的表。没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集。

    3.在多主环境下LOCK/UNLOCK TABLES不支持。以及锁函数GET_LOCK(), RELEASE_LOCK()…

    4.查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。

    5.允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。

    6.由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).

    7.XA事务不支持,由于在提交上可能回滚。

    8.整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。

    9.集群节点建议最少3个。2个也可以运行,但是官方不推荐这么做,因为3个节点是为了预防脑裂。

    10.如果DDL语句有问题将破坏集群。建议使用pt-online-schema-change操作DDL。

     

     

    6、

    名词:
        WS:write set 写数据集
        IST: Incremental State Transfer 增量同步
        SST:State Snapshot Transfer 全量同步 
        UUID:节点状态改变及顺序的唯一标识。
        GTID:Global Transaction ID ,由UUID和偏移量组成。wsrep api 中定义的集群内全局事务id。

    状态机变化阶段:
         1.OPEN: 节点启动成功,尝试连接到集群,如果失败则根据配置退出或创建新的集群
         2.PRIMARY: 节点处于集群PC中,尝试从集群中选取donor进行数据同步
         3.JOINER: 节点处于等待接收/接收数据文件状态,数据传输完成后在本地加载数据
         4.JOINED: 节点完成数据同步工作,尝试保持和集群进度一致
         5.SYNCED:节点正常提供服务:数据的读写,集群数据的同步,新加入节点的sst请求
         6.DONOR:节点处于为新节点准备或传输集群全量数据状态,对客户端不可用。

    PXC会使用大概是4个端口号
    3306 数据库对外服务的端口号
    4444 请求SST SST: 指数据一个镜象传输 xtrabackup , rsync ,mysqldump 
    4567 : 组成员之间进行沟通的一个端口号
    4568 : 传输IST用的。相对于SST来说的一个增量。

  • 相关阅读:
    WCF里几个基本知识点
    MVC3+EntityFramework实践笔记
    一些vim的插件和配置
    Web API工作方式
    计算机中的异常
    Glusterfs之nfs模块源码分析
    ASP.NET Windows身份认证
    Sql Server表结构及索引辅助查看工具
    sql server批量插入与更新两种解决方案
    如何在ViewModel中正确地使用Timer(定时器)
  • 原文地址:https://www.cnblogs.com/nanxiang/p/13948762.html
Copyright © 2011-2022 走看看