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

1)、集群原理

从零到壹搭建一个商城架构--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用户。

从零到壹搭建一个商城架构--MySQL集群_第2张图片

  • 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自动探测,并将客户端连接到新节点。
    从零到壹搭建一个商城架构--MySQL集群_第3张图片
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
    

参数说明:

-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
    

    如以下内容:

  [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
  • 重启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
    
  • 进入挂载的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
  • 为master授权用户来他的同步数据

    • 进入

      docker exec -it mysql-master /bin/bash
      
    • 进入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';
      
    • 查看master状态

      show master status\G
      
  • 配置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
    
  • 示意图

从零到壹搭建一个商城架构--MySQL集群_第4张图片

  • Sharding-Proxy

从零到壹搭建一个商城架构--MySQL集群_第5张图片

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

你可能感兴趣的:(项目分享,mysql,架构,数据库,从零到壹搭建一个商城架构,MySQL集群)