• PXC安装部署


    安装依赖与注意事项:

     

    1. rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

    1.yum install socat

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

    3.安装xtrabackup  下载地址:http://www.percona.com/downloads/XtraBackup/

    4.注意iptables  4567是wsrep使用的默认端口

    5.如果是对现有环境做galera集群,需要对mysql现有表做检查,包括表,表引擎,是否无主键,是否有全文索引,是否有空间索引:

    SELECT DISTINCT

           CONCAT(t.table_schema,'.',t.table_name) AS tbl,

           t.engine,

           IF(ISNULL(c.constraint_name),'NOPK','') AS nopk,

           IF(s.index_type = 'FULLTEXT','FULLTEXT','') AS ftidx,

           IF(s.index_type = 'SPATIAL','SPATIAL','') AS gisidx

      FROM information_schema.tables AS t

      LEFT JOIN information_schema.key_column_usage AS c

        ON (t.table_schema = c.constraint_schema AND t.table_name = c.table_name

            AND c.constraint_name = 'PRIMARY')

      LEFT JOIN information_schema.statistics AS s

        ON (t.table_schema = s.table_schema AND t.table_name = s.table_name

            AND s.index_type IN ('FULLTEXT','SPATIAL'))

      WHERE t.table_schema NOT IN ('information_schema','performance_schema','mysql')

        AND t.table_type = 'BASE TABLE'

        AND (t.engine <> 'InnoDB' OR c.constraint_name IS NULL OR s.index_type IN ('FULLTEXT','SPATIAL'))

      ORDER BY t.table_schema,t.table_name;

    6.pxc  下载地址

    https://www.percona.com/downloads/Percona-XtraDB-Cluster-56/Percona-XtraDB-Cluster-5.6.21-25.8/binary/tarball/Percona-XtraDB-Cluster-5.6.21-rel70.1-25.8.938.Linux.x86_64.tar.gz

     

    安装步骤:

    1. 和普通mysql安装步骤一样安装并初始化

    2. 安装innobackupex并且添加到环境变量

    3. 添加sst账号

    DELETE FROM mysql.user WHERE user='';

    GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost' IDENTIFIED BY 'sstuser';;

    FLUSH PRIVILEGES;

    4.修改my.cnf配置文件(添加如下参数)

    ###pxc

    ##Path to Galera library

    #指定Galera库文件,PXC自带该库文件,mariadb galera需要安装galera

    wsrep_provider                          = /usr/local/Percona-XtraDB-Cluster-5.6.24-rel72.2-25.11..Linux.x86_64/lib/libgalera_smm.so

    # Cluster connection URL contains the IPs of node#1, node#2 and node#3

    #指定集群每个节点的连接地址

    wsrep_cluster_address         = gcomm://10.1.1.121:4567,10. 1.1.122:4567,10. 1.1.123:4567

    #本机ip

    wsrep_provider_options                  = gmcast.listen_addr=tcp://10.1.1.121:4567;gcache.size=8G;gcs.fc_limit=512;gcs.fc_factor=0.9;

    # This changes how InnoDB autoincrement locks are managed and is a requirement for Galera

    innodb_autoinc_lock_mode                = 2

    # Node #1 address

    #本机ip

    wsrep_node_address                      = 10. 1.1.122

    #指定SST方式,支持rsync(最快,需要锁表),mysqldump和xtrabackup,从5.5.33-23.7.6起支持xtrabackup-v2

    # SST method

    wsrep_sst_method                        = xtrabackup-v2

    #wsrep_sst_method                        = rsync

    # Cluster name

    wsrep_cluster_name                      = my_centos_cluster

    wsrep_slave_threads                     = 16

    # Authentication for SST method

    #SST的认证方式(账号密码)

    wsrep_sst_auth                          = "sstuser:sstuser"

    5.先启动主节点

    /usr/local/Percona-XtraDB-Cluster-5.6.24-rel72.2-25.11..Linux.x86_64/bin/mysqld_safe --defaults-file=/etc/my.cnf  --wsrep-cluster-address="gcomm://"  &

    或者

    service mysqld_3306 bootstrap-pxc

    其他节点正常启动

    service mysqld_3306 start

    或者

    /etc/init.d/mysqld_3306 start --wsrep_sst_donor=指定主ip

    6.查看pxc状态

    show status like 'wsrep%';

    ps aux | grep mysql | grep wsrep_start_position

    绕开SST通过IST方式添加节点需要创建的文件

    在源mysql 用innobackupex  加 --galera-info 参数做完整备份

    在目标mysql还原并且创建grastate.dat文件

    sudo cat xtrabackup_galera_info

    b0b66f5c-6254-11e3-b7c8-d2d41d32ec17: 433411

    sudo vim grastate.dat
    # GALERA saved state
    version: 2.1
    uuid: b0b66f5c-6254-11e3-b7c8-d2d41d32ec17
    seqno: 433411
    cert_index:

    sudo chown mysql:mysql -R *

     

    /etc/init.d/mysqld_3306 start --wsrep_sst_donor=源mysql

     

    名词:
        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:节点处于为新节点准备或传输集群全量数据状态,对客户端不可用。

    原生的Mysql也可使用galera

    https://launchpad.net/codership-mysql/+download

    局限性

    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。

     

      

    Galera监控

    1、常用查询指令

    查看wsrep版本: mysql> SHOW GLOBAL STATUS LIKE 'wsrep_provider_version';

    查看wsrep有关的所有变量: mysql> SHOW VARIABLES LIKE 'wsrep%' G

    查看Galera集群状态: mysql> show status like 'wsrep%';

     

    2、参数说明

        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:回滚,检测到的冲突数目

     

    --设置节点不参与流量控制

    set global wsrep_desync=ON;

     

    --需注意的参数修改gcs.fc_limit=1024 触发流控大小设置

    wsrep_provider_options  = "evs.keepalive_period=PT1S; evs.inactive_check_period=PT0.5S; evs.suspect_timeout=PT5S; evs.inactive_timeout=PT15S; gcs.fc_factor=1.0; gcs.fc_limit=1024; gcs.fc_master_slave=yes; gcache.size=8G; "

     

    --在线调整方法

    SET GLOBAL wsrep_provider_options="gcs.fc_limit=512;gcs.fc_factor=1.0;evs.send_window=256;evs.user_send_window=128; ";

    --如果脑裂导致所有节点不可用

       SET GLOBAL wsrep_provider_options='pc.bootstrap=true';  

    当网络状况不好时考虑调整的参数设置:

    1 wsrep_provider_options = "evs.keepalive_period = PT3S; evs.inactive_check_period = PT10S; evs.suspect_timeout = PT30S; evs.inactive_timeout = PT1M; evs.consensus_timeout = PT1M"

    2 evs.keepalive_period               参数控制多久发送一次keepalive请求信号

    3 evs.inactive_check_period          参数控制多久检测一次节点活动/静止状态

    4 evs.suspect_timeout               参数控制某个节点是否被标识为suspected状态的时 间间隔

    5 evs.inactive_timeout             参数控制节点不活动时检测周期

    6 evs.consensus_timeout         参数控制多久检测一次节点一致性 通过上面的设 置,可以使节点超时时间为30秒

    7 evs.inactive_timeout参数必须不小于evs.suspect_timeout, evs.consensus_timeout必须不小于evs.inactive_timeout

  • 相关阅读:
    There was an internal API error
    MD5加密
    CentOS 7 最小化安装简单配置
    Dalvik 虚拟机操作码
    BugkuCTF~Web~WriteUp
    BugkuCTF~代码审计~WriteUp
    Android 个人手机通讯录开发
    Android SQLite 数据库学习
    Android 程序结构
    2018~第三届南宁市网络安全技术大赛~nnctf~write-up
  • 原文地址:https://www.cnblogs.com/ijia/p/10854445.html
Copyright © 2020-2023  润新知