• 从零到壹搭建一个商城架构--MySQL集群


    1)、集群原理

    在这里插入图片描述

    以上可以作为企业中常用的数据库解决方案

    • MySQL-MMM是Master-Master Replication Manager for MySQL(mysql主主复制管理器)的简称,是Google的开源项目(Perl脚本)。MMM基于MySQL Replication 做的扩展架构,主要用来监控mysql主主复制并做失败转移,其原理是将真实数据库节点的IP(RIP)映射为虚拟IP(VIP)集。mysql-mm的监管端会提供多个虚拟IP(VIP),包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用的mysql之上,当某一台mysql宕机时,监管会将VIP迁移至其他mysql。在整个监管过程中,需要在mysql中添加相关授权用户,以便让mysql可以支持监管机的维护。授权的用户包括一个mmm_monitor用户和一个mmm_agent用户,如果想使用mmm的备份工具则添加一个mmm_tools用户。

    在这里插入图片描述

    • MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作(以2019的眼光来说太慢了),并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
    • InnDB Cluster支持自动Failover、强一致性、读写分离、读库高可用、读请求负载均衡横向扩展的特性,是比较完备的一套方案。但是不熟起来复杂,想要解决router单点问题,需要新增组件,如果没有其他更好的方案可考虑该方案。InnDB Cliuster主要由MySQL Shell、MySQL Router和MySQL服务器集群组成,三者协同工作,共同为MySQL提供完成的高可用性解决方案。MySQL Shell对管理人员提供管理接口,可以很方便的对集群进行配置和管理MySQL Router,可以根据部署的集群状况自动的初始化,是客户端连接实例。如果有节点宕机,集群会自动更新配置,集群包含单点写入和多点写入两种模式。在单主模式下,如果主节点宕机,从节点自动替换上来,MySQL Router自动探测,并将客户端连接到新节点。
      在这里插入图片描述
    2)、Docker安装模拟MySQL主从复制集群
    • 下载mysql镜像

    • 创建Master实例并启动

      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=root \
      -d mysql:5.7
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

    参数说明:

    -p 3307:3306 将容器的3306端口映射到主机的3307端口

    -v /mydata/mysql/master/conf:/etc/mysql 将配置文件夹挂载到主机

    -v /mydata/mysql/master/log:/var/log/mysql 将日志文件挂载到主机

    -v /mydata/mysql/master/data:/var/lib/mysql 将数据文件挂载到主机

    -e MYSQL_ROOT_PASSWORD=root 初始化root密码

    • 进入到挂载的master目录,修改配置文件

      vi /mydata/mysql/master/conf/my.cnf
      
      • 1

      如以下内容:

      [client]
    
      default-character-set=utf8
    
      
    
      [mysql]
    
      default-character-set=utf8
    
      
    
      [mysqld]
    
      init_connect=‘SET collaction_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
    
      #skip-name-resolve一定要加,不然连接mysql会特别慢
    
      #添加master主从复制部分配置
    
      server_id=1
    
      log-bin=mysql-bin
    
      read-only=0
    
      binlog-do-db=hslmall_ums
    
      binlog-do-db=hslmall_pms
    
      binlog-do-db=hslmall_oms
    
      binlog-do-db=hslmall_sms
    
      binlog-do-db=hslmall_wms
    
      binlog-do-db=hslmall_admin
    
      replicate-ignore-db=mysql
    
      replicate-ignore-db=sys
    
      replicate-ignore-db=information_schema
    
      replicate-ignore-db=performance_schema
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 重启master

    • 创建Slave实例并启动

      docker run -p 3317:3306 --name mysql-slave-01 \
      -v /mydata/mysal/slave/log:/var/log/mysql \
      -v /mydata/mysql/slave/data:/var/lib/mysql \
      -v /mydata/mysql/slave/conf:/etc/mysql \
      -e MYSQL_ROOT_PASSWORD=root \
      -d mysql:5.7
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 进入挂载的slave配置文件,加入以下内容

      如以下内容:

     [client]
    
     default-character-set=utf8
    
     
    
     [mysql]
    
     default-character-set=utf8
    
     
    
     [mysqld]
    
     init_connect=‘SET collaction_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
    
     #skip-name-resolve一定要加,不然连接mysql会特别慢
    
     #添加master主从复制部分配置
    
     server_id=2
    
     log-bin=mysql-bin
    
     read-only=1
    
     binlog-do-db=hslmall_ums
    
     binlog-do-db=hslmall_pms
    
     binlog-do-db=hslmall_oms
    
     binlog-do-db=hslmall_sms
    
     binlog-do-db=hslmall_wms
    
     binlog-do-db=hslmall_admin
    
     replicate-ignore-db=mysql
    
     replicate-ignore-db=sys
    
     replicate-ignore-db=information_schema
    
     replicate-ignore-db=performance_schema
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 为master授权用户来他的同步数据

      • 进入

        docker exec -it mysql-master /bin/bash
        
        • 1
      • 进入mysql内部(mysql -uroot -p)

        mysql -uroot -p
        #授权root可以远程访问(主从无关,为了方便我们远程连接mysql)
        grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
        flush privileges;
        #添加用来同步的用户
        GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
      • 查看master状态

        show master status\G
        
        • 1
    • 配置slave同步master数据

      #进入slave容器
      docker exec -it mysql-slave-01 /bin/bash
      #进入mysql内部(mysql -uroot -p)
      mysql -uroot -p
      #授权root可以远程访问
      grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
      flush privileges;
      #设置主库连接
      change master to master_host='192.168.56.10',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3307
      #启动从库同步
      start slave
      #查看从库状态
      show slave status\G
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    • 示意图

    在这里插入图片描述

    • Sharding-Proxy

    在这里插入图片描述

    根据官网说明进行文件配置

  • 相关阅读:
    最全Python操作excel代码,让你每天早下班两小时
    vue 深拷贝数据以后导致 页面卡顿
    制作一个简单HTML公司官网网页设计(HTML+CSS)
    /etc/profile文件与.bashrc文件的作用
    三款免费的AI绘画网站对比分析,真正好用的居然是它
    线性代数学习笔记7-4:马尔可夫矩阵、矩阵幂的稳态问题
    leetcode单调栈系列
    Django之路由层
    开源网安受邀参加2023澳门万讯论坛,引领软件安全领域国产化替代浪潮
    ise使用ChipScope时报错NgdBuild:604
  • 原文地址:https://blog.csdn.net/hsl_1990_08_15/article/details/127768398