PXC部署,配置,操作原理

参考:https://www.cnblogs.com/kevingrace/p/5685371.html?utm_source=itdadao&utm_medium=referra      https://blog.51cto.com/sumongodb/1956086      https://www.linuxidc.com/Linux/2017-05/143519.htm      https://blog.csdn.net/LiteBty/article/details/81106405      https://www.linuxidc.com/Linux/2018-11/155499.htm  centos7.2 pxc5.7.21      http://www.mamicode.com/info-detail-2273582.html      https://www.jianshu.com/p/0b7c050dfab6      https://www.jianshu.com/p/e3c66cd7c3e4      https://blog.csdn.net/leshami/article/details/78962190      https://blog.csdn.net/geoffreychan/article/details/80499956      https://www.linuxidc.com/Linux/2018-11/155499.htm 步骤      https://blog.51cto.com/kenneyzhou/2108785   centos 虚拟机拷贝 查看centos版本: 命令:$ cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core)  克隆虚拟机:https://www.linuxidc.com/Linux/2018-03/151627.htm 完整克隆:https://www.cnblogs.com/areyouready/p/9716094.html 在host文件中设置了节点:centos1 10.3.13.213  node1, centos2 10.3.13.197  node2, centos3 10.3.13.194  node3   linux的yum,rpm操作 离线下载安装:https://blog.csdn.net/qq_33466466/article/details/84670368 安装数据库 percona server https://blog.csdn.net/qq_33466466/article/details/84670368   安装yum源 yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm 这个0.1-6已经是目前最新的yum源了 yum list | grep percona  查看当前安装的percona软件   检查是否安装有MySQL Server: 在安装percona之前需要将mysql以及mariadb删除 rpm -qa | grep mysql rpm -qa | grep  mariadb 删除方法: rpm -e mysql   #普通删除模式 rpm -e --nodeps mysql    #强行删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其强行删除。 yum remove mariadb-libs-5.5.41-2.el7_0.x86_64 要注意的是mariadb也是不能存在的,有的话就要删除调,删除的时候有依赖关系,直接yum卸载   percona 提示密钥不匹配 https://www.bbsmax.com/A/MyJxLBjVJn/   清除yum缓存 yum clean all yum --enablerepo=base clean metadata yum --enablerepo=updates cleanmetadata yum makecache fast yum相关的配置文件: 1.etc/yum.conf配置文件 2.etc/yum.repos.d/目录下的众多.repo文件 yum删除软件:https://blog.csdn.net/zengmingen/article/details/78225612 提示公钥尚未安装:https://blog.csdn.net/qq_20960159/article/details/78780381 yum install Percona-Server-server-57 --nogpgcheck   这样可以不用检查公钥   关闭防火墙 开放系统的3306端口   如果设置了防火墙的话,我们搭建的系统把防火墙已经关了    firewall-cmd  --zone=public --add-port=3306/tcp --permanent    firewall-cmd --reload   mysql操作: 启动 service mysql start 查看运行状态service mysql status 关闭service mysql stop 重启service mysql restart   修改root账户的默认密码 cat /var/log/mysqld.log | grep "A temporary password"  获取原始密码(系统生成的) mysql_secure_installation   修改原始密码   删除percona  rpm -qa|grep -i percona  找到包 yum remove percona-release-0.1-4.noarch 删除安装及其依赖 rm -rf /var/lib/mysql/ /etc/my.cnf  注:这里将删除所有的数据文件(databases, tables, logs, etc.), 可能你环境中的datafile的位置并不是默认的/var/lib/mysql,而是其他的目录,卸载的时候根据实际情况删除文件   搭建percona cluster 集群环境 1 设置 vim /etc/selinux/config    SELINUX=disabled 参考:https://blog.csdn.net/chenhualeguan/article/details/54889571   在线安装 安装Persona仓库 yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm yum install Percona-XtraDB-Cluster-57 --nogpgcheck  在线安装太慢选择离线下载    离线安装: tar -vxf Percona-XtraDB-Cluster-5.7.25-rel28-31.35.1.Linux.x86_64.ssl101.tar.gz    在官网下载,这里选择101 针对的是centos7   这个免安装的不知道怎么启动换了一个   tar -xvf Percona-XtraDB-Cluster-5.7.23-31.31-r438-el7-x86_64-bundle.tar yum install *.rpm   发现安装有问题需要依赖包: yum install perl-IO-Socket-SSL.noarch yum install  perl-DBD-MySQL.x86_64 yum install  perl-Time-HiRes yum install  openssl yum install  openssl-devel yum install  socat   安装   yum源用最新 yum install percona-xtrabackup-24.x86_64 将这些需要的依赖的软件包安装后,再运行yum install *.rpm 这样终于将集群服务安装好了。 目前所有安装的内容: $ rpm -qa|grep -i percona                                                 Percona-XtraDB-Cluster-devel-57-5.7.23-31.31.2.el7.x86_64 percona-xtrabackup-24-2.4.13-1.el7.x86_64 Percona-XtraDB-Cluster-shared-57-5.7.23-31.31.2.el7.x86_64 Percona-XtraDB-Cluster-57-debuginfo-5.7.23-31.31.2.el7.x86_64 Percona-XtraDB-Cluster-57-5.7.23-31.31.2.el7.x86_64 percona-release-0.1-6.noarch Percona-XtraDB-Cluster-shared-compat-57-5.7.23-31.31.2.el7.x86_64 Percona-XtraDB-Cluster-test-57-5.7.23-31.31.2.el7.x86_64 Percona-XtraDB-Cluster-garbd-57-5.7.23-31.31.2.el7.x86_64 Percona-XtraDB-Cluster-server-57-5.7.23-31.31.2.el7.x86_64 Percona-XtraDB-Cluster-client-57-5.7.23-31.31.2.el7.x86_64 Percona-XtraDB-Cluster-full-57-5.7.23-31.31.2.el7.x86_64   配置pxc集群 vim /etc/my.cnf [mysqld] datadir=/var/lib/mysql user=mysql server-id=1 # PXC集群中MySQL实例的唯一ID,不能重复,必须是数字 wsrep_provider=/usr/lib64/galera3/libgalera_smm.so wsrep_cluster_name=pxc-cluster  #PXC集群的名称 wsrep_cluster_address=gcomm://10.3.13.213,10.3.13.197,10.3.13.194 wsrep_node_name=node1  #当前节点的名称 wsrep_node_address=10.3.13.213  #当前节点的IP wsrep_sst_method=xtrabackup-v2  #同步方法(mysqldump、rsync、xtrabackup wsrep_sst_auth= sstuser:Abc_123456  #同步使用的帐户 pxc_strict_mode=ENFORCING  #同步严厉模式 binlog_format=ROW  #基于ROW复制(安全可靠) default_storage_engine=InnoDB  #默认引擎 innodb_autoinc_lock_mode=2  #主键自增长不锁表   主节点操作: 在启动前现需要运行下:停止MySQL服务 service mysql stop  否则下面的运行不能启动 主节点的启动命令与从节点是有区别的。 systemctl start mysql@bootstrap.service systemctl stop mysql@bootstrap.service systemctl restart mysql@bootstrap.service   进入mysql进行操作: #查看 root 密码 cat /var/log/mysqld.log | grep "A temporary password" #修改 root 密码,建议先创建快照,以便恢复. mysql_secure_installation 设置的新密码:Yl*1990929   进入数据库 mysql -uroot -p 在数据库库中查看当前状态:mysql> show status like 'wsrep%'; 在结果中注意 | wsrep_incoming_addresses         | 10.3.13.213:3306                     | 目前集群中只有一个ip | wsrep_cluster_size               | 1                                    | 目前node2和node3还没有加进来   pxc集群启动问题:https://blog.csdn.net/geoffreychan/article/details/80499956   登录数据库 mysql -uroot -p 创建、授权、同步账号 mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'Abc_123456'; mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost'; mysql> FLUSH PRIVILEGES;   从节点启动: systemctl start mysqld 这里在启动从节点的时候一直报错,通过查找/var/lib/mysql下的错误日志和查看主节点的innobackup.backup.log 发现是同步账户sstuser的权限问题,按照下面这篇文章的步骤可以解决。 问题解决:https://www.cnblogs.com/aaron8219/p/9440255.html       问题:    mysql 转移到percona 运行sql语句报错    新节点加入到集群中,配置文件怎么整    旧节点重新加入   pxc配置文件my.cnf 参考:https://www.e-learn.cn/content/mysql/996673 wsrep_provider:  指定Galera库的路径 wsrep_cluster_name:  Galera集群的名称 wsrep_cluster_address:Galera集群中各节点地址。地址使用组通信协议gcomm://(group communication) wsrep_node_name:本节点在Galera集群中的名称 wsrep_node_address:本节点在Galera集群中的通信地址 wsrep_sst_method:state_snapshot_transfer(SST)使用的传输方法,可用方法有mysqldump、rsync和xtrabackup,前两者在传输时都需要对Donor加全局只读锁(FLUSH TABLES WITH READ LOCK),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时会无法正确处理死锁问题   参考:https://www.cnblogs.com/kevingrace/p/5685371.html?utm_source=itdadao&utm_medium=referral 基于Galera协议的高可用方案:PXC Galera是Codership提供的多主数据同步复制机制,可以实现多个节点间的数据同步复制以及读写,并且可保障数据库的服务高可用及数据一致性。 https://www.sohu.com/a/147032902_505779 https://blog.csdn.net/wo18237095579/article/details/81270954 https://www.cnblogs.com/liang545621/p/9400942.html   pxc优点: 1,服务高可用 多个节点的数据是相同的,只要最后一个节点可用,就还能运行。 1.同步复制,事务要么在所有节点提交或不提交。 2.多主复制,可以在任意节点进行写操作。 3.在从服务器上并行应用事件,真正意义上的并行复制。 4.节点自动配置。 5.数据一致性,不再是异步复制。   pxc缺点: 1,对InnoDB的事物控制是支持的,其他的不支持,5.7版本    mysql> show engines; 可以查看事物的支持。    存储引擎参考:https://www.cnblogs.com/andy6/p/5789248.html 加入新节点,开销大。需要复制完整的数据。 不能有效的解决写缩放问题,所有的写操作都将发生在所有节点上。 有多少个节点就有多少重复的数据。     PXC会使用大概是4个端口号 3306:数据库对外服务的端口号 4444:请求SST SST: 指数据一个镜象传输 xtrabackup , rsync ,mysqldump 在新节点加入时起作用 4567: 组成员之间进行沟通的一个端口号 4568: 传输IST用的。相对于SST来说的一个增量  ,节点下线,重启加入时起作用 名词: WS:write set 写数据集 IST: Incremental State Transfer 增量同步 SST:State Snapshot Transfer 全量同步     节点接收sql 请求后,对于ddl 操作,在commit之前,由wsrep API 调用galera 库进行集群内广播, 所有其他节点验证成功后事务在集群所有节点进行提交,反之roll back。pxc 保证整个集群所有数据的强一致性,满足CAP理论中满足:Consistency 和  Availability     对搭建的三个节点的数据库进行测试: mysql -uroot -p 在节点node3上  mysql> create database yl123_db; 在节点node2上  mysql> show databases; 会发现数据已经同步过去了   数据库设置权限: mysql> set global validate_password_policy=0  设置安全级别,0 是最低的 mysql> set global validate_password_length=4; 设置最小的密码长度 mysql> set PASSWORD=PASSWORD('123456');  重新设置密码 赋予远程访问的权限: mysql> grant all privileges  on *.* to root@'%' identified by "123456";  设置远程访问的权限 mysql>  flush privileges;     jdbc:mysql:loadbalance 连接mysql集群   ProxySQL是一个可以实现MySQL读写分离的轻量级工具 https://blog.51cto.com/903713/1882914 http://blog.itpub.net/28916011/viewspace-1965878/ https://www.imooc.com/qadetail/265370?t=430771   https://blog.csdn.net/nimasike/article/details/48048341   首先测试了下单个连接没有问题 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://10.3.13.213:3306/portalyl jdbc.username=root jdbc.password=123456   mysql分布式的jdbc连接 另外两个节点也需要设置远程访问的权限,然后把密码改掉试试 https://www.cnblogs.com/middleware/p/9444435.html   目前的操作是将三个数据库节点的root 密码都改为123456, 且都允许远程可读可写权限 spring中jdbc的配置: jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:loadbalance://10.3.13.213:3306,10.3.13.197:3306,10.3.13.194:3306/portalyl?loadBalanceAutoCommitStatementThreshold=5 jdbc.username=root jdbc.password=123456 能连接上数据库,且数据时同步的。   测试: 关闭node2 发现数据库集群还是可以正常使用 重启node2后,刚才更改的数据已经同步到node2中去了     新节点加入到集群中:     新节点加入集群时,需要从当前集群中选择一个Donor节点来同步数据,也就是所谓的state_snapshot_tranfer(SST)过程。 SST同步数据的方式由选项wsrep_sst_method决定,一般选择的是xtrabackup。     wsrep_sst_method:state_snapshot_transfer(SST)使用的传输方法,可用方法有mysqldump、rsync和xtrabackup,前两者在传输时都需要对Donor加全局只读锁(FLUSH TABLES WITH READ LOCK),xtrabackup则不需要(它使用percona自己提供的backup lock)。强烈建议采用xtrabackup       必须注意,新节点加入Galera时,会删除新节点上所有已有数据,再通过xtrabackup(假设使用的是该方式)从Donor处完整备份 所有数据进行恢复。所以,如果数据量很大,新节点加入过程会很慢。而且,在一个新节点成为Synced状态之前,不要同时加入其它新 节点,否则很容易将集群压垮。如果是这种情况,可以考虑使用wsrep_sst_method=rsync来做增量同步,既然是增量同步,最好保证 新节点上已经有一部分数据基础,否则和全量同步没什么区别,且这样会对Donor节点加上全局read only锁   参考:https://blog.51cto.com/arvin0213/2308595     如果是集群是新搭建的,或者说直接使用SST的方式加入新节点,那么新节点的配置就直接按照前面的主节点配置来就可以了,只是把wsrep_node_address改成 对应节点的IP即可,而对于已经运行了一段事件的集群,新加入节点使用SST传送全量数据的方式同步的代价比较高,所以下面讨论一个IST方式加入新节点同步数据的方式   旧节点加入到集群中:     如果旧节点加入Galera集群,说明这个节点在之前已经在Galera集群中呆过,有一部分数据基础,缺少的只是它离开集群时的数据。 这时加入集群时,会采用IST(incremental snapshot transfer)传输机制,即使用增量传输。但注意,这部分增量传输的数据源是Donor 上缓存在GCache文件中的,这个文件有大小限制,如果缺失的数据范围超过已缓存的内容,则自动转为SST传输。如果旧节点上的数据和Donor 上的数据不匹配(例如这个节点离组后人为修改了一点数据),则自动转为SST传输。关于GCache以及Galera是如何判断数据状态的,本文不展开 描述,可参见Understanding GCache in Galera。       节点在退出集群后, 从新加入的时候, 如果这个故障节点的ip 在自己的配置文件 wsrep_cluster_address 的选项中的第一个ip . 那么这个节点是永远都无法再加入这个集群了.参考:http://blog.itpub.net/133735/viewspace-2140548/   PXC集群安装部署指南 当前的虚拟机版本:    CentOS Linux release 7.5.1804 (Core) 注意:下面的操作需要在每一个节点上进行。 1、开放系统3306,4444,4567,4568端口     firewall-cmd --zone=public --add-port=3306/tcp --permanent     firewall-cmd --zone=public --add-port=4444/tcp --permanent     firewall-cmd --zone=public --add-port=4567/tcp --permanent     firewall-cmd --zone=public --add-port=4568/tcp --permanent     firewall-cmd --reload   2、设置 vim /etc/selinux/config         SELINUX=disabled       需要reboot重启后生效   3、检查是否安装有MySQL Server: 在安装percona之前需要将mysql以及mariadb删除     rpm -qa | grep mysql     rpm -qa | grep  mariadb 查找是否有mysql或mariadb存在     删除方法:     rpm -e mysql   #普通删除模式     rpm -e --nodeps mysql    #强行删除模式     yum remove mariadb-libs-5.5.41-2.el7_0.x86_64     要注意的是mariadb也是不能存在的,有的话就要删除,删除的时候有依赖关系,直接yum卸载   4、安装     目前安装的版本是5.7     在线安装     <1>安装yum源        yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm     <2>安装依赖包以及备份所需的包        yum install  perl-IO-Socket-SSL.noarch        yum install  perl-DBD-MySQL.x86_64        yum install  perl-Time-HiRes        yum install  openssl        yum install  openssl-devel        yum install  socat        yum install percona-xtrabackup-24.x86_64 (备份用到的软件)        yum install Percona-XtraDB-Cluster-57     离线安装        下载安装 perl-IO-Socket-SSL.noarch、 perl-DBD-MySQL.x86_64、 perl-Time-HiRes                openssl、 openssl-devel、socat、percona-xtrabackup-24.x86_64 rpm安装包        在官网下载http://www.percona.com/        tar -xvf Percona-XtraDB-Cluster-5.7.23-31.31-r438-el7-x86_64-bundle.tar        yum install *.rpm   5、配置文件 my.cnf    vim /etc/my.cnf     [mysqld]     datadir=/var/lib/mysql     user=mysql     wsrep_provider=/usr/lib64/galera3/libgalera_smm.so   指定Galera库的路径     wsrep_cluster_name=pxc-cluster  #PXC集群的名称     wsrep_cluster_address=gcomm://10.3.13.213,10.3.13.197,10.3.13.194      集群中各节点地址。地址使用组通信协议gcomm://(group communication)     wsrep_node_name=node1  #当前节点的名称     wsrep_node_address=10.3.13.213  #当前节点的IP(这里也可以填写host文件中ip对应的名称)     wsrep_sst_method=xtrabackup-v2  #同步方法(mysqldump、rsync、xtrabackup)     wsrep_sst_auth= sstuser:Abc_123456  #同步使用的帐户,格式为:"用户:密码"     pxc_strict_mode=ENFORCING  #同步严厉模式      binlog_format=ROW  #基于ROW复制(安全可靠)     default_storage_engine=InnoDB  #默认引擎     innodb_autoinc_lock_mode=2  #主键自增长不锁表    注:   wsrep_cluster_address配置节点的ip,注意在配置当前节点的值时,不要将当前节点的ip放在第一个   6、启动主节点    systemctl start mysql@bootstrap.service 注:第一个节点的启动命令与后面节点的启动命令是不一样的   7、在主节点进入mysql进行操作(更改密码,授予权限)     #查看 root 密码     cat /var/log/mysqld.log | grep "A temporary password"     #修改 root 密码,建议先创建快照,以便恢复.     mysql_secure_installation     进入数据库     mysql -uroot -p     设置root密码访问权限     mysql> set global validate_password_policy=0  设置安全级别,0 是最低的     mysql> set global validate_password_length=4; 设置最小的密码长度     mysql> set PASSWORD=PASSWORD('123456');  重新设置密码     赋予远程访问的权限:     mysql> grant all privileges  on *.* to root@'%' identified by "123456";  设置远程访问的权限     mysql>  flush privileges;     创建、授权、同步账号     mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'Abc_123456';     mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';     mysql> FLUSH PRIVILEGES; 8、从节点启动     systemctl start mysqld 9、查看数据库状态    查看本机的mysql状态    systemctl status mysqld    在数据库库中查看当前状态:mysql> show status like 'wsrep%';    | wsrep_incoming_addresses         | 10.3.13.213:3306   当前在集群中的节点ip                        | wsrep_cluster_size               | 1                  集群中节点个数   基于Galera协议的高可用方案:PXC 优点: 1、服务高可用 多个节点的数据是相同的,只要最后一个节点可用,就还能运行。    无需集中管理。可以在任何时间点失去任何节点,但是集群将照常工作,不受影响。 2、同步复制,事务要么在所有节点提交或不提交。各节点间无延迟且节点宕机不会导致数据丢失。 3、多主复制,可以在任意节点进行写操作。 4、在从服务器上并行应用事件,真正意义上的并行复制。 5、节点自动配置。无需手工备份当前数据库并拷贝至新节点。 6、数据一致性,不再是异步复制。 7、PXC最大的优势:强一致性、无同步延迟 8、应用程序的兼容性:无需更改应用程序 缺点: 1、对InnoDB的事物控制是支持的,其他的不支持,5.7版本 2、加入新节点,开销大。需要复制完整的数据。新加入节点采用SST时代价高; 3、不能有效的解决写缩放问题,所有的写操作都将发生在所有节点上。 4、有多少个节点就有多少重复的数据。 5、写入效率取决于节点中最弱的一台,因为PXC集群采用的是强一致性原则,一个更改操作在所有节点都成功才算执行成功。    集群吞吐量/性能取决于短板; 6、所有表都要有主键; 7、锁冲突、死锁问题相对更多 8、不支持LOCK TABLE等显式锁操作; 9、不支持XA;                                                                                                     
上一篇:标签无效 "/zabbix_export/date": "YYYY-MM-DDThh:mm:ssZ" 预计。


下一篇:Percona 5.6.43 遇到的一个bug