32.多源复制,读写分离,双主模型
Posted 吾食梅州
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了32.多源复制,读写分离,双主模型相关的知识,希望对你有一定的参考价值。
4月12日
回顾:
主 binlog dump
从:io thread sql thread
传统概念:
1.一主可以多从
2.一从只能有一主(开源复制)
新机制(淘宝彭立新)
3.一从多主(多源复制),MariaDB-10
主:read/write
从:read
简单的主从复制
1.master
启用二进制日志
log-bin=
log-bin-index=
为master选择一个在当前复制架构中唯一的server-id
server-id={0-2^32}
创建一个具有复制权限的用户账号
grant replication slave,replcation client on *.* to 'username'@'hostname',identified by 'password'
2.salve
启用中继日志
relay-log
relay-log-index
为slave选择一个在当前复制架构中唯一的server-id
server-id={0-2^32}
连接至主服务器
change master to master_host='',master_user='',master_password='',master_log_file='',master_log_pos=#
mysql简单复制应用扩展
1.主从服务器的时间要同步(NTP)
创建一个时间服务器
*/5 * * * * /user/sbin/ntpdate ntpserver &> /dev/null
2.如何限制从服务器只读
在从服务器上启动read-only=ON
注意:仅能限制那不具有super权限的用户无法执行写操作
想限制所有用户
flush tables with read lock
3.如何主从复制时的事务安全?
sync_binlog=1
4.半同步复制
主服务器
install plugin rpl_semi_sync_master soname 'semisync_master.so'
MariaDB [(none)]> show global variables like '%semi%';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled(是否启动半同步功能) | OFF |
| rpl_semi_sync_master_timeout(连接从节点的超时时间) | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave(是否检测半同步从节点上线) | ON |
+------------------------------------+-------+
4 rows in set (0.07 sec)
set global rpl_semi_sync_master_enabled = ON
set global
rpl_semi_sync_master_timeout = 10000
从服务器
set global rpl_semi_sync_slave some 'semisync_slave.so'
set global rpl_semi_sync_alave_enabled = ON
stop slave io_therad
start slave io_therad
在主服务器验证半同步
show global vaiables like ‘%semi’
卸载插件:
uninstall
一旦某次等待超时,会自动降级为异步
5、复制过滤器:
master:
binlog_do_db=(白名单)
binlog_ignore_db=(黑名单)
slave
replicate_do_db=(数据库白名单)
replicate_ignore_db=(数据库黑名单)
replicate_do_table= db
_name.table_name (数据库白名单)
replicate_ignore_db= db
_name.table_name (数据库黑名单)
使用正则表达式
replicate_wild_do_table=
replicate_wild_igonre_table=
my.cnf: [mysqld]
6.双主复制:
1)、在两台服务器上各自建立一个具有复制权限的用户;
2)、修改配置文件:
# 主服务器A上
[mysqld]
server-id = 10
log-bin = mysql-bin
relay-log = relay-mysql
auto-increment-offset = 1
auto-increment-increment = 2
# 主服务器B上
[mysqld]
server-id = 20
log-bin = mysql-bin
relay-log = relay-mysql
auto-increment-increment = 2
# 步长
auto-increment-offset = 2
# 起始值
3)、如果此时两台服务器均为新建立,且无其它写入操作,各服务器只需记录当前自己二进制日志文件及事件位置,以之作为另外的服务器复制起始位置即可
serverA|mysql> SHOW MASTER STATUS\G
************************** 1. row ***************************
File: mysql-bin.000001
Position: 710
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
server2|mysql> SHOW MASTER STATUS\G
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 811
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
4、各服务器接下来指定对另一台服务器为自己的主服务器即可:
serverA|mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=811
serverB|mysql> CHANGE MASTER TO ...,MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=710
多主,且高可用的解决方案
MMM:Multi Master MySQL
MHA:MySQL HA
独自完成:MMM
7.ssl
独自完成:基于ssl的复制
主从复制架构:
半同步复制:多个从找一个反映最快的来响应,为了确保主从的数据一致
semi-synchronously
从多个服务器,以均衡为目的挑选一个响应客户端请求的服务器
round-robin
取模
memcached:缓存能力+API
一主一从
一主多从
双主模型
多级复制
环状模型
读写分离:读写分离,负载均衡
博客作业
1.上述1-7步
2.MMM
跟复制相关的文件:
master.info:文本文件,保存从服务器连接至主服务器时要需要的信息,每行一个值
relay-log.info: 文本文件,保存了当前访问二进制文件及坐标和中继日志的文件及坐标
为了复制的安全性
sync_master_info=1
sync_relay_log=1
sync_relay_log_info=1
从服务器意外崩溃时,建议使用pt-slave-start命令来启动salve
基于行基于语句复制
基于语句:
数据量小,益于查看,适应性强
有些语句无法做精确复制,无法对使用了触发器、存储过程等代码的应用实现精确复制
基于行:
能够精确完成有着触发器、存储过程等代码场景中的复制,能完成几乎所有的复制功能,较少的cpu占用率
无法判断执行了什么样的sql语句,数据量可能略大
从服务器落后于主服务器
Seconds_Behind_Master:落后于主服务器的时长,0表示不落后
评估主从服务器表中的数据是否一致
pt-table-checksum
如果数据不一致,解决办法:
1.重新备份并在从服务器上导入数据
2.pt-table-sync同步
为了提高复制时的数据安全性,在主服务器上的设定
sync_binlog=1
innodb_flush_log_at_trx_commit =1
此参数的值设定为1,性能下降会较严重,因此,一般设定为2等,此时,主服务器崩溃依然有可能导致从服务器无法获取到全部的二进制日志事件
如果msater意外崩溃导致二进制日志的某事件损坏,可以在服务器上使用如下参数
sql_slave_skip_counter=0
第三方复制解决方案 tungsten galera
mysql GTID:
标识号:用来实现在复制架构中用来唯一标识事务,为UUUID+事务号
多线程复制为多数据库复制,每个数据库启动一个线程进行复制
MUlti-Sourse
总结:多源复制,每个元应该使用不同的数据库
多源复制目前不支持半同步复制
GTID(HA快速切换,多线程复制)
多源复制
mysql-proxy
tcpdump
-i:端口
-X:反解为ascii
-c:捕获包的多少
-A反解为ascii
忘记管理员密码的解决方法
跳过授权表
--skip-grant-tables
跳过网络
--skip--networking
以上是关于32.多源复制,读写分离,双主模型的主要内容,如果未能解决你的问题,请参考以下文章