MySQL Galera集群搭建流程 Percona XtraDB Cluster 5.7
发布时间:2022-03-31 10:41:53 所属栏目: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/selinu
避免创建偶数节点数量的集群,因为这样会导致脑裂。 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) (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐