当前位置:   article > 正文

mysql中常用几种架构部署方案_mysql部署模式

mysql部署模式

一、主从搭建

步骤 1: 安装 MySQL

确保主服务器和从服务器上都安装了 MySQL。可以使用 Yum 来安装Mysql 5.7:

sudo rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
#导入GPG公钥,或者禁用gpg检查,将gpgcheck=1 更改为 gpgcheck=0
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
## 在 [mysql57-community] 部分,将 enabled=0 更改为 enabled=1,在 [mysql80-community] 部分,将 enabled=1 更改为 enabled=0
sudo vim /etc/yum.repos.d/mysql-community.repo
sudo yum install mysql-community-server-5.7.42
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

步骤 2: 配置主服务器(Master)

编辑 MySQL 配置文件。通常位置是 /etc/my.cnf 或 /etc/mysql/my.cnf。

[mysqld]  
server-id=1  
log_bin=mysql-bin
  • 1
  • 2
  • 3
  • server-id 是服务器的唯一ID,主服务器和从服务器的ID必须不同。
  • log_bin 指定了二进制日志文件的前缀,二进制日志记录所有的更改操作,用于复制过程。

保存配置文件并重启 MySQL 服务:

sudo systemctl restart mysqld
  • 1

步骤 3: 创建复制用户

mysql安装完了以后会生成一个初始密码在mysqld.log文件
grep password /var/log/mysqld.log
如果要更简单的密码:

SET GLOBAL validate_password_length = 6;
SET GLOBAL validate_password_number_count = 0;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
  • 1
  • 2
  • 3

在主服务器上登录 MySQL 并创建一个用于复制的用户:

SET GLOBAL validate_password_policy=LOW;  #临时降低密码策略的强度
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'rep123456';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';  
FLUSH PRIVILEGES;
  • 1
  • 2
  • 3
  • 4
  • ‘replication_user’@‘%’ 是将要用于复制的用户,‘%’ 表示任何主机都可以连接,根据需要可以限制特定主机。
  • ‘password’ 应替换为复制用户的实际密码。

步骤 4: 获取主服务器的二进制日志信息

记录主服务器的二进制日志坐标。在主服务器上执行:

SHOW MASTER STATUS;
  • 1

记下 File 和 Position 的值,从服务器会用到这些信息来同步数据。

步骤 5: 配置从服务器(Slave)

编辑从服务器的 MySQL 配置文件,设置一个唯一的 server-id:

[mysqld]  
server-id=2  
relay-log=relay-bin
  • 1
  • 2
  • 3

主从复制在生产中通常要将从库设置为只读库,具有 SUPER 权限的用户依然可以在从服务器上执行写操作

read_only = ON 
  • 1
  • server-id 应该是一个唯一的值,不同于主服务器。
  • relay-log 指定中继日志的前缀,中继日志用于从服务器复制过程。

保存配置文件并重启 MySQL 服务:

sudo systemctl restart mysqld
  • 1

步骤 6: 设置从服务器复制

在从服务器上设置复制并开始复制进程:

CHANGE MASTER TO  
  MASTER_HOST='10.75.78.212',  
  MASTER_USER='replication_user',  
  MASTER_PASSWORD='rep123456',  
  MASTER_LOG_FILE='mysql-bin.000002',  
  MASTER_LOG_POS=3583;  
  
START SLAVE;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • master_ip 是主服务器的IP地址。
  • replication_user 和 password 是在步骤 3 中创建的复制用户及其密码。
  • recorded_log_file_name 和 recorded_log_position 是在步骤 4 中记录的二进制日志文件名和位置。

主从同步复制模式:
主从同步复制模式默认使用的是异步复制
异步复制:主库在执行完客户端提交的事务后会立即将结果返给客户端,不关心从库是否已经接收并处理
全同步复制:主库执行完一个事务,所有的从库都执行了该事务才返回给客户端
半同步复制(用于至少有2个从库的模式):介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到 relay log 中才返回给客户端

在生产环境中,选择哪种复制模式通常取决于业务需求、数据一致性要求、性能影响以及系统复杂度等因素。许多生产环境为了平衡性能和数据一致性,会选择半同步复制。全同步复制(如MySQL Group Replication或其他第三方解决方案)提供更强的数据一致性保证,但可能会带来更大的性能开销和更复杂的配置。

半同步复制设置
  1. 安装半同步插件: 在主服务器和从服务器上安装半同步复制插件。在MySQL命令行执行以下命令安装半同步复制插件:
-- 在主服务器上  
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';  

-- 在从服务器上  
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 启用半同步复制: 通过设置全局变量来启用半同步复制。
-- 在主服务器上  
SET GLOBAL rpl_semi_sync_master_enabled = 1;  

-- 在从服务器上  
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
  • 1
  • 2
  • 3
  • 4
  • 5

以上是临时方法,重启后失效,永久生效可以将这些设置添加到MySQL的配置文件(通常是my.cnf或my.ini),以便在MySQL服务器启动时自动生效。

# 在主服务器的配置文件中  
[mysqld]  
rpl_semi_sync_master_enabled = 1  

# 在从服务器的配置文件中  
[mysqld]  
rpl_semi_sync_slave_enabled = 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 确认半同步复制状态: 确认半同步复制已正确启用。
SHOW VARIABLES LIKE 'rpl_semi_sync%';
  • 1
  1. 调整超时设置(可选): 你可能需要根据业务需求调整半同步复制的超时设置。
SET GLOBAL rpl_semi_sync_master_timeout = 1000; -- 超时时间设置为1000毫秒
  • 1
全同步复制设置(教程未亲自验证过,可酌情参考)

在MySQL中,默认的复制机制是异步复制。如果你想要将已经配置好的主从异步复制改成全同步复制,比如使用MySQL Group Replication或InnoDB Cluster,这通常涉及到比较多的步骤,因为这些技术提供了更高级别的数据一致性保证。以下是将异步复制切换到Group Replication的一般步骤:

  1. 确认和备份数据:确保所有数据是最新的,并进行备份。在从库上停止复制,并确保主库和从库的数据完全同步。

  2. 停止当前复制
    在从库上执行以下命令来停止复制:

STOP SLAVE;
  • 1
  1. 更新配置
    修改MySQL的配置文件(如my.cnf或my.ini),确保以下设置正确:
[mysqld]  
server_id = <唯一的服务器ID>  
gtid_mode = ON  
enforce_gtid_consistency = ON  
binlog_checksum = NONE  
log_bin = binlog  
log_slave_updates = ON  
binlog_format = ROW  
transaction_write_set_extraction = XXHASH64  
loose-group_replication_start_on_boot = OFF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在所有将要参与Group Replication的服务器上执行这些更改,并重启MySQL服务。

  1. 创建复制用户
    在主库上创建一个专用的复制用户供Group Replication使用:
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';  
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';  
FLUSH PRIVILEGES;
  • 1
  • 2
  • 3
  1. 安装Group Replication插件
    在所有参与的MySQL实例上安装Group Replication插件:
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
  • 1
  1. 配置Group Replication
    在所有MySQL实例上设置Group Replication相关的系统变量,例如:
SET GLOBAL group_replication_group_name = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';  # 组的UUID  
SET GLOBAL group_replication_local_address = '本机IP:端口';  
SET GLOBAL group_replication_group_seeds = '其他组成员的IP:端口列表';  
SET GLOBAL group_replication_bootstrap_group= OFF;
  • 1
  • 2
  • 3
  • 4
  1. 启动Group Replication
    首先,在一个实例上启动Group Replication,该实例将作为组的种子节点。通常是主库:
SET GLOBAL group_replication_bootstrap_group = ON;  
START GROUP_REPLICATION;  
SET GLOBAL group_replication_bootstrap_group = OFF;
  • 1
  • 2
  • 3

然后,在其他实例上启动Group Replication,比如从库:

START GROUP_REPLICATION;
  • 1
  1. 检查Group Replication状态
    确认Group Replication已经在所有节点上正常运行:
SELECT * FROM performance_schema.replication_group_members;
  • 1

备注:如果master存在数据库,slave是空库,可以执行以下操作再执行步骤6

  1. 创建数据快照
    在主服务器上创建所有数据库的快照。这可以通过使用 mysqldump 工具来完成,并且通常需要锁定数据库以避免在导出过程中数据的变更:
mysqldump --all-databases --master-data --single-transaction --flush-logs --routines --triggers --events -u root -p > all_databases.sql
  • 1
  • –all-databases:导出所有数据库。
  • –master-data:在导出文件中包含 CHANGE MASTER TO 所需的二进制日志文件位置。
  • –single-transaction:对于支持事务的存储引擎,例如 InnoDB,使用事务来保证一致性而不锁表。
  • –flush-logs:刷新二进制日志,生成一个新的日志文件。
  • –routines:包括存储过程和函数。
  • –triggers:包括触发器。
  • –events:包括事件调度器中的事件。
  1. 导入数据到从服务器
    将上一步骤生成的 all_databases.sql 文件传输到从服务器,然后导入该文件:
mysql -u root -p < all_databases.sql
  • 1

步骤 7: 验证从服务器状态

检查从服务器的复制状态:

SHOW SLAVE STATUS\G
  • 1

查看 Slave_IO_Running 和 Slave_SQL_Running 两个状态,他们都是YES

主从复制原理:

  1. 二进制日志(Binary Log)

    • 主库记录所有更改数据的事件到二进制日志中。这些事件包括所有对数据库执行的写操作,如INSERT、UPDATE和DELETE语句。
    • 当二进制日志被启用时,MySQL服务器记录所有更改数据库内容的语句到这些日志文件中。
    • 二进制日志不仅用于复制,也可用于增量备份和数据恢复。
  2. 中继日志(Relay Log)

    • 从库上有一个I/O线程负责连接到主库,并从主库请求二进制日志中的事件。
    • 这个I/O线程将接收到的事件写入从库本地的中继日志。
    • 然后,从库上的SQL线程会读取中继日志中的事件,并将这些事件重放(执行)到从库的数据库中,从而更新从库的数据。
    • 通过这种方式,从库的数据状态最终会与主库保持一致。

所以,整个过程是这样的:

  1. 在主库上

    • 数据变更操作执行。
    • 变更被记录到主库的二进制日志。
  2. 在从库上

    • I/O线程从主库请求并获取二进制日志中的变更事件。
    • 变更事件被写入从库的中继日志。
    • SQL线程读取中继日志,重放变更事件,更新从库数据库。

在正常运行的复制环境中,从库会持续地从主库获取最新的二进制日志内容,并将其应用到自己的数据库中,保持与主库的数据一致性。这个过程在默认情况下是自动进行的。

二、主主搭建

步骤1:安装MySQL

在两台CentOS 7服务器上分别安装MySQL。这里安装mysql 5.7

sudo rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
#导入GPG公钥,或者禁用gpg检查,将gpgcheck=1 更改为 gpgcheck=0
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
## 在 [mysql57-community] 部分,将 enabled=0 更改为 enabled=1,在 [mysql80-community] 部分,将 enabled=1 更改为 enabled=0
sudo vim /etc/yum.repos.d/mysql-community.repo
sudo yum install mysql-community-server-5.7.42
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

安装完成后,启动MySQL服务并设置开机自启:

sudo systemctl start mysqld  
sudo systemctl enable mysqld
  • 1
  • 2

步骤2:配置MySQL

在两台服务器上进行MySQL配置,以设置主主复制。

编辑MySQL配置文件/etc/my.cnf,在[mysqld]部分添加以下内容,确保两台服务器的server_id不同,并且为每个服务器指定唯一的log_bin文件名。

在主服务器1上:

[mysqld]  
server_id=1  
log_bin=mysql-bin
  • 1
  • 2
  • 3

在主服务器2上:

[mysqld]  
server_id=2  
log_bin=mysql-bin
  • 1
  • 2
  • 3

重启MySQL服务以应用更改:

sudo systemctl restart mysqld
  • 1

步骤3:配置复制用户

在两台服务器上创建用于复制的用户。首先登录MySQL:

mysql -u root -p
  • 1

然后,创建复制用户并授予权限(在两台服务器上执行,只需更改ip地址):

SET GLOBAL validate_password_policy=LOW;  #临时降低密码策略的强度
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'rep123456';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';  
FLUSH PRIVILEGES;
  • 1
  • 2
  • 3
  • 4

步骤4:配置主主复制

在主服务器1上,查看二进制日志文件和位置:

SHOW MASTER STATUS;
  • 1

记录下File和Position的值,这将用于配置服务器2。

在主服务器2上执行以下命令,配置主服务器1为复制来源:

CHANGE MASTER TO 
MASTER_HOST='10.75.78.212', 
MASTER_USER='replication_user', 
MASTER_PASSWORD='rep123456', 
MASTER_LOG_FILE='mysql-bin.000002', 
MASTER_LOG_POS=78846;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

然后启动复制:

START SLAVE;
  • 1

在主服务器1上执行类似的步骤,配置主服务器2为复制来源。

CHANGE MASTER TO 
MASTER_HOST='10.75.79.3', 
MASTER_USER='replication_user', 
MASTER_PASSWORD='rep123456', 
MASTER_LOG_FILE='mysql-bin.000001', 
MASTER_LOG_POS=154;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

然后启动

START SLAVE;
  • 1

步骤5:测试复制

在两台服务器上创建测试数据库或表,并进行更改,查看更改是否会在另一台服务器上同步。

注意事项

  • 确保两台服务器的时间同步。
  • 配置适当的防火墙规则,允许两台服务器之间的MySQL通信(默认端口3306)。
  • 使用复杂密码并在生产环境中采取额外的安全措施。
  • MySQL主主复制环境中,必须谨慎处理自增值和主键,以避免冲突

三、集群模式搭建

准备工作

  1. 准备至少三台CentOS 7服务器,它们之间需要能够相互通信。
  2. 设置主机名并更新/etc/hosts文件,确保每台机器都能解析其他机器的主机名。
  3. 确保所有服务器的时间同步。
  4. 设置SELinux为Permissive模式或禁用SELinux。
  5. 关闭防火墙或者在防火墙中开放3306、33060以及Group Replication所需要的其他端口。

安装MySQL

1.在所有节点上添加MySQL官方的Yum仓库,这里安装mysql 5.7:
sudo rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
#导入GPG公钥,或者禁用gpg检查,将gpgcheck=1 更改为 gpgcheck=0
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
## 在 [mysql57-community] 部分,将 enabled=0 更改为 enabled=1,在 [mysql80-community] 部分,将 enabled=1 更改为 enabled=0
sudo vim /etc/yum.repos.d/mysql-community.repo
  • 1
  • 2
  • 3
  • 4
  • 5
2.安装MySQL服务器:
sudo yum install mysql-community-server-5.7.42
  • 1
3.启动MySQL服务并设置开机启动:
sudo systemctl start mysqld  
sudo systemctl enable mysqld
  • 1
  • 2
4.获取初始临时密码:
grep 'temporary password' /var/log/mysqld.log
  • 1
5.运行安全脚本来配置MySQL:
mysql_secure_installation
  • 1

这个过程将提示你设置root密码以及移除匿名用户等。

配置MySQL服务器和Group Replication

1.在每个节点上编辑/etc/my.cnf文件,添加Group Replication配置(单主模式):
[mysqld]  
server_id=1 # 每个节点应该有唯一的server_id  
gtid_mode=ON  
enforce_gtid_consistency=ON  
master_info_repository=TABLE  
relay_log_info_repository=TABLE  
binlog_checksum=NONE  
log_slave_updates=ON  
log_bin=binlog  
binlog_format=ROW  
transaction_write_set_extraction=XXHASH64  
loose-group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" # 使用UUID生成器生成,所有节点要用相同的UUID  
loose-group_replication_start_on_boot=off  
loose-group_replication_local_address="this_host_ip:33061" # 替换为当前主机IP和端口  
loose-group_replication_group_seeds="seed1_ip:33061,seed2_ip:33061,seed3_ip:33061" # 替换为其他节点的IP和端口,但不包括自己的
loose-group_replication_bootstrap_group=off  
loose-group_replication_single_primary_mode=ON  
loose-group_replication_enforce_update_everywhere_checks=OFF

#Group Replication复制用户的凭据,用户在下面的步骤有创建
loose-group_replication_recovery_user='replication_user'
loose-group_replication_recovery_password='rep123456'

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

多主模式的话还需要再每个节点配置

[mysqld]
loose-group_replication_single_primary_mode=OFF
loose-group_replication_enforce_update_everywhere_checks=ON
  • 1
  • 2
  • 3

备注

a.UUID生成方式可参考如下:

方法 1:使用 uuidgen 命令(Linux)

大多数 Linux 发行版都自带了 uuidgen 命令,你可以用它来生成 UUID。

打开终端并输入以下命令:

uuidgen
  • 1

这将输出一个新的 UUID,例如:

e24df29e-7e95-11eb-9439-0242ac130002
  • 1

方法 2:使用 MySQL 函数

如果你在 MySQL 客户端中,可以使用内置的 UUID() 函数来生成 UUID:

SELECT UUID();
  • 1

这将返回一个新的 UUID,例如:

e24df29e-7e95-11eb-9439-0242ac130002
  • 1

方法 3:使用在线 UUID 生成器

你可以简单地搜索“在线 UUID 生成器”,并使用任何在线服务来生成 UUID。

方法 4:使用编程语言生成

几乎所有的现代编程语言都提供了生成 UUID 的库。例如,使用 Python:

import uuid  
print(str(uuid.uuid4()))
  • 1
  • 2

或者使用 Node.js:

const { v4: uuidv4 } = require('uuid');  
console.log(uuidv4());
  • 1
  • 2

在生成 UUID 后,你可以将其复制并粘贴到 MySQL 配置文件的 group_replication_group_name 配置项中:

[mysqld]  
loose-group_replication_group_name="e24df29e-7e95-11eb-9439-0242ac130002" # 替换为你生成的 UUID
  • 1
  • 2

确保你为集群中的所有节点使用相同的 UUID。更改配置文件后,你需要重新启动 MySQL 服务来使新的配置生效。

2.重启MySQL服务器以应用新配置:
sudo systemctl restart mysqld
  • 1
3.在每个节点上设置复制用户和相关权限(替换repl_password为你的复制用户密码):
SET GLOBAL validate_password_policy=LOW;  #临时降低密码策略的强度
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'rep123456';
GRANT ALL PRIVILEGES ON *.* TO 'replication_user'@'%';
FLUSH PRIVILEGES;
  • 1
  • 2
  • 3
  • 4
4.节点初始化Group Replication:

在引导节点上配置

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;  
SET GLOBAL group_replication_bootstrap_group=OFF;
  • 1
  • 2
  • 3

在其他节点配置

CHANGE MASTER TO MASTER_USER='replication_user', 
MASTER_PASSWORD='rep123456' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION;  
  • 1
  • 2
  • 3

查看start group_replication状态

SHOW GLOBAL STATUS LIKE 'group_replication_primary_member';   # 查看start group_replication状态
SHOW GLOBAL STATUS LIKE 'group_replication_members';  #查看组成员
  • 1
  • 2

备注:
如果报错mysql> SET GLOBAL group_replication_bootstrap_group=ON;
ERROR 1193 (HY000): Unknown system variable ‘group_replication_bootstrap_group’
原因 Group Replication 插件可能没有被正确安装或启用,Group Replication 是从 MySQL 5.7.17 版本开始引入的,低于这个版本不支持

  1. 检查 Group Replication 插件是否安装
    运行以下命令来查看所有已安装的插件,包括 Group Replication:
SHOW PLUGINS;
  • 1

确认在输出结果中 group_replication 插件的状态是否为 ACTIVE。

  1. 安装 Group Replication 插件
    如果 group_replication 插件未安装,你需要先安装它。执行以下命令来安装插件:
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
  • 1

请注意,插件的名称在不同的操作系统中可能有所不同,例如,在 Windows 上可能是 .dll 文件。

安装和配置MySQL Router

1.在一个或多个节点上安装MySQL Router,这将作为应用程序连接的端点:
sudo yum install mysql-router
  • 1
2.创建MySQL Router的配置,可以使用MySQL Shell的工具:
mysqlrouter --bootstrap root@10.75.78.212:3306 --directory /etc/mysqlroute --user=root
  • 1

mysqlroute的配置文件在/etc/mysqlroute,鉴于安全考虑–user选择安全的数据库账户,比如创建一个只能够读写业务库的账号

如果你的部署是 Group Replication 而非 InnoDB Cluster(因为没有找到 mysql_innodb_cluster_metadata 数据库),需要手动配置 MySQL Router。这意味着不能使用 --bootstrap 选项来自动配置 MySQL Router,因为这个选项是为 InnoDB Cluster 设计的,它依赖于集群的元数据
以下是手动配置方法:
vim /etc/mysqlrouter/mysqlrouter.conf

[DEFAULT]
logging_folder=/var/log/mysqlrouter
runtime_folder=/var/run/mysqlrouter
config_folder=/etc/mysqlrouter
data_folder=/var/lib/mysqlrouter

[logger]
level = INFO

[routing:write]
bind_address = 0.0.0.0
bind_port = 6446
destinations = 10.75.78.212:3306
routing_strategy = first-available
protocol = classic

[routing:only_read]
bind_address = 0.0.0.0
bind_port = 6447
destinations = 10.75.79.3:3306
routing_strategy = round-robin
protocol = classic

[routing:all_only_read]
bind_address = 0.0.0.0
bind_port = 6448
destinations = 10.75.78.212:3306,10.75.79.3:3306
routing_strategy = round-robin
protocol = classic
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

运行mysqlrouter

mysqlrouter --config /etc/mysqlrouter/mysqlrouter.conf 
  • 1
3.启动MySQL Router服务:
sudo systemctl start mysqlrouter  
sudo systemctl enable mysqlrouter
  • 1
  • 2

测试下 round-robin 策略

[root@iZwz95tf7rz3vh3pzml5l1Z 18:18:28 mysqlrouter]# mysql -uroot -p123456 -P6448 -h10.75.79.3 -e "select @@hostname"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------+
| @@hostname |
+------------+
| k8s-master |
+------------+
[root@iZwz95tf7rz3vh3pzml5l1Z 18:18:33 mysqlrouter]# mysql -uroot -p123456 -P6448 -h10.75.79.3 -e "select @@hostname"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------------------+
| @@hostname              |
+-------------------------+
| iZwz95tf7rz3vh3pzml5l1Z |
+-------------------------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

备注
除了round-robin还有

  1. first-available:
    • 这种策略会将连接路由到第一个可用的目标。在单主复制集群中,这通常意味着所有写操作都会路由到主节点。
  2. round-robin:
    • 这种策略通过轮询方式分配连接到不同的目标。这对于分散只读查询负载到多个从节点很有用。
  3. next-available:
    • 当使用这种策略时,MySQL Router 将连接路由到下一个可用的目标。这和 first-available 类似,但是在目标不可用时,它会按顺序检查下一个目标。
  4. random:
    • 在这种策略下,MySQL Router 随机选择一个目标来路由新连接。这可以用于分散负载,但不保证负载的均匀分布。
  5. round-robin-with-fallback:
    • 类似于 round-robin,但是如果选定的目标不可用,它将尝试列表中的下一个目标,直到找到一个可用的为止

验证集群状态

1.使用MySQL Shell检查集群状态:
mysqlsh --uri root@primary_node_ip:3306
  • 1

然后在MySQL Shell中运行:

var cluster = dba.getCluster();  
print(cluster.status());
  • 1
  • 2
2.查看每个节点的Group Replication状态:
SHOW STATUS LIKE 'group_replication%';
  • 1

现在,你应该有一个运行中的MySQL InnoDB Cluster。务必在实际生产环境中部署之前进行充分的测试,并且确保你有适当的监控和备份策略。

请注意,这是一个简化的部署指南,每个环境的具体细节可能会有所不同。在执行以上步骤之前,建议详细阅读MySQL官方文档,以了解所有配置选项和最佳实践。

除了mysqlrouter轻量级数据库客户端连接管理,还有
更重量级的场景,您可能需要一个更为强大和灵活的数据库中间件或负载均衡器来处理 MySQL 的连接和流量分发。以下是几个流行的选项:

  1. ProxySQL:

    • ProxySQL 是一个高性能的 SQL 代理,专为 MySQL 和 MariaDB 设计。它支持高级的读写分离、查询缓存、自动故障转移和负载均衡。ProxySQL 还可以根据查询规则和模式重写查询,提供了详细的统计和监控功能。
  2. HAProxy:

    • HAProxy 是一个广泛使用的开源负载均衡器和代理服务器,它可以用于 MySQL 的负载均衡。虽然它不是专门为数据库设计的,但它可以很好地处理大量并发连接,并提供了健康检查和故障转移机制。
  3. MariaDB MaxScale:

    • MaxScale 是 MariaDB Corporation 开发的数据库代理,它支持读写分离、自动故障转移、查询路由和过滤等功能。它针对 MariaDB 和 MySQL 数据库优化,提供了模块化的架构,允许用户根据需求添加功能。
  4. MySQL Group Replication / InnoDB Cluster:

    • 虽然这不是一个独立的中间件,但 MySQL 的 Group Replication 和 InnoDB Cluster 提供了高可用性和负载均衡的内置功能。MySQL Router 可以与这些解决方案紧密集成,从而提供简单的故障转移和读写分离。
  5. Vitess:

    • Vitess 是一个数据库集群系统,最初由 YouTube 开发,现在是一个开源项目。它为大规模的 MySQL 部署提供了水平扩展的解决方案,并且包含了负载均衡、故障转移和分片管理的功能。

选择哪个中间件取决于您的具体需求、预算、技术堆栈以及团队的经验。每种解决方案都有其独特的特点和配置要求,因此在选择之前需要仔细评估。在大型生产环境中,中间件的选择通常会考虑到性能、监控、灵活性和可维护性等因素。在选择任何中间件之前,建议进行充分的测试,以确保它满足您的性能要求并与您的基础架构兼容。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/867935
推荐阅读
相关标签
  

闽ICP备14008679号