小工具知识网

当前位置: 首页 > 行业知识 > 第102讲:MySQL多实例与Mycat分布式读写分离的架构实践

行业知识

第102讲:MySQL多实例与Mycat分布式读写分离的架构实践

2026-11-04 00:50:43 来源:互联网转载

文章目录

    • 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.113306MasterMySQL
                  192.168.20.113307MasterMySQL
                  192.168.20.113308SlaveMySQL
                  192.168.20.113309SlaveMySQL
                  192.168.20.123306MasterMySQL
                  192.168.20.123307MasterMySQL
                  192.168.20.123308SlaveMySQL
                  192.168.20.123309SlaveMySQL

                  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服务器滑道怎么安装?

下一篇:服务器租来后怎么登录?