• PXC集群搭建


    说明


    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  ]
    螃蟹在剥我的壳,笔记本在写我,漫天的我落在枫叶上雪花上,而你在想我。 --章怀柔
  • 相关阅读:
    《CLR via C#》读书笔记1 之 CLR的执行模型
    C#中的事件和委托
    优分享VR开源啦,优分享VR是基于Google VR开发的一款手机VR视频资源的聚合软件
    安卓端开源移动浏览器开源项目
    Android客户端发布博客
    博客园的IOS客户端“我的博客园”已发布到AppStore
    博客园的IOS客户端图片展示
    ios在tableview里面加subview后在ip4和ip5上显示不一样的问题
    APP开发手记01(app与web的困惑)
    ios开发3.5和4.0寸屏幕自适应中的一点问题
  • 原文地址:https://www.cnblogs.com/lovezhr/p/14792821.html
Copyright © 2020-2023  润新知