行业知识
第102讲:MySQL多实例与Mycat分布式读写分离的架构实践
文章目录
- 1.Mycat读写分离分布式架构规划
- 2.在两台服务器中搭建八个MySQL实例
- 2.1.安装MySQL软件
- 2.2.创建每个MySQL实例的数据目录并初始化
- 2.3.准备每个实例的配置文件
- 2.4.准备每个实例的启动脚本
- 2.6启动每台机器的MySQL多实例
- 2.7.为每个MySQL实例设置密码
- 2.8.查看每个MySQL实例的server-id
- 3.将八个MySQL实例配置成主从复制集群
- 3.1.复制规划
- 3.2.配置mysql-1服务器中的主从复制集群
- 3.3.配置mysql-2服务器中的主从复制集群
- 3.4.双主复制
- 3.5.检查各个实例的主从状态
- 4.部署Mycat
- 4.1.部署Mycat
- 4.2.Mycat文件介绍
- 4.3.Mycat主配置文件简单介绍
- 5.在mysql-1的3306主库中写入一些数据
- 6.使用Mycat实现读写分离以及高可用架构
- 6.1.架构规划
- 6.2.使用Mycat实现读写分离集群
- 6.2.1.配置Mycat对主从复制集群实现读写分离
- 6.2.1.测试Mycat实现的读写分离集群
- 6.3.使用Mycat实现读写分离高可用集群
- 6.3.1.Mycat读写分离高可用架构集群概念
- 6.3.2.配置Mycat读写分离高可用集群
- 6.3.3.���试高可用的读写分离集群
1.Mycat读写分离分布式架构规划
基于Mycat的读写分离主从复制高可用架构图如下:
由于服务器数量有限,高可用集群由2台服务器实现,如果服务器数量很充足,那么准备8台服务器,部署8个数据库实例配置成4套MySQL主从复制集群,然后再将4套主从复制集群配置成双主双从集群,最终呈现出2套双主双从的复制集群。
双主双从集群可以通过Mycat实现高可用功能,将双主双从配置到Mycat的数据主机里,双主双从两套主从配置成两组读写分离,两个从库同时处理读操作,两个主库,其中一个主库承担所有的写操作,另一个主库处于备用状态,当主库挂了,备用的从库接替其工作,实现高可用。
基于Mycat打造读写分离主从复制高可用的分布式架构,通过一套双主双从即可实现,本次搭建两套双主双从是为了后期通过Mycat分库分表提供准备。
(如果想在分布式架构中引入MHA,可以准备12台服务器或者是12个实例,3个为1组配置成MHA高可用集群,然后由Mycat统一管理。)
由于服务器数量有限,我们使用2台服务器搭建基于Mycat的MySQL分布式架构。
IP 端口号 角色 搭建的服务 192.168.20.11 3306 Master MySQL 192.168.20.11 3307 Master MySQL 192.168.20.11 3308 Slave MySQL 192.168.20.11 3309 Slave MySQL 192.168.20.12 3306 Master MySQL 192.168.20.12 3307 Master MySQL 192.168.20.12 3308 Slave MySQL 192.168.20.12 3309 Slave MySQL 2.在两台服务器中搭建八个MySQL实例
2.1.安装MySQL软件
两台服务器都操作,先将MySQL软件安装在服务器上。
tar xf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local/mv /usr/local/mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql
2.2.创建每个MySQL实例的数据目录并初始化
由于两台服务器中的MySQL端口都一样,路径也保持一样,相同的命令在两台服务器中都执行。
1.创建每个实例的数据目录mkdir /data/mysql{3306,3307,3308,3309}2.初始化每个实例mysqld --initialize-insecure --user=mysql --datadir=/data/mysql3306 --basedir=/usr/local/mysqlmysqld --initialize-insecure --user=mysql --datadir=/data/mysql3307 --basedir=/usr/local/mysqlmysqld --initialize-insecure --user=mysql --datadir=/data/mysql3308 --basedir=/usr/local/mysqlmysqld --initialize-insecure --user=mysql --datadir=/data/mysql3309 --basedir=/usr/local/mysql3.授权chown -R mysql.mysql /data/mysql330*2.3.准备每个实例的配置文件
1)3306实例
[root@mysql-1 ~]# vim /etc/my3306.cnf[mysqld]basedir=/usr/local/mysqldatadir=/data/mysql3306socket=/data/mysql3306/mysql.sockport=3306log-error=/data/mysql3306/mysql.loglog_bin=/data/mysql3306/mysql-binbinlog_format=rowskip-name-resolveserver-id=6gtid-mode=onenforce-gtid-consistency=truelog-slave-updates=1
2)3307实例
# vim /etc/my3307.cnf [mysqld]basedir=/usr/local/mysqldatadir=/data/mysql3307socket=/data/mysql3307/mysql.sockport=3307log-error=/data/mysql3307/mysql.loglog_bin=/data/mysql3307/mysql-binbinlog_format=rowskip-name-resolveserver-id=7gtid-mode=onenforce-gtid-consistency=truelog-slave-updates=1
3)3308实例
# vim /etc/my3308.cnf [mysqld]basedir=/usr/local/mysqldatadir=/data/mysql3308socket=/data/mysql3308/mysql.sockport=3308log-error=/data/mysql3308/mysql.loglog_bin=/data/mysql3308/mysql-binbinlog_format=rowskip-name-resolveserver-id=8gtid-mode=onenforce-gtid-consistency=truelog-slave-updates=1
4)3309实例
# vim /etc/my3309.cnf [mysqld]basedir=/usr/local/mysqldatadir=/data/mysql3309socket=/data/mysql3309/mysql.sockport=3309log-error=/data/mysql3309/mysql.loglog_bin=/data/mysql3309/mysql-binbinlog_format=rowskip-name-resolveserver-id=9gtid-mode=onenforce-gtid-consistency=truelog-slave-updates=1
注意第二个服务器配置的时候要修改server-id,一个集群内的server-id是不允许冲突的。
2.4.准备每个实例的启动脚本
1)3306实例
# vim /etc/systemd/system/mysqld3306.service[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3306.cnfLimitNOFILE = 5000
2)3307实例
# vim /etc/systemd/system/mysqld3307.service[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnfLimitNOFILE = 5000
3)3308实例
# cat /etc/systemd/system/mysqld3308.service [Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3308.cnfLimitNOFILE = 5000
4)3309实例
# vim /etc/systemd/system/mysqld3309.service [Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3309.cnfLimitNOFILE = 5000
2.6启动每台机器的MySQL多实例
systemctl start mysqld3306 mysqld3307 mysqld3308 mysqld3309systemctl enable mysqld3306 mysqld3307 mysqld3308 mysqld3309systemctl status mysqld3306 mysqld3307 mysqld3308 mysqld3309
2.7.为每个MySQL实例设置密码
mysqladmin -uroot -P3306 password '123456' -S /data/mysql3306/mysql.sock mysqladmin -uroot -P3307 password '123456' -S /data/mysql3307/mysql.sock mysqladmin -uroot -P3308 password '123456' -S /data/mysql3308/mysql.sockmysqladmin -uroot -P3309 password '123456' -S /data/mysql3309/mysql.sock
2.8.查看每个MySQL实例的server-id
#第一台服务器上的四个实例[root@mysql-1 ~]# mysql -uroot -P3306 -p123456 -S /data/mysql3306/mysql.sock -e "select @@server_id;"+-------------+| @@server_id |+-------------+| 6 |+-------------+[root@mysql-1 ~]# mysql -uroot -P3307 -p123456 -S /data/mysql3307/mysql.sock -e "select @@server_id;"+-------------+| @@server_id |+-------------+| 7 |+-------------+[root@mysql-1 ~]# mysql -uroot -P3308 -p123456 -S /data/mysql3308/mysql.sock -e "select @@server_id;"+-------------+| @@server_id |+-------------+| 8 |+-------------+[root@mysql-1 ~]# mysql -uroot -P3309 -p123456 -S /data/mysql3309/mysql.sock -e "select @@server_id;"+-------------+| @@server_id |+-------------+| 9 |+-------------+#第二台服务器上的四个实例[root@mysql-2 ~]# mysql -uroot -P3306 -p123456 -S /data/mysql3306/mysql.sock -e "select @@server_id"+-------------+| @@server_id |+-------------+| 16 |+-------------+[root@mysql-2 ~]# mysql -uroot -P3306 -p123456 -S /data/mysql3306/mysql.sock -e "select @@server_id;"+-------------+| @@server_id |+-------------+| 16 |+-------------+[root@mysql-2 ~]# mysql -uroot -P3307 -p123456 -S /data/mysql3307/mysql.sock -e "select @@server_id;"+-------------+| @@server_id |+-------------+| 17 |+-------------+[root@mysql-2 ~]# mysql -uroot -P3308 -p123456 -S /data/mysql3308/mysql.sock -e "select @@server_id;"+-------------+| @@server_id |+-------------+| 18 |+-------------+[root@mysql-2 ~]# mysql -uroot -P3309 -p123456 -S /data/mysql3309/mysql.sock -e "select @@server_id;"+-------------+| @@server_id |+-------------+| 19 |+-------------+
3.将八个MySQL实例配置成主从复制集群
3.1.复制规划
mysql-1服务器上的实例:
1)3306端口为主库,3308端口为3306端口的从库。192.168.20.11:3306 select @@server_id;+-------------+| @@server_id |+-------------+| 6 |+-------------+1 row in set (0.00 sec)mysql> select @@server_id;+-------------+| @@server_id |+-------------+| 18 |+-------------+1 row in set (0.00 sec)
上一篇:dell服务器滑道怎么安装?
下一篇:服务器租来后怎么登录?