mha + atlas ----> 故障自动切换,读,负载,多用于那种,读多写少的场景。 分布式架构:大量写,大量读 企业分布式数据库解决方案介绍 360 Atlas ------>Atlas-sharding 做分片的,只适合于他们自己。 Alibaba cobar,早期,分布式架构,已淘汰,现在是,TDDL,用Java开发的,它的前身就是cobar Mycat -----> 开源的,官网http://www.mycat.org.cn/ DBLE ------> 开源的,在Mycat 的基础上,进行的研发。 TDDL-------> 现阿里,内部使用的,分布式架构,支持很多种数据库。 Heisenberg -----> 强大好用的mysql 分库分表中间件,百度内部用的,由百度员工个人编写。 Oceanus -----> 58同城 用的 Vitess -----> 谷歌使用的 DRDS ----> 阿里云上面的一个,分布式架构,用的是TDDL封装出来的,收费的。 +++++++++++++++ MyCAT 基础架构图:--------------------- 说明 : 8个节点(实例),两个虚拟机,每个虚拟机上面用的是,多实例 这8个节点被分为 两组,红色的一组,蓝色的一组,每一组,称之为一个分片 红色部分:两主两从,两个,3307互为主从,3309分别都是 3307的从 蓝色部分:两主两从,两个,3308 互为主从,3310分别都是3308的从 1. MyCAT基础架构准备 1.1 环境准备: 两台虚拟机 db01---- 192.168.189.99 db02 ------ 192.168.189.131 mycat --------> 主机名 mycat 192.168.189.128 安装好Mysql 5.7.26 db01 db02 每台创建四个mysql实例:3307 3308 3309 3310 1.2 创建相关目录初始化数据 (db01 db02 两台服务器上都要操作) mkdir /data/33{07..10}/data -p mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/application/mysql mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/application/mysql mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/application/mysql mysqld --initialize-insecure --user=mysql --datadir=/data/3310/data --basedir=/application/mysql 1.3 准备db01 ----- 192.168.189.99配置文件和启动脚本 cat >/data/3307/my.cnf<<EOF [mysqld] basedir=/application/mysql datadir=/data/3307/data socket=/data/3307/mysql.sock port=3307 log-error=/data/3307/mysql.log log_bin=/data/3307/mysql-bin binlog_format=row skip-name-resolve server-id=7 gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 EOF /data/3308/my.cnf -----> 目录3307改成3308 port=3308 server-id=8 /data/3309/my.cnf -----> 目录3307改成3309 port=3309 server-id=9 /data/3310/my.cnf -----> 目录3307改成3310 port=3310 server-id=10 其余配置都一样。 cat >/etc/systemd/system/mysqld3307.service<<EOF [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf LimitNOFILE = 5000 EOF /etc/systemd/system/mysqld3308.service -------> 3307 改成 3308 /etc/systemd/system/mysqld3309.service -------> 3307 改成 3309 /etc/systemd/system/mysqld3310.service -------> 3307 改成 3310 其他配置都一样 1.4 准备db02 --- 192.168.189.131配置文件和启动脚本 cat >/data/3307/my.cnf<<EOF [mysqld] basedir=/application/mysql datadir=/data/3307/data socket=/data/3307/mysql.sock port=3307 log-error=/data/3307/mysql.log log_bin=/data/3307/mysql-bin binlog_format=row skip-name-resolve server-id=17 gtid-mode=on enforce-gtid-consistency=true log-slave-updates=1 EOF /data/3308/my.cnf -----> 目录3307改成3308 port=3308 server-id=18 /data/3309/my.cnf -----> 目录3307改成3309 port=3309 server-id=19 /data/3310/my.cnf -----> 目录3307改成3310 port=3310 server-id=20 其余配置都一样。 cat >/etc/systemd/system/mysqld3307.service<<EOF [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf LimitNOFILE = 5000 EOF /etc/systemd/system/mysqld3308.service -------> 3307 改成 3308 /etc/systemd/system/mysqld3309.service -------> 3307 改成 3309 /etc/systemd/system/mysqld3310.service -------> 3307 改成 3310 其他配置都一样 1.5 修改权限,启动多实例(db01 db02 两台服务器上都操作) chown -R mysql.mysql /data/* systemctl start mysqld3307 systemctl start mysqld3308 systemctl start mysqld3309 systemctl start mysqld3310 mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'" mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'" mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'" mysql -S /data/3310/mysql.sock -e "show variables like 'server_id'" 1.6 节点主从规划 箭头指向谁是主库 192.168.189.99:3307 <-----> 192.168.189.131:3307 #互为主从 192.168.189.99:3309 从 ------> 192.168.189.99:3307 主 192.168.189.131:3309 从 ------> 192.168.189.131:3307 主 192.168.189.131:3308 <-----> 192.168.189.99:3308 #互为主从 192.168.189.131:3310 从 -----> 192.168.189.131:3308 主 192.168.189.99:3310 从 -----> 192.168.189.99:3308 主 1.7 分片规划 shard1: Master:192.168.189.99:3307 slave1:192.168.189.99:3309 Standby Master:192.168.189.131:3307 (备用主,只有真正的主down掉,才会写,平时就负责读) slave2:192.168.189.131:3309 shard2: Master:192.168.189.131:3308 slave1:192.168.189.131:3310 Standby Master:192.168.189.99:3308 slave2:192.168.189.99:3310 1.8 开始主从配置 #第一组四节点结构 # 192.168.189.99:3307 <-----> 192.168.189.131:3307 ##互为主从 ## db02: mysql -S /data/3307/mysql.sock -e "grant replication slave on *.* to repl@'192.168.%' identified by '123';" mysql -S /data/3307/mysql.sock -e "grant all on *.* to root@'192.168.%' identified by '123' with grant option;" ## db01: mysql -S /data/3307/mysql.sock -e "change master to master_host='192.168.189.131', master_port=3307, master_auto_position=1, master_user='repl', master_password='123';" mysql -S /data/3307/mysql.sock -e "start slave;" mysql -S /data/3307/mysql.sock -e "show slave status\G" ## db02: mysql -S /data/3307/mysql.sock -e "change master to master_host='192.168.189.99', master_port=3307, master_auto_position=1, master_user='repl', master_password='123';" mysql -S /data/3307/mysql.sock -e "start slave;" mysql -S /data/3307/mysql.sock -e "show slave status\G" ======================= # 192.168.189.99:3309 从------> 192.168.189.99:3307 主 ## db01: mysql -S /data/3309/mysql.sock -e "change master to master_host='192.168.189.99', master_port=3307, master_auto_position=1, master_user='repl', master_password='123';" mysql -S /data/3309/mysql.sock -e "start slave;" mysql -S /data/3309/mysql.sock -e "show slave status\G" # 192.168.189.131:3309 从 ------> 192.168.189.131:3307 主 ## db02: mysql -S /data/3309/mysql.sock -e "change master to master_host='192.168.189.131', master_port=3307, master_auto_position=1, master_user='repl', master_password='123';" mysql -S /data/3309/mysql.sock -e "start slave;" mysql -S /data/3309/mysql.sock -e "show slave status\G" #第二组四节点 #192.168.189.131:3308 <-----> 192.168.189.99:3308 互为主从 ## db01: mysql -S /data/3308/mysql.sock -e "grant replication slave on *.* to repl@'192.168.%' identified by '123';" mysql -S /data/3308/mysql.sock -e "grant all on *.* to root@'192.168.%' identified by '123' with grant option;" ## db02: mysql -S /data/3308/mysql.sock -e "change master to master_host='192.168.189.99', master_port=3308, master_auto_position=1, master_user='repl', master_password='123';" mysql -S /data/3308/mysql.sock -e "start slave;" mysql -S /data/3308/mysql.sock -e "show slave status\G" ## db01: mysql -S /data/3308/mysql.sock -e "change master to master_host='192.168.189.131', master_port=3308, master_auto_position=1, master_user='repl', master_password='123';" mysql -S /data/3308/mysql.sock -e "start slave;" mysql -S /data/3308/mysql.sock -e "show slave status\G" # 192.168.189.131:3310 从 -----> 192.168.189.131:3308 主 ## db02: mysql -S /data/3310/mysql.sock -e "change master to master_host='192.168.189.131', master_port=3308, master_auto_position=1, master_user='repl', master_password='123';" mysql -S /data/3310/mysql.sock -e "start slave;" mysql -S /data/3310/mysql.sock -e "show slave status\G" # 192.168.189.99:3310 -----> 192.168.189.99:3308 ## db01: mysql -S /data/3310/mysql.sock -e "change master to master_host='192.168.189.99', master_port=3308, master_auto_position=1, master_user='repl', master_password='123';" mysql -S /data/3310/mysql.sock -e "start slave;" mysql -S /data/3310/mysql.sock -e "show slave status\G" 1.9 检测主从状态 (两台服务器都要操作) mysql -S /data/3307/mysql.sock -e "show slave status\G"|grep Yes mysql -S /data/3308/mysql.sock -e "show slave status\G"|grep Yes mysql -S /data/3309/mysql.sock -e "show slave status\G"|grep Yes mysql -S /data/3310/mysql.sock -e "show slave status\G"|grep Yes
![]()
================================================================== 2. MyCAT安装 2.1 预先安装Java运行环境 (192.168.189.128) yum install -y java 2.2下载 macat---- 192.168.189.128 http://www.mycat.org.cn/ ##网站 cd /opt wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz 2.3 解压文件 cd /opt/ tar zxf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /usr/local/ 2.4 启动和连接 配置环境变量 vim /etc/profile export PATH=/usr/local/mycat/bin:$PATH source /etc/profile 启动mycat start
![]()
![]()
连接mycat:mysql -uroot -p123456 -h 127.0.0.1 -P8066 默认的用户名:root 密码 123456
+++++++++++++++++++++++++++++++++++++++++++++++++++
--------------------- 说明 :
8个节点(实例),两个虚拟机,每个虚拟机上面用的是,多实例
这8个节点被分为 两组,红色的一组,蓝色的一组,每一组,称之为一个分片
红色部分:两主两从,两个,3307互为主从,3309分别都是 3307的从
蓝色部分:两主两从,两个,3308 互为主从,3310分别都是3308的从
1. MyCAT基础架构准备
1.1 环境准备:
==================================================================
2. MyCAT安装
2.1 预先安装Java运行环境 
连接mycat:
+++++++++++++++++++++++++++++++++++++++++++++++++++