zoukankan      html  css  js  c++  java
  • Mysql:主从搭建(基于Docker)

    集群

    集群的目标:

    • 高可用(HighAvailability),是当一台服务器停止服务后,对于业务及用户毫无影响。停止服务的原因可能由于网卡、路由器、机房、CPU负载过高、内存溢出、自然灾害等不可预期的原因导致,在很多时候也称单点问题。

    • 突破数据量限制,一台服务器不能储存大量数据,需要多台分担,每个存储一部分,共同存储完整个集群数据。最好能做到互相备份,即使单节点故障,也能在其他节点找到数据。

    • 数据备份容灾,单点故障后,存储的数据仍然可以在别的地方拉起。

    • 压力分担,由于多个服务器都能完成各自一部分工作,所以尽量的避免了单点压力的存在

    集群的基础形式:

    image-20210330094743369

    Mysql集群方案

    Mysql主主复制管理

    image-20210330101556188

    MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置(同一时间只有一个节点是可写的)。

    mysql-mmm的监管端会提供多个虚拟IP(VIP),包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某一台mysql宕机时,监管会将VIP迁移至其他mysql。

    在整个监管过程中,需要在mysql中添加相关授权用户,以便让mysql可以支持监理机的维护。授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果想使用mmm的备份工具则还要添加一个mmm_tools用户。

    InnonDB Cluster

    官网地址:https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-innodb-cluster.html

    InnoDB Cluster支持自动Failover、强一致性、读写分离、读库高可用、读请求负载均衡,横向扩展的特性,是比较完备的一套方案。但是部署起来复杂,想要解决router单点问题好需要新增组件,如没有其他更好的方案可考虑该方案。InnoDB Cluster主要由MySQL Shell、 MySQL Router和MySQL服务器集群组成,三者协同工作,共同为MySQL提供完整的高可用性解决方案。MySQL Shell对管理人员提供管理接口,可以很方便的对集群进行配置和管理,MySQL Router可以根据部署的集群状况自动的初始化,是客户端连接实例。如果有节点down机,集群会自动更新配置。集群包含单点写入和多点写入两种模式。在单主模式下,如果主节点down掉,从节点自动替换上来,MySOL Router会自动探测,并将客户端连接到新节点。

    image-20210330102737762

    Mysql主从分布

    搭建

    创建Master实例

    mkdir -p /mydata/mysql/master/log
    mkdir -p /mydata/mysql/master/data
    mkdir -p /mydata/mysql/master/conf
    docker run -p 3307:3306 --name mysql-master -v /mydata/mysql/master/log:/var/log/mysql -v /mydata/mysql/master/data:/var/lib/mysql -v /mydata/mysql/master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5.7
    

    创建slave实例

    mkdir -p /mydata/mysql/slave/log
    mkdir -p /mydata/mysql/slave/data
    mkdir -p /mydata/mysql/slave/conf
    docker run -p 3317:3306 --name mysql-slave -v /mydata/mysql/slave/log:/var/log/mysql -v /mydata/mysql/slave/data:/var/lib/mysql -v /mydata/mysql/slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=1234 -d mysql:5.7
    

    修改master配置:

    vi /mydata/mysql/master/conf/my.cnf
    
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    init_connect='SET collation_connection = utf8_unicode_ci'
    init_connect='SET NAMES utf8'
    character-set-server=utf8
    collation-server=utf8_unicode_ci
    skip-character-set-client-handshake
    skip-name-resolve
    

    修改slave配置

    cp /mydata/mysql/master/conf/my.cnf /mydata/mysql/slave/conf
    

    配置主从:master节点,添加以下配置到mysqld块

    vi /mydata/mysql/master/conf/my.cnf
    
    server_id=1
    log-bin=mysql-bin
    read-only=0
    binlog-do-db=gulimall_ums
    binlog-do-db=gulimall_pms
    binlog-do-db=gulimall_oms
    binlog-do-db=gulimall_sms
    binlog-do-db=gulimall_cms
    binlog-do-db=gulimall_wms
    binlog-do-db=gulimall_admin
    replicate-ignore-db=mysql
    replicate-ignore-db=sys
    replicate-ignore-db=information_schema
    replicate-ignore-db=performance_schema
    

    slave节点:添加以下配置到mysqld块

    vi /mydata/mysql/slave/conf/my.cnf
    
    server_id=2
    log-bin=mysql-bin
    read-only=1
    binlog-do-db=gulimall_ums
    binlog-do-db=gulimall_pms
    binlog-do-db=gulimall_oms
    binlog-do-db=gulimall_sms
    binlog-do-db=gulimall_cms
    binlog-do-db=gulimall_wms
    binlog-do-db=gulimall_admin
    replicate-ignore-db=mysql
    replicate-ignore-db=sys
    replicate-ignore-db=information_schema
    replicate-ignore-db=performance_schema
    

    重启mysql

    docker restart mysql-master mysql-slave
    

    master数据库执行:授权用户可以访问主节点进行日志复制

    GRANT replication slave on *.* to 'backup'@'%' IDENTIFIED by '123456'
    

    image-20210330115412271

    master状态

    show master STATUS
    

    image-20210330115542348

    slave数据库执行:设置主库连接

    change master to master_host='192.168.1.36',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=431,master_port=3307;
    start slave;   
    show slave STATUS;
    

    测试:

    主库导入这些:

    image-20210330120129249

    等待一小段时间,数据就同步过来了。

    image-20210330122537045

    ShardingSphere Jdbc读写分离配置见:ShardingJdbc:读写分离

    ShardingSphere Proxy读写分离配置见:ShardingProxy:简介与搭建

  • 相关阅读:
    A1023 Have Fun with Numbers (20分)(大整数四则运算)
    A1096 Consecutive Factors (20分)(质数分解)
    A1078 Hashing (25分)(哈希表、平方探测法)
    A1015 Reversible Primes (20分)(素数判断,进制转换)
    A1081 Rational Sum (20分)
    A1088 Rational Arithmetic (20分)
    A1049 Counting Ones (30分)
    A1008 Elevator (20分)
    A1059 Prime Factors (25分)
    A1155 Heap Paths (30分)
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14602260.html
Copyright © 2011-2022 走看看