一步之遥三台MySQL集群搭建实践(3台机器mysql集群)

一步之遥:三台MySQL集群搭建实践

MySQL是目前世界上最为流行的开源数据库之一,而MySQL集群则是基于MySQL数据库的高可用架构方案。在本文中,将介绍如何在三台物理机上搭建MySQL集群,实现数据高可用性和负载均衡。

1. 确定部署方案

在开始搭建前,需要明确部署方案。一般情况下,MySQL集群包括至少三台MySQL服务器,其中一台主服务器,称为Master,负责处理写操作,其余服务器则为从服务器,称为Slave,负责处理读操作。另外,还需要使用负载均衡器对数据库的读写进行分流。

在本文中,将采用如下部署方案:

– 三台物理服务器,分别为Master、Slave1和Slave2。

– Master作为主服务器,Slave1和Slave2作为从服务器。

– 使用HAProxy作为负载均衡器,实现写操作向Master服务器,读操作向Slave服务器的分流。

2. 安装MySQL服务器

在三台物理机上安装MySQL服务器。以下命令可以在Ubuntu系统上安装MySQL:

“`shell

sudo apt-get update

sudo apt-get install -y mysql-server mysql-client


安装完毕后,需要修改Master服务器上的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,将以下参数设置为对应的值:

```ini
# 使MySQL服务监听所有地址
bind-address = 0.0.0.0
# 开启二进制日志记录
log-bin = /var/log/mysql/mysql-bin.log
# 设置服务器ID,Master服务器需要和从服务器不同
server-id = 1
# 允许从服务器连接和复制
# 数据库实例需要有replication主从复制用户,授权从服务器相关权限
binlog-do-db = your_database_name

同样的,Slave1和Slave2服务器也需要修改相应参数,其中server-id分别设置为2和3。

3. 配置主从复制

在Master服务器上创建replication主从复制用户,授权Slave1和Slave2服务器连接和复制:

“`sql

CREATE USER ‘replication’@’slave1_ip’ IDENTIFIED BY ‘password’;

GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’slave1_ip’;

CREATE USER ‘replication’@’slave2_ip’ IDENTIFIED BY ‘password’;

GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’slave2_ip’;


然后,在Master服务器上执行以下语句,记录当前Master服务器的状态:

```sql
SHOW MASTER STATUS;

将显示如下类似的输出:

“`text

+——————+———-+————–+——————+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————+———-+————–+——————+

| mysql-bin.000001 | 123 | your_database_name | |

+——————+———-+————–+——————+


记下File和Position的值,稍后在Slave服务器上需要用到。

接下来,需要在Slave服务器上执行以下语句,连接并同步到Master服务器:

```sql
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_PORT=3306, MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=123;
START SLAVE;

其中MASTER_HOST、MASTER_USER、MASTER_PASSWORD、MASTER_LOG_FILE、MASTER_LOG_POS需要分别设置为Master服务器的IP地址、replication用户的密码、记录的File和Position值。

执行完毕后,可以通过以下语句验证从服务器是否连接成功:

“`sql

SHOW SLAVE STATUS\G


如果Slave_IO_Running和Slave_SQL_Running都为Yes,则表示连接成功。

4. 集群数据同步

在配置好主从复制后,Master服务器上新增的数据可以自动同步到从服务器。但是,如果从服务器上新增数据,则需要手动同步到其他从服务器和Master服务器上。以下是同步数据的步骤:

1. 在Slave1服务器上新增数据:

```sql
USE your_database_name;
INSERT INTO your_table (id, name) VALUES (1, 'test');

2. 在Slave1服务器上执行以下语句,将新增的数据同步到Slave2服务器:

“`sql

STOP SLAVE;

CHANGE MASTER TO MASTER_HOST=’slave1_ip’, MASTER_PORT=3306, MASTER_USER=’replication’, MASTER_PASSWORD=’password’, MASTER_LOG_FILE=’mysql-bin.000001′, MASTER_LOG_POS=123;

START SLAVE;


3. 在Slave2服务器上执行同样的语句,将新增的数据同步到Master服务器:

```sql
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='slave2_ip', MASTER_PORT=3306, MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=123;
START SLAVE;

同样的,也可以通过SHOW SLAVE STATUS\G验证从服务器是否连接并同步成功。

5. 安装和配置HAProxy

在Master、Slave1和Slave2服务器上安装HAProxy:

“`shell

sudo apt-get update

sudo apt-get install -y haproxy


然后,在Master服务器上创建/etc/haproxy/haproxy.cfg配置文件,并添加以下内容:

```ini
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
option tcplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
listen mysql-cluster
bind *:3306
mode tcp
option tcplog
balance roundrobin
server master master_ip:3306 check
server slave1 slave1_ip:3306 check
server slave2 slave2_ip:3306 check

其中,通过listen块定义了一个名为mysql-cluster的负载均衡器,监听MySQL默认端口3306,并使用轮询算法分发连接至三台MySQL服务器。每个server行指定了服务器的主机名或IP地址、端口号和health check。

保存并退出配置文件后,启动HAProxy服务:

“`shell

sudo systemctl start haproxy


6. 客户端连接测试

通过MySQL客户端连接HAProxy,可以测试集群是否搭建成功,并实现了负载均衡和高可用性。

```shell
mysql -h haproxy_ip -P 3306 -u your_username -p

其中haproxy_ip为HAProxy的IP地址,your_username为MySQL用户名,连接后即可进行数据库的读写操作。

总结

通过本文的实践,读者可以学会如何在三台物理机上搭建MySQL集群,实现数据高可用性和负载均衡。在实际生产环境中,除了以上方案,还可以使用MySQL自带的集群方案MySQL Cluster,或者使用第三方方案如Percona XtraDB Cluster和MariaDB Galera Cluster等。读者可以根据实际情况选择最适合自己的方案。


数据运维技术 » 一步之遥三台MySQL集群搭建实践(3台机器mysql集群)