MYSQL读写分离
原理: 基于主从结构的数据库集群,主库master处理事务增(insert),删(delete),改(update)等操作,从库slave处理select事务.
特点:
- 提高查询效率,一定程度上减轻主服务器的压力,提高负载能力
- 适合查询多更新少的情况下
拓扑图
proxy服务器使用maxscale中间件服务
- MariaDB开发
- 下载地址
rpm -ivh maxscale***.rpm
vim /etc/maxscale.cnf
[maxscal] //定义线程
threads=auto //根据cpu自动调配
[server1] //定义数据库服务器
type=server
address=192.168.4.51 //master主机ip地址
port=3306
protocol=MySQLBackend
[server2]
type=server
address=192.168.4.52 //slave主机ip
port=3306
protocol=MySQLBackupend
[MYSQL Monitor] //定义要监视的数据库节点
type=monitor
module=mysqlmon
servers=server1,server2 //监控数据库列表
user=maxscalemon //监控用户
passwd=123qqq...A //密码
monitor_interval=10000 //监控间隙单位10000ms=10s
#[Read-Only Service]
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave
//注释掉只读服务
[Read-Write Service] //定义读写分离数据库节点
type=service
router=readwritesplit
servers=server1,server2
user=maxscalerouter
passwd=123qqq...A
max_slave_connections=100%
[MaxAdmin Service]
type=service
router=cli
#[Read-Only Listener]
#type=listener
#service=Read-Only Service
#protocol=MySQLClient
#port=4008
//注释掉只读的端口
[Read-Write Listener] //定义读写分离端口号
type=listener
service=Read-Write Service
protocol=MySQlClinet
port=4006
[MaxAdmin Listerner] //定义管理服务端口
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4016 //指定端口
********************************************
在主/从服务器上授权监控用户和路由用户
只需在主服务器授权,从库自动复制
mysql> grant replication slave,replication client on *.* to maxscalemon@'%' identified by "123qqq...A";
//创建监控用户
mysql>grant select on mysql.* to maxscalerouter@'%' identified by "123qqq...A";
//创建路由用户
proxy主机测试授权用户
mysql -h 192.168.4.51 -umaxscalemon -p123qqq…A
mysql -h 192.168.4.52 -umaxscalemon -p123qqq…A
mysql -h 192.168.4.51 -umaxscalerouter -p123qqq…A
mysql -h 192.168.4.52 -umaxscalerouter -p123qqq…A
启动代理服务
maxsacle -f /etc/maxscale.cnf //查看进程
ps -C maxscale //查看进程
netstat -anptu | grep maxscale //产看服务端口
maxadmin -uadmin -pmariadb -P4016 //进入服务
MaxScale> list servers 查看服务
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 192.168.4.51 | 3306 | 0 | Master, Running
server2 | 192.168.4.52 | 3306 | 0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
master主服务器添加访问用户
create database gamedb
grant select,insert on gamedb.* to yaya@'%' identified by '123qqq...A'
client客户端方位代理服务器实现读写分离
mysql -h192.168.4.57 -P4006 -uyaya -p123qqq...A //-P指定读写分离端口
SQL语句测试
在从服务器添加数据,主服务器不显示,但客户端可以查询到,说明查询请求分配到了从服务器.-
..................