Percona XtraDB Cluster(PXC)是一个高可用、高性能、并且易于扩展的开源数据库解决方案。它基于MySQL数据库,并使用Percona Server和Galera Cluster技术构建。PXC旨在为企业级应用程序提供无缝的可扩展性和高可用性,同时降低操作复杂性和成本。
以下是Percona XtraDB Cluster的一些核心特性:
确保您有三个运行 CentOS 7 的节点,以便部署三节点 Percona XtraDB Cluster。在本指南中,我们将使用以下 IP 地址和主机名(请根据实际情况替换):
node1: 192.168.100.15 node2: 192.168.100.16 node3: 192.168.100.17
修改主机名
sudo hostnamectl set-hostname node1 sudo hostnamectl set-hostname node2 sudo hostnamectl set-hostname node3
192.168.100.15 node1 192.168.100.16 node2 192.168.100.17 node3
sudo systemctl stop firewalld sudo systemctl disable firewalld
在每个节点上,使用以下命令下载并安装 Percona 存储库:
bashsudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y
bashsudo percona-release setup pxc57
bashsudo yum install Percona-XtraDB-Cluster-57 -y
在每个节点上,编辑 /etc/my.cnf
配置文件。删除现有的配置(如果有),并添加以下内容(确保在以下配置中替换您的 IP 地址和节点名称):
ini[mysqld]
# Galera Cluster 配置
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.100.15,192.168.100.16,192.168.100.17
wsrep_node_name=mnode1
wsrep_node_address=192.168.100.15
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# SST 配置
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:sstpassword
[client]
socket=/var/lib/mysql/mysql.sock
在其他节点上重复此步骤,确保更改 wsrep_node_name
和 wsrep_node_address
以匹配每个节点的主机名和 IP 地址。
在第一个节点上,使用以下命令启动 Percona XtraDB Cluster:
bashsudo systemctl start mysql@bootstrap.service
mysql -uroot -p ALTER USER 'root'@'localhost' IDENTIFIED BY 'Wxq3012@';
CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'sstpassword'; GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost'; FLUSH PRIVILEGES;
在其他节点上,使用以下命令启动 Percona XtraDB Cluster:
bashsudo systemctl start mysql
为了测试数据库高可用性,我们将执行以下步骤:
在其中一个节点上登录到 MySQL,然后创建一个测试数据库和表:
sqlCREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));
由于 Percona XtraDB Cluster 是一个同步复制集群,这些更改应该自动传播到所有其他节点。
在相同的节点上,插入一些记录:
sqlINSERT INTO test_table (name) VALUES ('John Doe');
INSERT INTO test_table (name) VALUES ('Jane Doe');
查询刚刚插入的记录以验证它们已正确插入:
sqlSELECT * FROM test_table;
您应该看到如下输出:
+----+----------+ | id | name | +----+----------+ | 1 | John Doe | | 2 | Jane Doe | +----+----------+
我们将使用 keepalived
配置虚拟 IP (VIP) 实现负载均衡和故障转移。
在每个节点上,使用以下命令安装 keepalived
:
bashsudo yum install keepalived -y
在每个节点上,创建 /etc/keepalived/keepalived.conf
配置文件,并将以下内容复制到该文件中(确保替换虚拟 IP 地址):
inivrrp_script chk_mysql { script "pidof mysqld" interval 2 weight 2 } vrrp_instance VI_1 { interface eth0 state BACKUP virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass my_password } virtual_ipaddress { 192.168.100.28/24 dev eth0 } track_script { chk_mysql } }
在其他节点上重复此步骤,请注意更改 priority
字段的值。在主节点上,将其设置为较高的值(例如 200),在其他节点上将其设置为较低的值(例如 100 和 50)。
在每个节点上,使用以下命令启动并启用 keepalived
服务:
bashsudo systemctl start keepalived
sudo systemctl enable keepalived
现在,您已经成功在 CentOS 7 上使用 Percona XtraDB Cluster 部署了 MySQL 高可用性集群,并实现了虚拟 IP (VIP) 负载均衡和故障转移。从此,客户端可以使用虚拟 IP 地址连接到集群,实现无缝的负载均衡和故障转移。
Percona XtraDB Cluster(PXC)提供了一套完整的工具和方法来实现备份、恢复和监控。以下是关于PXC备份恢复和切换监控的详细介绍:
对于PXC,可以使用Percona XtraBackup工具进行备份和恢复。Percona XtraBackup是一个开源的热备份解决方案,提供了对InnoDB和XtraDB存储引擎的数据库进行在线备份的能力。
完整备份:要执行完整备份,请在命令行中运行以下命令:
xtrabackup --backup --target-dir=/path/to/backup/directory ``` ``/path/to/backup/directory`是备份文件存储的目录。
增量备份:要执行增量备份,请在命令行中运行以下命令:
xtrabackup --backup --target-dir=/path/to/incremental/backup/directory --incremental-basedir=/path/to/base/backup/directory ``` ``/path/to/incremental/backup/directory`是增量备份文件存储的目录,`/path/to/base/backup/directory`是完整备份文件的目录。
准备数据:在恢复之前,需要准备数据。对于完整备份,运行以下命令:
xtrabackup --prepare --target-dir=/path/to/backup/directory ``` 对于增量备份,首先准备完整备份,然后将增量备份应用到完整备份:
xtrabackup --prepare --apply-log-only --target-dir=/path/to/base/backup/directory xtrabackup --prepare --apply-log --target-dir=/path/to/base/backup/directory --incremental-dir=/path/to/incremental/backup/directory
恢复数据:将准备好的备份数据复制到MySQL数据目录,然后启动MySQL服务:
rsync -avr /path/to/backup/directory/ /var/lib/mysql/ chown -R mysql:mysql /var/lib/mysql systemctl start mysql ```
本文作者:丁一
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!