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.多源复制,读写分离,双主模型的主要内容,如果未能解决你的问题,请参考以下文章

MySQL双主双从 + 多源复制配置

linux笔记 第四十课 mysql主从复制

mysql多源复制(多主一从)配置

mysql多源复制(多主一从)配置

(转)MySQL多源复制

MySQLmysql5.7多源复制报错问题处理