读写分离
原理: 两个服务器,进行主从同步,然后客户端访问调度服务器,写操作交给主库处理,读操作交给从库操作
构建思路: 搭建好MySQL主从配置,添加一个MySQL代理服务器,客户端通过代理主句访问MySQL数据库 配置:三个服务器
主从同步数据库(配置如上)
调度服务器:
1. 装包 maxscale
2. 配置
我们开启读写分离,一般是注释掉所有的只读配置,只做读写操作的配置,因为软件会自动根据后台服务器的主从关系,确定读写分离给哪个服务器 (修改配置文件/etc/maxscale.cnf)
[maxscale] # 定义线程个数
threads=auto
[server1] # 定义一个数据库服务器(按照需求,创建多个)
type=server
address=后台数据库的IP # 后台数据库服务器的IP地址
port=3306 # 定义端口一般是(3306)
protocol=MySQLBackend
[MySQL Monitor] # 定义监控服务(检查主从多个服务器的服务情况,以及主从架构是否正常运行)
type=monitor
module=mysqlmon
servers=server1, server2 # 添加监控的服务器
user=监控用户 # 监控时候用于连接后端数据库的用户
passwd=密码 # 用户登陆时候的密码
monitor_interval=10000
[Read-Only Service] # 定义只读数据库服务器
type=service
router=readconnroute
servers=server3, server4 # 添加只读的数据库服务器
user=连接用户 # 添加用于验证客户端输入用户能否登陆的连接用户名
passwd=密码
router_options=slave
[Read-Write Service] # 定义读写数据库服务器
type=service
router=readwritesplit
servers=server1, server2 # 添加读写的数据库服务器
user=连接用户 # 添加用于验证客户端输入用户能否登陆的连接用户名
passwd=密码
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=MySQLClient
port=4006 # 读写服务器的端口号
[MaxAdmin Listener] # 定义管理服务
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=自定义一个端口 # 管理服务器的端口号
3. 授权
grant replication slave, replication client on *.* to 监控用户@'%' identified by '密码';
grant select on mysql.* to 连接用户@'%' identified by '密码';
grant all on db2.t1 to 客户端访问用户@'%' identified by '密码';
4. 启服务(不用systemctl启动,软件命令)
maxscale -f /etc/maxscale.cnf
# 停止服务,只能杀死进程
pkill -9 maxscale
5. 测试
# 测试调度服务器的管理服务(查看能否显示出主从服务器的状态,账号密码是默认的)
[root@maxamin ~]# maxadmin -uadmin -pmariadb -P管理服务的端口号
MaxScale> list servers
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
server1 | 172.100.10.1 | 3306 | 1 | Slave, Running
server2 | 172.100.10.2 | 3306 | 2 | Master, Running
-------------------+-----------------+-------+-------------+--------------------
# 测试读写分离是否成功
[root@client ~]# mysql -h调度服务器IP -u 访问用户 -p密码 -P读写服务器端口(如果配置没有修改默认4006)
# 检查读(如果显示从库主机命,那说明读操作没有问题,读的是从库)
mysql> select @@hostname;
# 检查写(添加一个数据,如果读没有问题,添加后,前往主库和从库,都能查看到数据,就说明 读写分离成功)
mysql> insert into 库.表 vlaues(数据)
MySQL多实例
多实例: 让一台物理机可以运行多个数据库服务
多实例的作用: 节约成本 、 提高硬件利用率
配置:
1. 装包 安装一个支持多实例的mysql软件版本
2. 修改主配置文件(完整修改/etc/my.cnf)
[mysqld_multi]
mysqld = /软件包存储的位置/mysql_safe
mysqladmin = /软件包存储的位置/mysqladmin
user = root
[mysqld编号] # 创建一个mysql实例
port = 3307
datadir = /用于存储mysql的目录(需要自己创建)
socket = /用于存储mysql的目录/mysql.sorck(自定义存储socket文件名)
pid-file = /用于存储mysql的目录/mysql.pid(自定义存储pid号的文件)
log-error = /用于存储mysql的目录/mysqld.err(自定义存储日志错误信息的文件)
3. 初始化 、 启动服务
3.1 创建存储各个实例的目录
3.2 创建mysql用户
3.3 启动
/软件安装/mysqld_multi start 启动数据库编号
4. 检查服务状态
netstat -utnlp | grep mysqld
执行:
/软件安装位置/mysql -uroot -p密码 -S sorck文件位置
注意:
1. 启动服务前要确认创建量用户mysql
2. 主库挂了就全部挂了,从库挂了就还可以使用,只不过读写都是给主库了