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
参数说明:
-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=utf8collation-server=utf8_unicode_ciskip-character-set-client-handshakeskip-name-resolve#skip-name-resolve一定要加,不然连接mysql会特别慢#添加master主从复制部分配置server_id=1log-bin=mysql-binread-only=0binlog-do-db=hslmall_umsbinlog-do-db=hslmall_pmsbinlog-do-db=hslmall_omsbinlog-do-db=hslmall_smsbinlog-do-db=hslmall_wmsbinlog-do-db=hslmall_adminreplicate-ignore-db=mysqlreplicate-ignore-db=sysreplicate-ignore-db=information_schemareplicate-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
示意图
Sharding-Proxy
根据官网说明进行文件配置