在 Ubuntu 上安装 Galera 高可用 MySQL 集群
发布时间: 2023-12-21 01:43:08 阅读量: 43 订阅数: 32
# 1. 简介
## 1.1 Galera 高可用 MySQL 集群的概念与优势
在传统的 MySQL 关系型数据库中,单点故障是一个常见的问题,一旦数据库服务器发生故障,整个应用系统就会受到影响。为了解决这个问题,Galera 高可用 MySQL 集群应运而生。通过将多个 MySQL 节点组成集群,实现数据的同步复制和自动故障转移,从而提供了高可用性、可扩展性和容错能力。
Galera 集群采用了多主复制(multi-master replication)的方式,每个节点都可以处理读写操作,并实现了同步复制,保证了数据的一致性。而且,Galera 集群还支持自动成员检测和失效节点移除,使得集群对节点故障的响应更加灵活和高效。
## 1.2 适用的 Ubuntu 版本与系统要求
在 Ubuntu 环境下安装 Galera 高可用 MySQL 集群,通常建议选择最新的 LTS 版本,比如 Ubuntu 20.04 LTS。在选择硬件配置时,需要根据实际需求来确定CPU、内存和存储空间的配置。同时,确保网络稳定,各节点之间的通信延迟较低,以确保集群的正常运行。
### 2. 准备工作
在安装 Galera 高可用 MySQL 集群之前,需要进行一些准备工作。这包括在 Ubuntu 上安装并配置所需的软件源,以及准备每个节点的主机名和IP地址。
#### 2.1 在 Ubuntu 上安装并配置所需的软件源
首先,我们需要在 Ubuntu 上添加 Galera 高可用 MySQL 集群的软件源。这可以通过编辑 `/etc/apt/sources.list` 文件来实现。以下是在 Ubuntu 20.04 上添加 Galera 软件源的示例:
```bash
$ sudo nano /etc/apt/sources.list
```
在文件末尾添加以下软件源地址:
```plaintext
deb https://galeracluster.com/deb focal main
```
保存并退出文件后,使用以下命令导入软件源的公钥:
```bash
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv BC19DDBA
```
接下来,更新软件包列表并安装 Galera 集群软件:
```bash
$ sudo apt update
$ sudo apt install galera-4
```
#### 2.2 准备每个节点的主机名和IP地址
在安装 Galera 高可用 MySQL 集群之前,需要为每个节点设置唯一的主机名和IP地址。确保在集群中的每个节点都能够通过主机名相互通信。可以通过编辑 `/etc/hosts` 文件或者通过 DNS 服务器来实现节点之间的主机名解析。
```bash
$ sudo nano /etc/hosts
```
添加每个节点的主机名和IP地址:
```plaintext
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
```
保存并退出文件后,通过以下命令设置每个节点的主机名:
```bash
$ sudo hostnamectl set-hostname node1
$ sudo hostnamectl set-hostname node2
$ sudo hostnamectl set-hostname node3
```
完成了上述准备工作后,就可以开始配置 MySQL 节点了。
### 3. 配置 MySQL 节点
在这一部分,我们将介绍如何在每个节点上安装 MySQL 数据库,并对 MySQL 节点进行基本设置和 Galera 插件的启用与配置。
#### 3.1 在每个节点上安装 MySQL 数据库
首先,我们需要在每个节点上安装 MySQL 数据库。在 Ubuntu 上,我们可以通过以下命令来进行安装:
```bash
sudo apt update
sudo apt install mysql-server
```
安装过程中会提示设置 root 用户的密码,请务必设置一个安全且易记的密码,并妥善保管。
安装完成后,可以通过以下命令验证 MySQL 服务是否已经启动:
```bash
sudo systemctl status mysql
```
#### 3.2 配置 MySQL 节点的基本设置
在安装完成 MySQL 数据库后,我们需要进行一些基本的配置,包括配置 bind-address、设置字符集等。可以通过编辑 `/etc/mysql/my.cnf` 文件来进行相应的设置。
```bash
sudo nano /etc/mysql/my.cnf
```
编辑完成后,需要重启 MySQL 服务使配置生效:
```bash
sudo systemctl restart mysql
```
#### 3.3 启用并配置 Galera 插件
Galera 集群需要使用特定的插件来实现同步复制和节点通信。我们需要在每个节点上启用并配置 Galera 插件。
首先,需要安装 Galera 插件:
```bash
sudo apt install galera-4
```
然后,编辑 MySQL 配置文件并启用 Galera 插件:
```bash
sudo nano /etc/mysql/my.cnf
```
在文件中添加以下配置:
```conf
[mysqld]
wsrep_provider=/usr/lib/galera-4/libgalera_smm.so
wsrep_on=ON
wsrep_cluster_name="my_ubuntu_cluster"
wsrep_node_address="node1_ip_address"
wsrep_node_name="node1"
```
注意将 `wsrep_node_address` 和 `wsrep_node_name` 分别替换为每个节点的 IP 地址和节点名称。
完成以上步骤后,重启 MySQL 服务以使配置生效:
```bash
sudo systemctl restart mysql
```
## 4. 启动 Galera 集群
在这一章节中,我们将介绍如何启动 Galera 集群并进行初始化配置,以及添加其他节点并建立通信。
### 4.1 启动第一个节点并初始化集群
首先,我们需要在第一个节点上启动 MySQL 服务,并进行 Galera 集群的初始化配置。我们假设第一个节点的主机名为 `node1`,IP 地址为 `192.168.0.1`。
```bash
# 启动 MySQL 服务
sudo systemctl start mysql
# 进行 Galera 集群初始化
sudo mysql -u root -e "SET GLOBAL wsrep_cluster_name='my_cluster';"
sudo mysql -u root -e "SET GLOBAL wsrep_node_address='192.168.0.1';"
sudo mysql -u root -e "SET GLOBAL wsrep_node_name='node1';"
sudo mysql -u root -e "CREATE DATABASE test;"
sudo mysql -u root -e "CREATE TABLE test.messages (message VARCHAR(30));"
sudo mysql -u root -e "INSERT INTO test.messages VALUES ('Hello, Galera!');"
```
### 4.2 添加其他节点并建立通信
接下来,我们需要在其他节点上启动 MySQL 服务,并将它们添加到 Galera 集群中,以建立通信。假设我们有一个名为 `node2` 的节点,IP 地址为 `192.168.0.2`。
```bash
# 启动 MySQL 服务
sudo systemctl start mysql
# 将节点2添加到集群
sudo mysql -u root -e "SET GLOBAL wsrep_cluster_address='gcomm://192.168.0.1,192.168.0.2';"
sudo mysql -u root -e "START TRANSACTION;"
sudo mysql -u root -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
sudo mysql -u root -e "COMMIT;"
```
通过以上步骤,我们成功地启动了 Galera 集群并初始化了第一个节点,然后将其他节点添加到了集群中并完成了通信的建立。
### 5. 测试与故障转移
Galera 高可用 MySQL 集群已经安装并配置完成,接下来我们需要进行测试以验证集群的高可用性,并且进行故障转移的测试。
#### 5.1 使用压力测试工具验证集群的高可用性
在每个节点上安装并配置压力测试工具,例如 sysbench,来模拟大量的读写请求以验证集群的高可用性。以下是一个简单的 sysbench 压力测试示例:
```bash
# 在第一个节点上创建测试数据库
mysql -u root -p
CREATE DATABASE test_db;
quit;
# 在第一个节点上执行压力测试
sysbench oltp_read_write --tables=10 --table_size=1000000 --mysql-db=test_db --mysql-user=root --mysql-password=your_password prepare
sysbench oltp_read_write --tables=10 --table_size=1000000 --mysql-db=test_db --mysql-user=root --mysql-password=your_password --num-threads=64 --max-requests=100000 run
```
通过观察压力测试的结果,可以验证集群在大量读写请求下的性能表现以及节点间的数据同步情况。
#### 5.2 模拟故障并测试故障转移的表现
为了测试集群的故障转移能力,我们可以模拟其中一个节点的宕机或网络隔离,观察集群在这种情况下的表现。以下是一个简单的故障模拟示例:
```bash
# 在第一个节点上禁用网络接口,模拟网络隔离
sudo ifconfig eth0 down
# 或者直接停止 MySQL 服务,模拟节点宕机
sudo systemctl stop mysql
# 观察集群状态,确认故障转移是否正常进行
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
```
通过观察集群状态,可以验证故障转移是否成功进行,以及新的主节点是否顺利接管服务。
## 6. 总结与注意事项
在本文中,我们学习了如何在 Ubuntu 上安装 Galera 高可用 MySQL 集群。通过以下步骤,我们成功地搭建了一个稳定可靠的高可用性数据库集群:
1. 安装了所需的软件源,并准备了每个节点的主机名和IP地址。
2. 配置了 MySQL 节点的基本设置,并启用并配置了 Galera 插件。
3. 启动了第一个节点并初始化了集群,然后成功添加了其他节点并建立了通信。
在安装和配置 Galera 集群的过程中,需要特别注意以下事项:
- 确保每个节点上的防火墙设置允许集群节点之间的通信,并且端口号正确开放。
- 在添加新节点时,确保新节点与现有节点的配置一致,并且连接信息正确。
- 定期进行故障转移测试,以确保集群在发生故障时可以自动进行故障转移。
0
0