MYSQL 之 读写分离

一、读写分离的概述

  • 读写分离是高性能数据库集群的一种方式,其本质是将访问压力分散到集群中的多个节点,但是没有分散存储压力。
  • 业务服务器将写操作发给数据库主机,将读操作发给数据库从机通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。
    在这里插入图片描述

1.1、读写分离的基本原理

  • 数据库服务器搭建主从集群,一主一从、一主多从都可以。

  • 数据库主机负责读写操作,从机只负责读操作。

  • 数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。

二、怎么实现读写分离?

2.1、环境准备和安装包

注意:配置过程需要的安装包,需要的可以去我的百度云下载,我的 Mysql手工编译版本是 5.7。
百度云链接为:https://pan.baidu.com/s/1DZIVX46wKWoW1ak-IGkzKA
提取码:fohm

  • 读写分离是在主从复制的基础上进行配置的,所以先搭建主从复制再搭建读写分离。

  • 准备五台centos7虚拟机,其中三台搭建 Mysql服务器(一台为主服务器,其余两台为从服务器)

  • Mysql配置可参考我的之前博客,LNMP架构中Mysql的安装。博客链接为:MySQL版本5.7的安装

  • 一台虚拟机用来做 Amoeba,实现读写分离。

  • 一台做应用客户端,进行操作验证。

    扫描二维码关注公众号,回复: 8544838 查看本文章
  • 我的服务器IP地址:

主服务器master 192.168.220.136
从服务器slave1 192.168.220.164
从服务器slave2 192.168.220.159
Amoeba服务器 192.168.220.130
客户端 192.168.220.171

主从复制的具体操作我在这里就不多介绍,可以看我上篇博客,链接为:Mysql 之主从复制

在上篇博客中我用一台主服务器和一台从服务器,这里再加一台从服务器,从服务器的配置没有改变,只有server-id需要改为23,只要与之前的id不同。
在这里插入图片描述

2.2、实验操作

2.2.1、Amoeba的配置

1、关闭防火墙,挂载本地共享文件夹,把 jdk 安装包放在 /usr/local目录下

systemctl stop firewalld  
setenforce 0

//用samba共享本地文件夹
mount.cifs //192.168.10.34/share /mnt
cd /mnt/mysql/
cp jdk-6u14-linux-x64.bin /usr/local/

在这里插入图片描述
2、安装 jdk 包

//.bin是二进制文件,可直接执行
cd /usr/local/
./jdk-6u14-linux-x64.bin 
一直空格出现图中问句时,输入yes 按enter即可

在这里插入图片描述
为了方便管理,重命名 jdk。

cd /usr/local/
mv jdk1.6.0_14/ jdk1.6

在这里插入图片描述
3、修改 profile 文件,配置环境变量

vim /etc/profile
//在最后一行插入下面代码
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile   //加载生效

4、先创建一个文件,存放解压内容,解压 amoeba包。

mkdir /usr/local/amoeba

cd /mnt/mysql
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

在这里插入图片描述
给Amoeba加755权限,并验证安装是否成功。

chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba

在这里插入图片描述

2.2.2、Mysql服务器

在三台 mysql 服务器上添加权限,开放给 Amoeba 访问
登录数据库

mysql -uroot -pabc123
grant all on *.* to test@'192.168.220.%' identified by '123.com';
允许test用户通过ip为192.168.220网段,从任意终端输入123.com的密码进行访问

在这里插入图片描述

2.2.3、读写分离实现配置

回到Amoeba服务器,配置读写分离功能。

1、修改amoeba.xml文件

cd /usr/local/amoeba/conf
vim amoeba.xml
//1、修改30行和32行
30 <property name="user">amoeba</property>
32 <property name="password">123123</property>

//2、117行--去掉注释
(<!-- -->为注释符号)
<property name="defaultPool">master</ property>
<property name="writePool">master</ property>
<property name="readPool">slaves</ property>

在这里插入图片描述
在这里插入图片描述
2、修改配置文件夹下的dbServers.xml文件

vim dbServers.xml

//26-29行:去掉注释,设置登录用户名和密码
<property name="schema">mysql</property>  
<property name="user">test</property>
<property name="password">123.com</property>

在这里插入图片描述

//45行--主服务器地址
<dbServer name="master"  parent="abstractServer">
<property name="ipAddress">192.168.220.136</property>

//从服务器slave1,修改好名称和对应IP地址
<dbServer name="slave1"  parent="abstractServer">
<property name="ipAddress">192.168.220.164</property>

//从服务器slave2,修改好名称和对应IP地址。
配置文件只有两个模块,可以yy复制粘贴修改。
<dbServer name="slave2"  parent="abstractServer">
     <factoryConfig>
     <property name="ipAddress">192.168.220.159</property>
     </factoryConfig>
</dbServer>

//指定从服务器池
<dbServer name="slaves" virtual="true">
<property name="poolNames">slave1,slave2</property>

在这里插入图片描述
在这里插入图片描述
启动Amoeba监控

/usr/local/amoeba/bin/amoeba start & 

在这里插入图片描述

2.3、客户端验证

1、yum安装数据库

yum install -y mysql

2、连接 amoeba 服务器

mysql -u amoeba -p 123123 -h 192.168.220.130 -P8066

创建一个名为 test02 的库,再创建一个叫 demo01 的表

MySQL [test02]> create table demo01 (
    -> id int(4) not null primary key,      
    -> name varchar(10) not null,           
    -> score decimal(4,1) not null);        
Query OK, 0 rows affected (0.03 sec)

在这里插入图片描述
我们在主服务器上,直接进入数据库,就会发现也多了一个名为 stu01 的表
在这里插入图片描述

三、总结

  • 读写分离扩展了读操作,提高了并发吞吐量和负载能力。
  • 对数据库进行写的操作时,全部由主服务器承担,用来避免数据的不同步。
  • 进行读操作时,由从服务器slave来承担,用来分担数据库的压力。
发布了69 篇原创文章 · 获赞 32 · 访问量 3414

猜你喜欢

转载自blog.csdn.net/qq_28361541/article/details/103902017