一、mysql路由
1.利用路由器的连接路由特性,用户可以编写应用程序来连接到路由器,并令路由器使用响应的路由策略来处理连接来使其连接到正确的mysql数据库服务器
2.mysql route的部署方式
需要在所有数据库主机之外再打开一台主机mysql-router
配置mysql-router
vim /etc/mysqlrouter/mysqlrouter.conf
[routing:ro]
bind_address=0.0.0.0
bind_port=7001
destinations=172.25.254.10:3306,172.25.254.20:3306,172.25.254.30:3306
routing_strategy=round-robin
[routing:rw]
bind_address=0.0.0.0
bind_port=7002
destinations=172.25.254.30:3306,172.25.254.20:3306,172.25.254.10:3306
routing_stragegy=first-available
启动mysqlrouter
systemctl start mysqlrouter.service
建立测试用户:
create user xiao@'%' identified by 'xiao';
grant all on xiao.* to xiao@'%';
查看调度效果
watch -1 lsof -i :3306
二、mysql高可用之MHA
1.MHA是:高可用环境下故障切换和主从复制的软件
解决mysql单点问题
它可以在0-30s内自动完成故障切换操作
可以在故障切换的过程中最大程度保证数据的一致性
2.MHA的组成:
其由MHAManage(管理节点),MHA Node(数据节点)
MHAManage可以单独部署到一台独立的机器上管理多个master-slave集群,也可以部署到slave节点上
MHAManager会定时探测集群中的master节点
当master出现故障时,会自动将最新数据的slave提升为新的master,然后将其他所有的slave重新指向新的master
3.MHA的特点
自动故障过程中,MHA从宕机的主服务器上保存二进制日志,最大程度保证数据不丢失
使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器,因此可以保证所有节点的数据一致性
MHA支持一主多从架构,最少三台服务器(一主两从)
4.故障切换备选主库算法:
最接近master的slave成为备选的master
数据一致的情况下,按照配置文件顺序选择备选主库
设定权重(candidate_master=1),按照权重强制指定备选主
默认情况下如果有一个slave落后master 100M的relay logs,即使由权重也会失效
如果check_repl_delay=0,即使落后很多日志,也强制选择其为备选主
5.MHA部署实施:
在master节点中:
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
log_slave_updates=ON
enforce-gtid-consistency=ON
symbolic-links=0
在其他两个从节点上的配置信息
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
gtid_mode=ON
log_slave_updates=ON
enforce-gtid-consistency=ON
symbolic-links=0
配置MHA的管理环境:
编辑配置文件:vim /etc/masterha/app1.cnf
[server default]
user=root
password=test
ssh_user=repl
repl_password=test
master_binlog_dir= /data/mysql
remote_workdir=/tmp
secondary_check_script= masterha_secondary_check -s 172.25.254.10 -s
172.25.254.11
ping_interval=3
#发生故障后调用的脚本,用来迁移vip
master_ip_failover_script= /script/masterha/master_ip_failover
manager_workdir=/etc/masterha
manager_log=/var/etc/masterha/manager.log
[server1]
hostname=172.25.254.10
cnadidate_master=1 可能作为master主机
check_repl_delay=0 忽略复制延迟,在候选主切换过程中其一定为新的master
[server2]
hostname=172.25.254.20
candidate_master=1
check_repl_delay=0
[server3]
hostname=172.25.254.30
no-master=1 不会作为master的主机
监控程序通过指定的配置文件监控master状态,当master出问题后自动切换并退出避免重复做故障切换
masterha_manager --conf=/etc/masterha/app1.cnf