读写分离是什么:
利用主从数据库来实现读写分离,从而分担主数据库的压力。在多个服务器上部署mysql,将其中一台认为主数据库,而其他为从数据库,实现主从同步。其中主数据库负责主动写的操作,而从数据库则只负责主动读的操作(slave从数据库仍然会被动的进行写操作,为了保持数据一致性),这样就可以很大程度上的避免数据丢失的问题,同时也可减少数据库的连接,减轻主数据库的负载。
简单来说读写分离就是为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作。
中间件(middleware):
中间件可以实现数据库的读写分离,分摊每台服务器的负载,从而实现负载均衡
中间件有哪些:
- mycat (开源免费)
- MySQLrouter(Mysql官方出品)
- weblogic(Oracle)
- oneproxy
图解
读写分离配置(基于Mysqlrouter)
实验步骤:
- 下载并安装mysqlrouter官方地址
- [root@mysql-router-1 mysqlrouter]# rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm
- 修改配置文件
[root@mysql-router-1 ~]# cd /etc/mysqlrouter/
[root@mysql-router-1 mysqlrouter]# ls
mysqlrouter.conf
[root@mysql-router-1 mysqlrouter]# vim mysqlrouter.conf
[routing:read_write]
bind_address = 192.168.0.176 #mysqlrouter服务器IP地址
bind_port = 7001
mode = read-write #master可读可写
destinations = 192.168.0.163:3306 #master ip
max_connections = 65535
max_connect_errors = 100
client_connect_timeout = 9
[routing:read_only]
bind_address = 192.168.0.176
bind_port = 7002
mode = read-only
destinations = 192.168.0.58:3306 #slave ip
max_connections = 65535
max_connect_errors = 100
client_connect_timeout = 9
[root@mysql-router-1 mysqlrouter]# service mysqlrouter start
Redirecting to /bin/systemctl start mysqlrouter.service
[root@mysql-router-1 mysqlrouter]#
[root@mysql-router-1 mysqlrouter]# netstat -anplut|grep mysqlrouter
tcp 0 0 192.168.0.153:7001 0.0.0.0:* LISTEN 15831/mysqlrouter
tcp 0 0 192.168.0.153:7002 0.0.0.0:* LISTEN 15831/mysqlrouter
4.创建用户
[root@mysql-router-1 mysqlrouter]#
在master上创建2个用户,一个读写,一个读
root@(none) 15:26 mysql>grant all on *.* to "user1"@'%' identified by '123456wu';
Query OK, 0 rows affected, 1 warning (0.02 sec)
root@(none) 15:26 mysql>grant select on *.* to 'user2'@'%' identified by '123456zou';
Query OK, 0 rows affected, 1 warning (0.03 sec)
root@(none) 15:27 mysql>