zoukankan      html  css  js  c++  java
  • Percona XtraDB Cluster简易入门

    说明


    Percona XtraDB Cluster(简称PXC),是由percona公司推出的mysql集群解决方案。特点是每个节点都能进行读写,且都保存全量的数据。也就是说在任何一个节点进行写入操作,都会同步给其它所有节点写入到自己的磁盘。这点跟Oracle Rac有本质的区别,Rac是多个节点连同一个共享存储,假如Oracle的共享存储挂了,整个集群就挂了。而Mysql pxc中任何一台机器挂了,集群照常运转,因为节点间并不共享磁盘。

    写在前面的注意事项(节选自官方手册)


    1. 由于pxc只作用于innodb引擎,而mysql自带的系统库(mysql)里面有些表是MyISAM的存储引擎,因此不能直接对系统库(mysql)的表进行dml操作,比如INSERT INTO mysql.user...。而是使用CREATE USER...,这个是没有问题的,而且也是正确的方式。
    2. 不支持LOCK TABLES和UNLOCK TABLES语句
    mysql> lock tables world write;
    ERROR 1105 (HY000): Percona-XtraDB-Cluster prohibits use of LOCK TABLE/FLUSH TABLE <table> WITH READ LOCK/FOR EXPORT with pxc_strict_mode = ENFORCING
    3. log_output参数不能是TABLE
    4. 不支持分布式事务
    5. 新建表必须要有主键,否则对表进行dml操作会报以下错误
    ERROR 1105 (HY000): Percona-XtraDB-Cluster prohibits use of DML command on a table (hello.world) without an explicit primary key with pxc_strict_mode = ENFORCING or MASTER
    6. 推荐的节点数最小是3个

    安装


    准备三个节点,操作系统使用centos6.10,pxc采用rpm安装的方式,简单
    节点1 ip: 10.40.16.120  hostname:mysqla
    节点2 ip: 10.40.16.121  hostname:mysqlb
    节点3 ip: 10.40.16.122  hostname:mysqlc

    所有节点关闭防火墙

    service iptables stop
    chkconfig iptables off
    setenforce 0
    sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config


    所有节点安装以下rpm包

    #安装percona cluster依赖包
    wget ftp://rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/libev-4.04-2.el6.x86_64.rpm
    wget http://www.rpmfind.net/linux/epel/6/x86_64/Packages/s/socat-1.7.2.3-1.el6.x86_64.rpm
    
    yum install -y libev-4.04-2.el6.x86_64.rpm
    yum install -y socat-1.7.2.3-1.el6.x86_64.rpm
    
    #配置yum仓库
    yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
    
    #安装percona cluster
    yum install -y Percona-XtraDB-Cluster-57

    到这里所有的安装工作就已经完成了,接下来就是修改参数文件,把这三个节点连起来组成集群

    修改参数文件


    需要修改的参数已经列出来了,其余不用动,注意下面这些参数有的前面有#号,需要去掉
    修改节点1的参数文件
    vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

    user=mysql
    wsrep_cluster_address=gcomm://10.40.16.120,10.40.16.121,10.40.16.122   #集群的所有节点ip
    wsrep_node_address=10.40.16.120                                        #本机的ip
    wsrep_node_name=pxc-cluster-node-1                                     #本机在集群中的名字
    wsrep_sst_auth="sstuser:s3cretPass"                                    #集群间同步的用户,后面需要在节点1创建该用户


    vi /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

    server-id=1                     #集群内所有节点的id不能相同

                                      

    启动节点1的mysql
    /etc/init.d/mysql bootstrap-pxc  #集群的第一个节点启动必须使用该方式。如果手工将整个集群关掉了,那么重新启动集群时,应该启动最后一个被关闭的节点,且以该方式。第一个启动的节点称为donater,后面启动的节点为joiner,两者启动方式不一样,需要留意

    [root@mysqla ~]# /etc/init.d/mysql bootstrap-pxc
    Bootstrapping PXC (Percona XtraDB Cluster)MySQL (Percona XtraDB Cluster) is not running, but lock file (/var/lock/subsys/mysql) exists [FAILED]
    Starting MySQL (Percona XtraDB Cluster)....                [  OK  ]

    前面那个failed忽略,属于正常情况

    找出root的临时密码

    [root@mysqla ~]# grep "temporary password" /var/log/mysqld.log |awk -F " " '{print $11}'

    &enffgG_E8Ty

    修改root密码并创建同步账号(同步账号需要跟/etc/percona-xtradb-cluster.conf.d/wsrep.cnf的键值wsrep_sst_auth对应)

    [root@mysqla ~]# mysql -uroot -p'&enffgG_E8Ty'
    mysql> alter user root@'localhost' identified by 'root';
    mysql> create user 'sstuser'@'localhost' identified by 's3cretPass';
    mysql> grant process, reload, lock tables, replication client on *.* to 'sstuser'@'localhost';
    mysql> flush privileges;


    修改节点2的参数文件
    vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

    user=mysql
    wsrep_cluster_address=gcomm://10.40.16.120,10.40.16.121,10.40.16.122
    wsrep_node_address=10.40.16.121
    wsrep_node_name=pxc-cluster-node-2
    wsrep_sst_auth="sstuser:s3cretPass"


    vi /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

    server-id=2


    启动节点2的mysql
    service mysql start

    [root@mysqlb ~]# service mysql start
    MySQL (Percona XtraDB Cluster) is not running, but lock fil[FAILED]lock/subsys/mysql) exists
    Starting MySQL (Percona XtraDB Cluster)......State transfer in progress, setting sleep higher
    .                                                          [  OK  ]


    修改节点3的参数文件
    vi /etc/percona-xtradb-cluster.conf.d/wsrep.cnf

    user=mysql
    wsrep_cluster_address=gcomm://10.40.16.120,10.40.16.121,10.40.16.122
    wsrep_node_address=10.40.16.122
    wsrep_node_name=pxc-cluster-node-3
    wsrep_sst_auth="sstuser:s3cretPass"
    


    vi /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

    server-id=3


    启动节点3的mysql
    service mysql start

    [root@mysqlc ~]# service mysql start
    MySQL (Percona XtraDB Cluster) is not running, but lock fil[FAILED]lock/subsys/mysql) exists
    Starting MySQL (Percona XtraDB Cluster)......State transfer in progress, setting sleep higher
    .                                                          [  OK  ]


    测试
    在任意节点创建一张表,注意这里创建的表必须有主键,查看其它节点是否有数据,有就表示同步完成,没有的话去看日志/var/log/mysqld.log查找原因

    如果文章帮到了你,还希望你点个赞,你的点赞是我写作的最大动力,哈哈。

  • 相关阅读:
    HBase 文件读写过程描述
    Kafka 部署指南-好久没有更新博客了
    《Python高性能编程》——列表、元组、集合、字典特性及创建过程
    Ansible常用功能
    vim内替换文件内容
    线程队列-queue
    Python多进程
    python多线程知识-实用实例
    夜间模式的实现
    本地通知的实现
  • 原文地址:https://www.cnblogs.com/ddzj01/p/10831983.html
Copyright © 2011-2022 走看看