一、读写分离的优点
1. 负载均衡:将读操作分散到多个从库上,可以有效地分担主库的读负载,提高系统的
并发处理能力。
2. 提高读性能:从库可以通过增加硬件资源或者优化查询语句等方式来提高读操作的性
能,从而提升系统的整体性能。
3. 高可用性:通过将读操作分散到多个从库上,即使主库发生故障,系统仍然可以继续
提供读服务,提高系统的可用性。
4. 数据保护:将读操作分离到从库上,可以避免误操作或者恶意操作对主库数据的影
响,提高数据的安全性。
二、amoeba简介
Amoeba是阿里巴巴集团旗下的一款分布式操作系统。它是为了满足阿里巴巴集团大规
模分布式计算和存储需求而开发的。Amoeba具有高可靠性、高性能、高可扩展性等特
点,可以支持大规模的数据处理和存储。它在阿里巴巴集团内部被广泛应用于各种业务
场景,包括电商、云计算、大数据等领域。
三、工作原理
1. 主从复制:在MySQL中,可以通过主从复制的方式将主数据库的数据同步到从数据
库上。主数据库负责处理写操作,而从数据库负责处理读操作。
2. 主数据库:主数据库是负责接收和处理所有的写操作的服务器。当有写操作发生时,
主数据库会将写操作的日志记录下来,并将这些日志传输给从数据库。
3. 从数据库:从数据库是负责处理读操作的服务器。从数据库会从主数据库接收到写操
作的日志,并将这些日志应用到自己的数据库上,保持与主数据库的数据同步。
4. 读写分离代理:为了实现读写分离,通常会在应用程序和数据库之间加入一个读写分
离代理。读写分离代理会根据请求的类型将读操作和写操作分发到不同的数据库服务器
上。
5. 读操作:当应用程序发送一个读操作的请求时,读写分离代理会将该请求转发给从数
据库进行处理。由于从数据库只负责处理读操作,因此可以专注于提供高性能的读服
务。
6. 写操作:当应用程序发送一个写操作的请求时,读写分离代理会将该请求转发给主数
据库进行处理。主数据库会将写操作的结果同步到从数据库上,以保持数据的一致性。
四、准备工作
1、五台服务器关闭防火墙
2、mariadb进行主从复制(不会的可以看我之前mha高可用集群的那篇文章)
3、五台服务器之间可以互相通联
4、五台服务器之间时间同步
五、部署mariadb读写分离
1、安装jdk(这里amoeba只支持1.5版本和1.6版本的)
我原来是1.8的现在是1.6的就需要降版本
mv jdk1.6.0_31/ /usr/local/jdk1.6 将解压后的jdk包移动到/usr/local
vim /etc/profile 进入全局配置文件
添加变量
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin
source /etc/profile 更新全局变量
rm -rf /usr/bin/java 删除原jdk
2、安装amoeba
mkdir /usr/local/amoeba 创建amoeba的目录
tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/ 赋予amoeba755权限
vim /etc/profile 进入全局配置文件添加变量
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile 更新变量
3、修改amoeba配置文件
在Master、Slave1、Slave2服务器中配置Amoeba的访问授权
grant all on *.* to 'test'@'192.168.200.%' identified by '123.com';
flush privileges; 更新权限
vim /usr/local/amoeba/conf/amoeba.xml 进入amoeba配置文件
<property name="user">amoeba</property> 指定用户
<property name="password">123456</property> 用户密码
<property name="defaultPool">master</property> 默认池
<property name="writePool">master</property> 写的池指定谁负责写
<property name="readPool">slaves</property> 读的池指定谁负责读
4、修改数据服务配置文件
vim /usr/local/amoeba/conf/dbServers.xml
<property name="port">3306</property> 指定端口(默认)
<property name="schema">test</property> 连接mysql的用户
<property name="user">test</property> 登录mysql用户
<property name="password">123.com</property> mysql授权的密码
<dbServer name="master" parent="abstractServer"> 定义主服务器
<property name="ipAddress">192.168.1.20</property> 指定主服务器IP
<dbServer name="slave1" parent="abstractServer"> 定义第一个从服务器
<property name="ipAddress">192.168.1.210</property> 指定第一个从服务器IP
<dbServer name="slave2" parent="abstractServer"> 定义第二个从服务器
<property name="ipAddress">192.168.1.211</property> 指定第二个从服务器IP
<dbServer name="slaves" virtual="true"> 定义读的池
property name="loadbalance">1</property> 开启轮询
<property name="poolNames">slave1,slave2</property>
/usr/local/amoeba/bin/amoeba start & 启动amoeba
弹出8066端口的时候按下回车键
六、测试
关掉从2的服务器(可以看到从2查询到四个表)
从1的服务器没有关闭(可以看到从1可以查到八个表)
以上就是mariadb读写分离的操作
如有错误欢迎各位大佬批评指正,我们共同进步