-
MySQL中间件之ProxySQL(10):读写分离方法论
1.不同类型的读写分离 数据库中间件最基本的功能就是实现读写分离,ProxySQL当然也支持。而且ProxySQL支持的路由规则非常灵活,不仅可以实现最简单的读写分离,还可以将读/写都分散到多个不同的组,以及实现分库sharding(分表sharding的规则比较难写,但也能实现)。 本文只描述通过规则制定的语句级读写分离,不讨论通过 ip/port, client, username, schemaname 实现的读写分离。 下面描述了ProxySQL能实现的常见读写分离类型。 1.1 最简单的读写分离 如图。 这种模式的读写分离,严格区分后端的master和slave节点,且slave节点必须设置选项read_only=1。在ProxySQL上,分两个组,一个写组HG=10,一个读组HG=20。同时在ProxySQL上开启monitor模块的read_only监控功能,让ProxySQL根据监控到的read_only值来自动调整节点放在HG=10(master会放进这个组)还是HG=20(slave会放进这个组)。 这种模式的读写分离是最简单的,只需在mysql_users表中设置用户的默认路由组为写组HG=10,并在mysql_query_rules中加上两条简单的规则(一个select for update,一个select)即可。 例如,下面实现的就是这种读写分离模式。 mysql_replication_hostgroups: +------------------+------------------+----------+ | writer_hostgroup | reader_hostgroup | comment | +------------------+------------------+----------+ | 10 | 20 | cluster1 | +------------------+------------------+----------+ mysql_servers: +--------------+----------+------+--------+--------+ | hostgroup_id | hostname | port | status | weight | +--------------+----------+------+--------+--------+ | 10 | master | 3306 | ONLINE | 1 | | 20 | slave1 | 3306 | O……
SE_You 2024-03-2626 0 0 -
MySQL中间件之ProxySQL(2):初试读写分离
1.实现一个简单的读写分离 这里通过一个简单的示例实现ProxySQL的读写分离功能,算是ProxySQL的快速入门。即使是快速入门,需要配置的内容也很多,包括:后端MySQL配置、监控配置、发送SQL语句的用户、SQL语句的路由规则。所以,想要实现一个ProxySQL+MySQL,即使只实现最基本的功能,步骤也是挺多的,不过配置的逻辑都很简单。 实验环境: 角色 主机IP server_id 数据状态 Proxysql 192.168.100.21 null 无 Master 192.168.100.22 110 刚安装的全新MySQL实例 Slave1 192.168.100.23 120 刚安装的全新MySQL实例 Slave2 192.168.100.24 130 刚安装的全新MySQL实例 为了演示完整的过程,这里把后端MySQL主从复制的基本配置步骤也列出来了。如了解配置过程,可跳过主从配置的部分。 注意点:slave节点需要设置read_only=1。如果后端是PXC/MGR/MariaDB Galera,则无需手动设置,因为会自动设置。 1.1 配置后端的主从复制 提供3个MySQL节点的配置文件。 # 以下是Master的配置文件 [mysqld] datadir=/data socket=/data/mysql.sock server-id=110 log-bin=/data/master-bin sync-binlog=1 log-error=/data/error.log pid-file=/data/mysqld.pid # 以下是slave1的配置文件 [mysqld] datadir=/data socket=/data/mysql.sock server-id=120 relay_log=/data/relay-log log-error=/data/error.log pid-file=/data/mysqld.pid read_only=1 # 以下是slave2的配置文件 [mysqld] datadir=/data socket=/data/mysql.sock server-id=130 relay_log=/data/relay-log log-error=/data/error.log pid-file=/data/mysqld.pid read_only=1 为3个MySQL节点提供数据目录/data mkdir /data chown -R mysql.mysql /dat……
SE_You 2024-03-1445 0 0