mysql 数据库DBA课程10_02 Mycat 分布式架构

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


+++++++++++++++++++++++++++++++++++++++++++++++++++