如何在Debian 8上为MySQL安装Percona XtraDB Cluster

在本文中,我将向您展示如何在多主复制中配置具有三个节点的MySQL数据库集群。 多主复制允许在每个节点中写入记录,因此如果一个节点将失败,我们可以在另一个上工作,就好像没有发生任何事情一样。

Percona的官方文档可以在官方网站https://www.percona.com/找到

首先,为什么我们选择三个节点,而不仅仅是两个节点? 在任何集群中,节点数应该是奇数,所以在节点断开的情况下,我们假设最高的服务器组具有新数据,并且应该被复制到下行节点以避免数据丢失。 这只与数据复制中的冲突有关,我们不会将数据写入只断开连接的节点。

这是为了避免被称为分裂脑的情况,我们不能自动选择哪个节点具有正确的数据。 想想两个节点彼此断开的2节点集群的例子,同一条记录写入两个节点:谁返回在线时获胜? 我们不知道,所以分裂的大脑发生了,我们必须手动决定这个记录是正确的。

确定集群中部分集群所需的节点数量是正确的数据称为QUORUM,在我们的例子中,法定人数将为2.所以我们需要2个服务器总是相互连接。 如果所有三个节点都会下降,我们有一个分裂的大脑,我们必须决定服务器应该手动进入引导模式,这是确定将是从主脑恢复的主要服务器的过程。

在Debian上配置Percona XtraDB集群8

本教程介绍如何在Debian 8服务器上安装和配置三个Percona XtraDB Cluster节点,我们将使用Percona存储库中的软件包。

  • 服务器1
    • 主机名: mysql1.local.vm
    • IP地址: 192.168.152.100
  • 节点2
    • 主机名: mysql2.local.vm
    • IP地址: 192.168.152.110
  • 节点3
    • 主机名: mysql3.local.vm
    • IP地址: 192.168.152.120

在每个主机上,按如下所示修改文件/ etc / hosts,以确保DNS能正常工作。

127.0.0.1 localhost
192.168.152.100 mysql1.local.vm mysql1
192.168.152.110 mysql2.local.vm mysql2
192.168.152.120 mysql3.local.vm mysql3

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

先决条件

本教程中描述的过程需要以下最小的服务器设置:

第1步.安装Percona Xtradb群集

在所有节点上,以root身份执行以下命令:

wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb
apt-get update
apt-get -y install percona-xtradb-cluster-57

显然,输入你喜欢选择的mysql密码。

软件包安装完成后, mysqld将自动启动。 使用/etc/init.d/mysql stop在所有三个节点上停止mysqld

第2步.配置第一个节点

单个节点应配置为能够引导集群。 有关引导群集的更多信息,请参阅引导群集

  1. 确保在[mysqld]部分末尾的第一个节点(mysql1.local.vm)中将这些行添加到配置文件/etc/mysql/my.cnf中:

    [mysqld]

    ... # Path to Galera library
    wsrep_provider=/usr/lib/libgalera_smm.so

    # Cluster connection URL contains the IPs of node#1, node#2 and node#3
    wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120

    # In order for Galera to work correctly binlog format should be ROW
    binlog_format=ROW

    # MyISAM storage engine has only experimental support
    default_storage_engine=InnoDB

    # This InnoDB autoincrement locking mode is a requirement for Galera
    innodb_autoinc_lock_mode=2

    # Node #1 address
    wsrep_node_address=192.168.152.100

    # SST method
    wsrep_sst_method=xtrabackup-v2

    # Cluster name
    wsrep_cluster_name=my_ubuntu_cluster

    # Authentication for SST method
    wsrep_sst_auth="sstuser:PASSW0RD"

    请注意我在“PASSW0RD”中设置的密码。

  2. 使用以下命令启动第一个节点:

    root@mysql1:~# /etc/init.d/mysql bootstrap-pxc
    

    该命令将启动第一个节点并引导集群,如果一切正常,您将看到如下所示的内容:

    root@mysql1:~# /etc/init.d/mysql bootstrap-pxc
    [ ok ] Bootstrapping Percona XtraDB Cluster database server: mysqld ..
    root@mysql1:~#
  3. 第一个节点启动后,使用经典的mysql -p命令连接到mysql,然后可以检查集群状态,执行查询显示状态,如'wsrep%';如下例所示:

  4. mysql> show status like 'wsrep%';
    +----------------------------+--------------------------------------+
    | Variable_name              | Value                                |
    +----------------------------+--------------------------------------+
    | wsrep_local_state_uuid     | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |
    ...
    | wsrep_local_state          | 4                                    |
    | wsrep_local_state_comment  | Synced                               |
    ...
    | wsrep_cluster_size         | 1                                    |
    | wsrep_cluster_status       | Primary                              |
    | wsrep_connected            | ON                                   |
    ...
    | wsrep_ready                | ON                                   |
    +----------------------------+--------------------------------------+
    59 rows in set (0.00 sec)
    

此输出显示集群已成功引导。

要使用XtraBackup执行状态快照传输 ,请设置具有适当权限的新用户:

mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'PASSW0RD';
mysql> GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql> FLUSH PRIVILEGES;

注意

MySQL根帐户也可以用于执行SST,但使用不同的(非root用户)更安全。

第3步.配置第二个节点

  1. 在第二个节点(mysql2.local.vm)上的配置文件/etc/mysql/my.cnf中附加以下几行,以便它包含以下数据:

    [mysqld]

    ... # Path to Galera library
    wsrep_provider=/usr/lib/libgalera_smm.so

    # Cluster connection URL contains the IPs of node#1, node#2 and node#3
    wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120

    # In order for Galera to work correctly binlog format should be ROW
    binlog_format=ROW

    # MyISAM storage engine has only experimental support
    default_storage_engine=InnoDB

    # This InnoDB autoincrement locking mode is a requirement for Galera
    innodb_autoinc_lock_mode=2

    # Node #2 address
    wsrep_node_address=192.168.152.110

    # SST method
    wsrep_sst_method=xtrabackup-v2

    # Cluster name
    wsrep_cluster_name=my_ubuntu_cluster

    # Authentication for SST method
    wsrep_sst_auth="sstuser:PASSW0RD"
  2. 使用以下命令启动第二个节点(注意这一次,你可以看到不是在boostrap模式!!):

    root@mysql2:~# /etc/init.d/mysql start
    
  3. 服务器启动后,应自动收到SST 。 现在可以在两个节点上检查群集状态。 以下是第二个节点(mysql2.local.vm)的状态示例:

  4. mysql> show status like 'wsrep%';
    +----------------------------+--------------------------------------+
    | Variable_name              | Value                                |
    +----------------------------+--------------------------------------+
    | wsrep_local_state_uuid     | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |
    ...
    | wsrep_local_state          | 4                                    |
    | wsrep_local_state_comment  | Synced                               |
    ...
    | wsrep_cluster_size         | 2                                    |
    | wsrep_cluster_status       | Primary                              |
    | wsrep_connected            | ON                                   |
    ...
    | wsrep_ready                | ON                                   |
    +----------------------------+--------------------------------------+
    40 rows in set (0.01 sec)
    

    此输出显示新节点已成功添加到群集中。 请注意,变量wsrep_cluster_size已成为2,而不是我们所做的第一个查询之一。

第4步.配置第三个节点

  1. 在第二个节点(mysql3.local.vm)上 的配置文件 /etc/mysql/my.cnf中 附加以下几行 ,因此它包含以下配置

    [mysqld]

    ... # Path to Galera library
    wsrep_provider=/usr/lib/libgalera_smm.so

    # Cluster connection URL contains the IPs of node#1, node#2 and node#3
    wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120

    # In order for Galera to work correctly binlog format should be ROW
    binlog_format=ROW

    # MyISAM storage engine has only experimental support
    default_storage_engine=InnoDB

    # This InnoDB autoincrement locking mode is a requirement for Galera
    innodb_autoinc_lock_mode=2

    # Node #2 address
    wsrep_node_address=192.168.152.120

    # SST method
    wsrep_sst_method=xtrabackup-v2

    # Cluster name
    wsrep_cluster_name=my_ubuntu_cluster

    # Authentication for SST method
    wsrep_sst_auth="sstuser:PASSW0RD"
  2. 使用以下命令启动第三个节点:

    root@mysql3:~# /etc/init.d/mysql start
    
  3. 服务器启动后,应自动收到SST。 可以在所有节点上检查群集状态。 以下是第三个节点(mysql3.local.vm)的状态示例:

    mysql> show status like 'wsrep%';
    +----------------------------+--------------------------------------+
    | Variable_name              | Value                                |
    +----------------------------+--------------------------------------+
    | wsrep_local_state_uuid     | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |
    ...
    | wsrep_local_state          | 4                                    |
    | wsrep_local_state_comment  | Synced                               |
    ...
    | wsrep_cluster_size         | 3                                    |
    | wsrep_cluster_status       | Primary                              |
    | wsrep_connected            | ON                                   |
    ...
    | wsrep_ready                | ON                                   |
    +----------------------------+--------------------------------------+
    40 rows in set (0.01 sec)
    

    此输出确认第三个节点已加入群集。 再次来看看wsrep_cluster_size现在已经变成3了,而不是2。

如果遇到一些问题,请查看/ var / log / syslog查看是否一切正常

Oct 4 12:16:13 mysql3 mysql[2767]: Starting MySQL (Percona XtraDB Cluster) database server: mysqld . . .State transfer in progress, setting sleep higher: mysqld . ..
Oct 4 12:16:13 mysql3 systemd[1]: Started LSB: Start and stop the mysql (Percona XtraDB Cluster) daemon.
Oct 4 12:17:01 mysql3 CRON[3731]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)

在这个exaple中,一切顺利,你可以看到状态转移正在进行中,这意味着数据将被转移到节点。

测试复制

要测试复制,允许在第二个节点上创建一个新的数据库,在第三个节点上为该数据库创建一个表,并将一些记录添加到第一个节点上的表中。

  1. 在第二个节点上创建一个新的数据库:

    mysql@mysql2> CREATE DATABASE percona;
    Query OK, 1 row affected (0.01 sec)
    
  2. 在第三个节点上创建一个表:

    mysql@mysql3> USE percona;
    Database changed
    
    mysql@pxc3> CREATE TABLE example (node_id INT PRIMARY KEY, node_name VARCHAR(30));
    Query OK, 0 rows affected (0.05 sec)
    
  3. 在第一个节点上插入记录:

    mysql@mysql1> INSERT INTO percona.example VALUES (1, 'percona1');
    Query OK, 1 row affected (0.02 sec)
    
  4. 从第二个节点上的表中检索所有行:

    mysql@mysql2> SELECT * FROM percona.example;
    +---------+-----------+
    | node_id | node_name |
    +---------+-----------+
    |       1 | percona1  |
    +---------+-----------+
    1 row in set (0.00 sec)
    

为确保您的应用程序始终可以访问群集,您可以在三个节点前添加一个负载均衡器。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏