MySQL ---- 读写分离
一:原理
-
读写分离就是只在主服务器上写,只在从服务器上读
-
主数据库处理事务性查询,而 从数据库处理select查询
-
数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库
二:Amoeba的定义
- Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。
- Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。需要结合使用MySQL的 Replication等机制来实现副本同步等功能。
安装包自行下载 :
复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1kRkbem91iPxeQ-bZUObTxg 提取码:bg88
三:实验配置
1、环境说明
-
准备三台Mysql服务器 (一台主服务器 ,一台从服务器)
-
一台Amoeba ,用来实现读写分离
-
一台客户机作为验证
Mysql 主从复制与读写功能是密切相关的,通过主从复制来实现数据同步,再通过读写分离来提升数据库的并发负载能力。
2、实验步骤
- 配置Amoeba 服务器
[root@localhost ~]# hostnamectl set-hostname amoeba
[root@localhost ~]# su '修改主机名'
[root@amoeba ~]# systemctl stop firewalld.service
[root@amoeba ~]# setenforce 0 ‘关闭防火墙’
[root@amoeba ~]# mkdir /abc
[root@amoeba ~]# mount.cifs //192.168.10.24/share /abc ‘挂载软件包’
- 安装管理jdk
[root@amoeba abc]# cp jdk-6u14-linux-x64.bin /usr/local/ ‘复制jdk-6u...到/usr/local下’
[root@amoeba abc]# cd /usr/local/ ‘查看是否复制到’
[root@amoeba local]# ./jdk-6u14-linux-x64.bin ‘执行jdk’
yes 输入之后,等待片刻,安装完成就可以了。
- 为了便于管理,将jdk包名重新命名
[root@amoeba local]# mv jdk1.6.0_14/ /usr/local/jdk1.6
- 修改profile 文件
[root@amoeba local]# 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
- 使环境变量生效
[root@amoeba local]# source /etc/profile
- 创建amoeba 目录
[root@amoeba local]# mkdir /usr/local/amoeba
- 解压amoeba 软件包
[root@amoeba abc]# tar zvxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
- 给权限, 验证是否安装成功
[root@amoeba abc]# chmod -R 755 /usr/local/amoeba/
[root@amoeba abc]# /usr/local/amoeba/bin/amoeba
amoeba start|stop ‘表示安装成功’
- 在三台装有mysql 服务器上添加权限,允许amoeba访问
mysql> grant all on *.* to test@'192.168.34.%' identified by '123';
- 在amoeba服务器上配置读写分离功能
[root@amoeba abc]# cd /usr/local/amoeba/conf
[root@amoeba conf]# vim amoeba.xml
[root@amoeba conf]# vim dbServers.xml
- 启动amoeba ,将进程放到后台,时间较长 需等待
[root@amoeba conf]# /usr/local/amoeba/bin/amoeba start &
四:在客户端(client)测试
1、修改主机名 ,关闭防火墙
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname client
[root@localhost ~]# su
2、直接安装mysql服务
[root@client ~]# yum install mysql -y
3、连接amoeba服务器
[root@client ~]# mysql -u amoeba -p123 -h 192.168.34.182 -P8066
4、在主、从服务器上查看,可以看到info 表
5、关闭两台从服务器,查看状态,是两个 NO
6、关闭服务之后,在客户机的info表中插入一条信息,可以在主服务器中查看到
7、在从服务器和客户端查看不到表信息, 从而实现了读写分离
8、在两台从服务中各添加一条数据
9、在客户端查看info 表内容,挨个读取表中信息
在客户端连接数据库后写入的数据只有主服务器记录,从服务器并不会记录。开启主从同步(复制)的情况下,从服务器会向主服务器同步。 (由于做了主从同步,每台从服务器的数据和主服务器是一样的)。在高并发请求时,实现了负载均衡,保证数据的安全性,服务器的高效运行。
来源:CSDN
作者:Sunny~~~
链接:https://blog.csdn.net/XuMin6/article/details/103963204