pxc percona xtradb cluster
percona 基于mysql数据库二次开发的数据库产品
相对于mysql 可以支持更大的并发
集群是多主架构 不论哪一个节点坏掉 集群都能正常运行 保证高可用
xtradb 存储引擎
mysql myisam-4版本 innodb -5版本
pxc percona的集群
特点:
1.要搭建pxc架构最少需要3台percona的实例来组成集群,单个实例之间不是主从的模式,而是各自为主,所以三者为对等关系,不分从属,就叫做多主架构,客户端写入数据和读取数据时,连接哪一个实例都是一样的,读取的数据也是相同的,写入任意一个实例后,集群将会自己同步到其他的实例上,这种架构不共享任何的数据,是一种高冗余架构
2.实现数据库集群数据同步的强一致性
原理:
客户端 – 写入请求 --节点A完成写入–将写入的操作广播至集群的B,C节点–B,C节点收到写入请求会进行核对,执行这些操作是否会产生冲突–如果不会,就执行写入操作,并把完成的结果返回给节点A–节点A收到所有节点反馈完成的消息后执行提交操作 —将结果返回给客户端
pxc集群的优点:
1.多主架构 集群中没有主从之分 每个节点都可以写入和读取数据
2.节点数据强一致性(同步)
3.并行复制
4.集群节点故障在恢复或者添加新的节点,节点的数据自动同步数据,不需要手动同步
5.支持增量复制 也支持全量复制
pxc依赖的库文件
gelera(自身) wsrepc(集群)
pxc使用的端口:
3306 :用来提供数据库服务
4567 :集群中节点通信的端口
4568:节点间进行增量复制(IST)使用的端口
4444:节点间进行全量复制(SST)使用的端口
搭建percona集群
第一台 | 192.168.10.10 |
---|---|
第二台 | 192.168.10.30 |
第三台 | 192.168.10.40 |
安装percona(三台操作一样)
[root@localhost ~]# rpm -ivh percona-release-0.1-6.noarch.rpm
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim percona-release.repo
#8 改0
#9删除
#14 改0
4 [percona-release-$basearch]
5 name = Percona-Release YUM repository - $basearch
6 baseurl = http://repo.percona.com/release/$releasever/RPMS/$basearch
7 enabled = 1
8 gpgcheck = 0
9
10 [percona-release-noarch]
11 name = Percona-Release YUM repository - noarch
12 baseurl = http://repo.percona.com/release/$releasever/RPMS/noarch
13 enabled = 1
14 gpgcheck = 0
#14行以下全部删除
[root@localhost yum.repos.d]# cd
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost yum.repos.d]# yum -y install Percona-XtraDB-Cluster-57
[root@localhost ~]# cd /etc/percona-xtradb-cluster.conf.d/
第一台:
[root@localhost ~]# cd /etc/percona-xtradb-cluster.conf.d/
[root@localhost percona-xtradb-cluster.conf.d]# ls
mysqld.cnf mysqld_safe.cnf wsrep.cnf
[root@localhost percona-xtradb-cluster.conf.d]# vim mysqld.cnf
更改
server-id=1 #节点标识
8 datadir=/usr/local/pxc/data #数据文件的目录
10 log-error=/usr/local/pxc/log/mysqld.log #错误日志存放的目录
11 pid-file=/usr/local/pxc/data/mysqld.pid #pid文件存放的目录
[root@localhost percona-xtradb-cluster.conf.d]# mkdir /usr/local/pxc
[root@localhost percona-xtradb-cluster.conf.d]# mkdir /usr/local/pxc/data
[root@localhost percona-xtradb-cluster.conf.d]# mkdir /usr/local/pxc/log
[root@localhost percona-xtradb-cluster.conf.d]# chown -R mysql:mysql /usr/local/pxc/
[root@localhost percona-xtradb-cluster.conf.d]# vim wsrep.cnf
8 wsrep_cluster_address=gcomm://192.168.10.10,192.168.10.30,192.168.10.40 #指定集群的节点
25 wsrep_node_address=192.168.10.10 #指定当前节点的ip
27 wsrep_cluster_name=pxc-cluster #集群名称
30 wsrep_node_name=pxc-cluster-node-1 #节点名称
33 pxc_strict_mode=PERMISSIVE #同步数据时为宽容模式
39 wsrep_sst_auth="root:123.com" #全量复制使用的用户名和密码
[root@localhost percona-xtradb-cluster.conf.d]# scp mysqld.cnf wsrep.cnf root@192.168.10.30:/etc/percona-xtradb-cluster.conf.d/
[root@localhost percona-xtradb-cluster.conf.d]# scp mysqld.cnf wsrep.cnf root@192.168.10.40:/etc/percona-xtradb-cluster.conf.d/
第二台:
[root@localhost ~]# cd /etc/percona-xtradb-cluster.conf.d/
[root@localhost percona-xtradb-cluster.conf.d]# vim mysqld.cnf
7 server-id=2
[root@localhost percona-xtradb-cluster.conf.d]# vim wsrep.cnf
25 wsrep_node_address=192.168.10.30
30 wsrep_node_name=pxc-cluster-node-2
[root@localhost percona-xtradb-cluster.conf.d]# mkdir /usr/local/pxc
[root@localhost percona-xtradb-cluster.conf.d]# mkdir /usr/local/pxc/data
[root@localhost percona-xtradb-cluster.conf.d]# mkdir /usr/local/pxc/log
[root@localhost percona-xtradb-cluster.conf.d]# chown -R mysql:mysql /usr/local/pxc/
第三台
[root@localhost ~]# cd /etc/percona-xtradb-cluster.conf.d/
[root@localhost percona-xtradb-cluster.conf.d]# vim mysqld.cnf
7 server-id=3
[root@localhost percona-xtradb-cluster.conf.d]# vim wsrep.cnf
25 wsrep_node_address=192.168.10.40
30 wsrep_node_name=pxc-cluster-node-3
[root@localhost percona-xtradb-cluster.conf.d]# mkdir /usr/local/pxc
[root@localhost percona-xtradb-cluster.conf.d]# mkdir /usr/local/pxc/data
[root@localhost percona-xtradb-cluster.conf.d]# mkdir /usr/local/pxc/log
[root@localhost percona-xtradb-cluster.conf.d]# chown -R mysql:mysql /usr/local/pxc/
第一台
[root@localhost ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
15 skip-grant-tables 添加跳过权限 让用户没有密码也能登入数据库
[root@localhost ~]# systemctl start mysql@bootstrap
[root@localhost ~]# mysql -uroot -p #登入数据库
mysql> update mysql.user set authentication_string=password("123.com") where User="root"; #更新用户列表
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> flush privileges; #先刷新
Query OK, 0 rows affected (0.01 sec)
mysql> set password=password("123.com");
ERROR 1133 (42000): Can't find any matching row in the user table #需要设置密码有效期
mysql> alter user "root"@"localhost" password expire never; #让这个密码永久生效
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on *.* to "root"@"localhost" identified by "123.com";
Query OK, 0 rows affected, 1 warning (0.00 sec)
[root@localhost ~]# vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf
去掉跳过权限 第十五行
15 skip-grant-tables #去掉这一行
[root@localhost ~]# systemctl restart mysql@bootstrap
[root@localhost ~]# mysql -uroot -p123.com
第二台 第一台上设置密码 同步到第二和第三台
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# mysql -uroot -p123.com
第三台
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# mysql -uroot -p123.com
验证:
第一台:创建一个库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> create database haha;
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| haha |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
第二台:查看
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| haha |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)