温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySQL Galera集群搭建流程(Percona XtraDB Cluster 5.7)

发布时间:2020-08-11 05:38:33 来源:ITPUB博客 阅读:308 作者:feelpurple 栏目:MySQL数据库
避免创建偶数节点数量的集群,因为这样会导致脑裂。
Linux版本:CentOS 6.5
IP信息:
Node     IP
Node 1     10.20.30.10
Node 2     10.20.30.20
Node 3     10.20.30.30

关掉selinux和防火墙,否则后面初始化集群会失败
[root@localhost mysql_log_57]# vim /etc/selinux/config
SELINUX=disabled

1. 在所有节点上安装Percona XtraDB集群软件
安装YUM源
[root@localhost ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

 检查包是否可用
[root@localhost install]# yum list | grep Percona-XtraDB-Cluster-57
Percona-XtraDB-Cluster-57.x86_64            5.7.18-29.20.1.el6          percona-release-x86_64
Percona-XtraDB-Cluster-57-debuginfo.x86_64  5.7.18-29.20.1.el6          percona-release-x86_64

 安装Percona XtraDB集群包
[root@localhost install]# yum install Percona-XtraDB-Cluster-57

 安装时提示缺少下面的包
 Error: Package: Percona-XtraDB-Cluster-server-57-5.7.18-29.20.1.el6.x86_64 (percona-release-x86_64)
Requires: socat
Error: Package: percona-xtrabackup-24-2.4.7-2.el6.x86_64 (percona-release-x86_64)
Requires: libev.so.4()(64bit)
安装缺少的socat和libev包
到fedora官网下载repository
在下面网页中下载epel-release开头的rpm包
http://dl.fedoraproject.org/pub/epel/6/x86_64/
 
上传rpm包到服务器
 
安装repository包
[root@localhost install]# yum localinstall epel-release-6-8.noarch.rpm
安装socat、libev
[root@localhost install]# yum install socat libev
 
再次安装Percona XtraDB集群包
[root@localhost install]# yum install Percona-XtraDB-Cluster-57
 
注意,如果服务器上安装过数据库,/etc/my.cnf配置文件已经存在,需要将其改名,否则会对集群启动产生影响
[root@localhost ~]# mv /etc/my.cnf /etc/my_5.7_mha.cnf

查看数据目录下的内容
[root@localhost usr]# cd /var/lib/mysql
[root@localhost mysql]# ls -trl
total 126800
-rw-r-----. 1 mysql mysql 50331648 Jul  1 19:21 ib_logfile1
-rw-r-----. 1 mysql mysql       56 Jul  1 19:21 auto.cnf
-rw-------. 1 mysql mysql     1676 Jul  1 19:21 ca-key.pem
-rw-r--r--. 1 mysql mysql     1083 Jul  1 19:21 ca.pem
-rw-------. 1 mysql mysql     1676 Jul  1 19:21 server-key.pem
-rw-r--r--. 1 mysql mysql     1087 Jul  1 19:21 server-cert.pem
-rw-------. 1 mysql mysql     1680 Jul  1 19:21 client-key.pem
-rw-r--r--. 1 mysql mysql     1087 Jul  1 19:21 client-cert.pem
-rw-r--r--. 1 mysql mysql      452 Jul  1 19:21 public_key.pem
-rw-------. 1 mysql mysql     1680 Jul  1 19:21 private_key.pem
drwxr-x---. 2 mysql mysql     4096 Jul  1 19:21 performance_schema
drwxr-x---. 2 mysql mysql     4096 Jul  1 19:21 mysql
drwxr-x---. 2 mysql mysql    12288 Jul  1 19:21 sys
-rw-r-----. 1 mysql mysql      417 Jul  1 19:21 ib_buffer_pool
-rw-rw----. 1 root  root         5 Jul  1 19:21 mysqld_safe.pid
-rw-------. 1 mysql mysql        5 Jul  1 19:21 mysql.sock.lock
srwxrwxrwx. 1 mysql mysql        0 Jul  1 19:21 mysql.sock
-rw-r-----. 1 mysql mysql        5 Jul  1 19:21 localhost.localdomain.pid
-rw-r-----. 1 mysql mysql  3932160 Jul  1 19:21 xb_doublewrite
-rw-r-----. 1 mysql mysql 12582912 Jul  1 19:21 ibtmp1
-rw-r-----. 1 mysql mysql 12582912 Jul  1 19:21 ibdata1
-rw-r-----. 1 mysql mysql 50331648 Jul  1 19:21 ib_logfile0
-rw-r-----. 1 mysql mysql     4653 Jul  1 19:22 localhost.localdomain.er

 默认安装的软件目录
 查看软件目录下的内容
[root@localhost ~]# cd /usr/
[root@localhost usr]# ls -trl
total 144
drwxr-xr-x.   2 root root  4096 Sep 23  2011 games
drwxr-xr-x.   2 root root  4096 Sep 23  2011 etc
drwxr-xr-x.   4 root root  4096 Mar 23 16:03 src
lrwxrwxrwx.   1 root root    10 Mar 23 16:03 tmp -> ../var/tmp
dr-xr-xr-x.  15 root root  4096 Mar 23 16:17 lib
drwxr-xr-x.  42 root root  4096 Apr  3 03:15 include
drwxr-xr-x.  22 root root 12288 Apr  3 03:41 libexec
drwxr-xr-x.  14 root root  4096 Apr  9 08:25 local
dr-xr-xr-x.   2 root root 36864 Jul  1 16:11 bin
dr-xr-xr-x.  92 root root 49152 Jul  1 16:11 lib64
dr-xr-xr-x.   2 root root 12288 Jul  1 16:11 sbin
drwxr-xr-x. 175 root root  4096 Jul  1 16:11 share
 
启动Percona XtraDB集群服务
service mysql start
 
查看集群状态
[root@localhost mysql]# service mysql status
SUCCESS! MySQL (Percona XtraDB Cluster) running (2263)
 
实际上集群的进程就是mysqld的进程
[root@localhost mysql]# service mysql status
SUCCESS! MySQL (Percona XtraDB Cluster) running (2928)
[root@localhost mysql]# ps -ef|grep mysql
root      2824     1  0 19:56 pts/1    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/localhost.localdomain.pid
mysql  2928 2824  2 19:56 pts/1    00:00:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/localhost.localdomain.err --pid-file=/var/lib/mysql/localhost.localdomain.pid --wsrep_start_position=00000000-0000-0000-0000-000000000000:-1
root      2982  2711  0 19:57 pts/1    00:00:00 grep mysql

重新设置root密码
[root@localhost log]# mysqld_safe --skip-grant-tables --skip-networking&
[root@localhost log]# mysql -uroot
mysql> update mysql.user set authentication_string=password('root') where user='root';
mysql> commit;
[root@localhost log]# mysqladmin shutdown
[root@localhost log]# service mysql start
Starting MySQL (Percona XtraDB Cluster).. SUCCESS!
[root@localhost ~]# mysql -uroot -p
mysql> alter user root@localhost identified by 'root';
 
2. 在所有节点上配置写集合复制相关的参数
这包括Glera库的路径和其他节点的位置

停掉集群服务
[root@localhost ~]# service mysql stop
Shutting down MySQL (Percona XtraDB Cluster)... SUCCESS!
 
参数说明:
wsrep_provider        指定Galera库的路径
wsrep_cluster_name    指定集群各个节点的IP地址
wsrep_node_name        指定每个节点的逻辑名。如果没有指定这个参数,默认会使用主机名
wsrep_node_address    指定节点的IP地址
wsrep_sst_method    默认,Percona XtraDB集群使用Percona XtraBackup来做状态快照传输(SST)。强烈建议将这个参数设为wsrep_sst_method=xtrabackup-v2。使用这个方法需要配置一个数据库用户。在wsrep_sst_auth参数中指定SST认证用户。
wsrep_sst_auth        指定SST认证用户名和密码,格式是:。
性和不支持的特性
binlog_format        Gelera只支持行级的复制,所以设置 binlog_format=ROW
default_storage_engine    Galera只支持InnoDB存储引擎。不支持MyISAM或其他非事务性的存储引擎。所以设置 default_storage_engine=InnoDB
innodb_autoinc_lock_mode    Gelara只支持适合InnoDB的interleaved (2)锁模式。将这个参数设为traditional (0)或consecutive (1)锁模式会引起死锁,
进而将会导致复制失败。所以设置 innodb_autoinc_lock_mode=2
 
节点1配置文件
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address="gcomm://10.20.30.10,10.20.30.20,10.20.30.30"
wsrep_node_name=pxc1
wsrep_node_address=10.20.30.10
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
 
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
 
basedir = /usr
datadir = /var/lib/mysql
pid-file=/var/run/mysqld/mysqld_galera.pid
log-error=/var/log/mysqld_galera.log
port = 3306
user = mysql
socket = /var/lib/mysql/mysql.sock
skip-external-locking
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
net_buffer_length = 2K
read_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 256K
max_connections = 1000
#log-bin = /mysql_log_57/galera-bin
#servier-id = 1000

节点2配置文件
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://10.20.30.10,10.20.30.20,10.20.30.30
wsrep_node_name=pxc2
wsrep_node_address=10.20.30.20
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
 
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

basedir = /usr
datadir = /var/lib/mysql
pid-file=/var/run/mysqld/mysqld_galera.pid
log-error=/var/log/mysqld_galera.log
port = 3306
user = mysql
socket = /var/lib/mysql/mysql.sock
skip-external-locking
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
net_buffer_length = 2K
read_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 256K
max_connections = 1000
#log-bin = /mysql_log_57/galera-bin
#servier-id = 1000

节点3配置文件
[mysqld]
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://10.20.30.10,10.20.30.20,10.20.30.30
wsrep_node_name=pxc3
wsrep_node_address=10.20.30.30
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:passw0rd
 
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

basedir = /usr
datadir = /var/lib/mysql
pid-file=/var/run/mysqld/mysqld_galera.pid
log-error=/var/log/mysqld_galera.log
port = 3306
user = mysql
socket = /var/lib/mysql/mysql.sock
skip-external-locking
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
net_buffer_length = 2K
read_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 256K
max_connections = 1000
#log-bin = /mysql_log_57/galera-bin
#servier-id = 1000

查看模块
[root@localhost ~]# ll /usr/lib64/galera3/libgalera_smm.so
-rwxr-xr-x. 1 root root 2404960 May 31 23:07 /usr/lib64/galera3/libgalera_smm.so

3. 在第一个节点上初始化集群
这个节点必须包含全部的数据,作为集群的数据源。
 
在第一个节点上执行下面操作
[root@localhost mysql_log_57]# /etc/init.d/mysql bootstrap-pxc
Starting MySQL (Percona XtraDB Cluster)..... SUCCESS!
 
查看集群状态
[root@localhost mysql_log_57]# mysql -uroot -p
mysql> show status like 'wsrep%';
| wsrep_local_state_comment        | Synced                               |    // 节点是同步状态
| wsrep_cluster_size               | 1                                    |    // 集群只有一个节点
| wsrep_cluster_status             | Primary                              |    // 主节点
| wsrep_connected                  | ON                                   |    // 已经连接到集群
| wsrep_ready                      | ON                                   |        // 已经做好写集合的复制准备
 
在增加其他节点到集群中前,创建SST的数据库用户。这个账户必须和配置文件中的信息相符。
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'passw0rd';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO
->   'sstuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

4. 增加其他节点到集群中
当配置好wsrep_cluster_address等配置文件后,启动该节点,它会自动加入集群并开始同步数据。
注意:不要在相同时间加入多个节点到集群中,以避免巨大的网络流量压力。
默认,Percona XtraDB集群使用Percona XtraBackup来传输状态快照 State Snapshot Transfer (SST)。
需要满足下面条件:
设置wsrep_sst_method参数为xtrabackup-v2,并使用wsrep_sst_auth变量提供SST用户认证。
在初始化节点上面创建SST用户。
 
启动第2个节点
[root@localhost ~]# /etc/init.d/mysql start
在第2个节点上,查看用户和集群状态
可以看到SST用户已经复制到第2节点,集群已经有了两个节点,size变为2
mysql> select user, host from mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| mysql.sys | localhost |
| root      | localhost |
| sstuser   | localhost |
+-----------+-----------+
3 rows in set (0.01 sec)
mysql> show status like 'wsrep%';
| wsrep_local_state_comment        | Synced                               |
| wsrep_cluster_size               | 2                                    |
 
增加第3个节点到集群中
[root@localhost ~]# /etc/init.d/mysql start
 
在第3个节点检查集群的状态
mysql> show status like 'wsrep%';
| wsrep_cluster_size               | 3                                                  |
可以看到集群的wsrep_cluster_size参数变为3,集群增加到第3个节点

5. 验证复制效果
在第2个节点上创建一个数据库
mysql> CREATE DATABASE percona;
Query OK, 1 row affected (0.07 sec)
 
在第3个节点上,在刚刚创建的库里面创建一张表
mysql> USE percona;
Database changed
mysql> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));
Query OK, 0 rows affected (0.05 sec)
 
在第1个节点上,往这张表中插入一条数据
mysql> INSERT INTO percona.example VALUES (1, 'percona1');
Query OK, 1 row affected (0.23 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
 
在第2个节点查看这张表中的数据
mysql> SELECT * FROM percona.example;
+---------+-----------+
| node_id | node_name |
+---------+-----------+
|       1 | percona1  |
+---------+-----------+
1 row in set (0.00 sec)
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI