MySQL集群主从部署+mycat读写分离详细过程

MySQL集群主从部署+mycat读写分离

一、集群的目的

1、负载均衡:解决高并发

2、高可用HA:服务可用性

3、远程灾备:数据有效性
在这里插入图片描述

二、原理

1、在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。

2、备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。

3、备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。
在这里插入图片描述在这里插入图片描述

三、准备环境

1、全新服务器-互相通信

2、全新安装mysql57-分别安装(四台服务器)

3、配置域名解析

注意:请重新安装多台数据库,不要克隆已经安装的数据。因为数据库的ID相同。

安装MySQL

关闭防火墙(四台服务器)

[root@localhost ~]# systemctl stop  firewalld
[root@localhost ~]# systemctl disable  firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim    /etc/selinux/config
                    SELINUX=disabled

下载软件包

可以访问国内MySQL镜像站:中国科学技术大学开源软件镜像http://mirrors.ustc.edu.cn/

[root@localhost ~]# wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.7/mysql-community-server-5.7.25-1.el7.x86_64.rpm
[root@localhost ~]#wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.7/mysql-community-client-5.7.25-1.el7.x86_64.rpm
[root@localhost ~]# wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.7/mysql-community-common-5.7.25-1.el7.x86_64.rpm
[root@localhost ~]# wget http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.7/mysql-community-libs-5.7.25-1.el7.x86_64.rpm

在这里插入图片描述

安装相关软件(三个相关软件)

[root@localhost ~]# yum  install  -y   net-tools.x86_64    libaio.x86_64    perl.x86_64

安装Mysql服务器(四台服务器)

[root@localhost ~]# yum install -y mysql-community*   
注意:如有报错卸载冲突的软件包重新安装
[root@localhost ~]# yum remove -y mariadb-libs.x86_64  //卸载冲突软件包
[root@localhost ~]# yum install -y mysql-community*   //重新安装MySQL

启动Mysql服务器

[root@localhost ~]#systemctl start mysqld
[root@localhost ~]#systemctl enable mysqld
[root@localhost ~]#systemctl status mysqld

查询Mysql服务器默认密码

[root@localhost ~]# grep 'password' /var/log/mysqld.log 
注意:没有查到密码的原因,是因为没有启动成功。

在这里插入图片描述
修改Mysql服务器密码

[root@localhost ~]# mysqladmin   -uroot    -p'es,W;ya(K1Th'    password    'Yang@123'

登录Mysql系统

[root@localhost ~]# mysql      -uroot         -p'Yang@123'

查到默认数据库实验完成
在这里插入图片描述
关机快照(四台服务器同理操作)

四、修改服务器主机名和域名解析

修改主机名(四台服务器)

[root@localhost ~]# hostnamectl set-hostname master1
[root@localhost ~]# hostnamectl set-hostname master2
[root@localhost ~]# hostnamectl set-hostname slave1
[root@localhost ~]# hostnamectl set-hostname slave2

域名解析

[root@master1 ~]#  vim /etc/hosts
192.168.68.128 master1
192.168.68.129 master2
192.168.68.130 slave1
192.168.68.131 slave2
192.168.68.138 mycat

五、一主一从(m-s)部署(主master1,从master2)

1、主服务器master1

开启二进制日志服务器ID,GTID

[root@master1 ~]# vim /etc/my.cnf
log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
[root@master1 ~]# systemctl restart mysqld

创建复制用户授权复制用户rep(略)

mysql> grant replication slave, replication
 client on *.* to 'rep'@'192.168.68.%'      identified by 'Yang@123';

备份master数据库的数据

[root@master1 ~]# mysqldump -p'Yang@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql
[root@master1 ~]# scp -r 2021-7-3-mysql-all.sql master2:/tmp  //发送给另一台主机

模拟数据变化,插入数据

mysql> insert into master1db.master1tab values (6666666666);
2、从服务器master2

测试rep用户是否可用

[root@master2 ~]# mysql -h master1 -urep -p'QianFeng@123'
注意:预防账户问题,注意防火墙应该关闭

启动二进制日志,服务器ID,GTID

[root@master2 ~]# vim /etc/my.cnf
log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
[root@master2 ~]# systemctl restart mysqld

还恢复手动同步数据

mysql> set sql_log_bin=0;
mysql> source /tmp/2020-1-1-mysql-full.sql
mysql> select * from master1db.master1tab;

设置主服务器

mysql> change master to
master_host='master1',
master_user='rep',
master_password='Yang@123',
master_auto_position=1;
----------------------------------------------------------------------
mysql> start slave;
mysql> show slave status\G;   //查看启动状态(IO-YES/SQL-YES)
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master1
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: localhost-bin.000003
          Read_Master_Log_Pos: 154
               Relay_Log_File: localhost-relay-bin.000003
                Relay_Log_Pos: 375
        Relay_Master_Log_File: localhost-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
 返回主服务器(master1)更新数据,在从服务器(master2)观察是否同步。

六、双主双从

1、双主(master1,master2)

前面的实验,主服务器单节点设置。假如主服务器故障会影响全局的写入事,故设置双主。

目前:已经设置master1为master2的主服务器,只需设置master2为master1的主服务器。

设置master2为master1的主服务器

在master2 上进行授权

mysql> grant replication slave, replication  client on *.* to 'rep'@'192.168.68.%'  identified by 'Yang@123';
mysql> flush privileges;

master1:

mysql> change master to
master_host='master2',
master_user='rep',
master_password='Yang@123',
master_auto_position=1;
start slave;

show slave status\G;     //如果状态不佳,重启一下master2的mysqld,再去master2上。启动和停止从属状态。start slave;stop slave;

测试

master1上插入数据,在master2上观察

master2上插入数据,在master1上观察(双方同步成功,双主设置完成。)

2、双从(slave1,slave2)

同步现有数据库

[root@master1 ~]# mysqldump -p'Yang@123' --all-databases --single-transaction --master-data=2  --flush-logs > `date +%F`-mysql-all.sql
[root@master1 ~]# scp -r 2021-7-3-mysql-all.sql slave1:/tmp
[root@master1 ~]# scp -r 2021-7-3-mysql-all.sql slave2:/tmp
[root@slave1 ~]# mysql -p'Yang@123' < /tmp/2021-7-3-mysql-all.sql
[root@slave2 ~]# mysql -p'Yang@123' < /tmp/2021-7-3-mysql-all.sql

启动从服务器ID,gtid

[root@slave1 ~]# vim /etc/my.cnf   
server-id=3
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
注释:从机把主的信息存在主信息仓库里。主信息库可以是文件也可以上表,具体由—master-info-repository参数值决定。—master-info-repository=file时 会生成master.info 和 relay-log.info2个文件,如果—master-info-repository=table,信息就会存在mysql.master_slave_info表中。
[root@slave1 ~]# systemctl restart mysqld
-------------------------------------------------------------------------
[root@slave2 ~]# vim /etc/my.cnf
server-id=4
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
[root@slave2 ~]# systemctl restart mysqld

设置主服务器

slave1:
mysql> change master to
master_host='master1',
master_user='rep',
master_password='Yang@123',
master_auto_position=1 for channel 'master1';

mysql> change master to
master_host='master2',
master_user='rep',
master_password='Yang@123',
master_auto_position=1 for channel 'master2';
mysql> start slave;
mysql> show slave status\G;

slave2:
mysql> change master to
master_host='master1',
master_user='rep',
master_password='Yang@123',
master_auto_position=1 for channel 'master1';

mysql> change master to
master_host='master2',
master_user='rep',
master_password='Yang@123',
master_auto_position=1 for channel 'master2';
mysql> start slave;
mysql> show slave status\G;

测试

master1 插入数据
master2插入数据
slave1查看
slave2查看

七、Mycat代理技术

1、代理简介:

名词

DB Proxy,数据库中间件

功能

  1. 读写分离 M-S-S M-M-S-S

  2. 负载均衡 Galera Cluster

  3. 支持数据的分片自动路由与聚合

产品

MySQL ProxyMySQL官方
Atlas奇虎360
DBProxy美团点评
Amoeba早期阿里巴巴
cober阿里巴巴
MyCat阿里巴巴

在这里插入图片描述

2、部署操作

请准备好域名解析

192.168.68.138  mycat
192.168.68.128 master1
192.168.68.129 master2
192.168.68.130 slave1
192.168.68.131 slave2

配置 Java环境
在这里插入图片描述

[root@mycat ~]# tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/   //解压
[root@mycat ~]# ln -s /usr/local/jdk1.8.0_91/ /usr/local/java     //更改名
[root@mycat ~]# vim  /etc/profile   //添加三行设置JAVA变量,便于JAVA调用
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
[root@mycat ~]# source /etc/profile  //重新读取配置文件
[root@mycat ~]# env |grep JAVA  //  查看系统中已经存在关于Java的环境变量
[root@mycat ~]# java   -version    //查询到版本。说明jdk安装成功

配置Mycat

下载mycat:
[root@mycat ~]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
[root@mycat ~]# tar xf  Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
[root@mycat ~]# ls /usr/local/mycat/    可以查看mycat的日志文件log、conf

配置mycat前端

[root@mycat ~]# vim  /usr/local/mycat/conf/server.xml  //修改配置文件如下图

在这里插入图片描述
启动mycat管理员
在这里插入图片描述
配置mycat后端

[root@mycat ~]# vim  /usr/local/mycat/conf/schema.xml  
注意:配置前先备份一下此文件防止配置文件出错

在这里插入图片描述

注释:
schema name:mycat维护的集群名称。
datanode:后方节点群的名称。
datahost:后方节点群的主机名称。
writehost:写主机
readhost:读主机
倒着看。
---------------------------------------------------------------------------
在本例中switchType值设置为1,表示自动切换,某些对主从数据一致要求较高的场景,建议使用2判断主从状态后再切换
切换的触发条件为主节点mysql服务崩溃或停止
slaveThreshold 主从的延迟在多少秒以内,则把读请求分发到这个从节点,否则不往这个节点分发,假设生产环境能容忍的主从延时为60秒,则设置此值为60,此例中设置值为100

关于属性的介绍:
balance 类型:1. balance=“0”,  关闭读写分离功能。
				所有读操作都发送到当前可用的writeHost上。
			 2. balance=“1”,开启读写分离
			    所有读操作都随机的发送到readHost。
writeType 属性:
          备份型:1. writeType="0", 所有写操作发送到配置的第一个 writeHost,
                   第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,                    切换记录在配置文件中:dnindex.properties 
          负载型 :2. writeType="1",所有写操作都随机的发送到配置的 writeHost。
switchType 模式:
          switchType指的是切换的模式,目前的取值也有4种:
          1. switchType='-1' 负1表示不自动切换
          2. switchType='1' 默认值,表示根据延时自动切换
          3. switchType='2' 根据MySQL主从同步的状态决定是否切换,心跳语句为 show                slave status

配置mysql群

M-M-S-S 准备Mycat连接的用户及权限

例如master1:
mysql> grant all on *.* to 'mycatproxy'@'192.168.168.138' identified by 'Yang@123';
注意:192.168.68.138是mycat服务器的IP
3、启动Mycat
[root@mycat ~]# /usr/local/mycat/bin/mycat start
[root@mycat ~]# netstat  -anpt | grep java     //监测端口是否启动8066
[root@mycat ~]# ps aux | grep mycat    //检测进程是否启动
[root@mycat ~]# yum install -y mariadb   //安装客户端
[root@mycat ~]# mysql -hmycat -uroot -p123456 -P8066  //看到的数据库是虚拟的。
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| tianyun  |
+----------+
1 row in set (0.01 sec)

在mysql-master1上创库创表:
mysql> create database  tianyun;
mysql> create table tianyun.t1 (id int);
4、Mycat使用后方数据库
在mycat上:
MySQL [(none)]> select * from tianyun.t1;
MySQL [(none)]> insert into tianyun.t1 values(3);
在mysql集群能 查询到数据。实验完成。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ever Since!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值