实验环境
3台CentOS7
mysql主服务器:192.168.14.128
mysql从服务器:192.168.14.129
amoeba:192.168.14.132
一、回顾
回顾主从复制:将主服务器上的操作复制到从服务器上,实现从服务器和主服务器的数据同步
- 一般情况下都在主服务器上去修改数据,从服务器上一般不会去做修改操作,从服务器就会比较空闲
- 将一部分其他的工作分摊给从服务器,读操作分摊给从服务器
二、配置步骤
1、完成MySQL的主从配置
2、需要有一台新的Linux来部署amoeba
-
先关闭防火墙或者防火墙允许8066端口
systemctl stop firewalld #或者 firewall-cmd --zone=public --add-port=tcp/8066
##关防火墙
-
部署jdk,使用的是jdk1.6_14的版本
chmod +x jdk-6u14-linux-x64.bin ./jdk-6u14-linux-x64.bin mv jdk1.6.0_14/ /usr/local/jdk1.6
##添加可执行权限后执行、扔进local目录并改名
##jdk主页有免费包 -
安装amoeba,使用的是2.2.0版本
mkdir amoeba2 tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C amoeba2/ mv amoeba2/ /usr/local/amoeba
##创建个目录、解压至目录、再扔到local目录并改名
##amoeba2主页有免费包、记得收藏加关注啊!
3、配置环境变量
##在最下方添加5条全局变量
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
##:wq保存后source加载一下
source /etc/profile
##检查jdk是否有安装成功,回显下面内容
java -version
##确定amoeba是否有安装成功/直接执行此文件
/usr/local/amoeba/bin/amoeba
4、在主MySQL服务器上进行授权用户
#在主服务器上登录MySQL,授权用户给amoeba服务器使用
mysql> grant all on *.* to 'amoebatest'@'192.168.14.132' identified by 'Woniuxy@1314';
#刷新一下
flush privileges;
#exit 退出来在
systemctl restart mysqld //重启一下数据库
5、修改amoeba主配置文件
##/!!!修改所有配置文件的时候,注意有注释的地方要取消注释,因为修改了配置文件目的是为了执行起来,注释不取消,无法运行修改啥都白修改
vim /usr/local/amoeba/conf/amoeba.xml
<property name="port">8066</property> #第11行,amoeba服务器的默认监听端口,客户端在访问时需要使用此端口
<property name="user">amoeba</property> #第30行,客户端访问amoeba服务器所使用的用户名
<property name="password">123456</property> #第32行,客户端访问amoeba服务器所使用的密码
<property name="defaultPool">master</property> #第115行,对数据库的默认操作,指定为主服务器
<property name="writePool">master</property> #第118行,对数据库的写操作,指定为主服务器
<property name="readPool">slaves</property> #第119行,对数据库的读操作,指定为从服务器,这里是一个集群名称
##修改每条配置文件的时候注意当前条是否被注释 通常长这样 “<–! -->” 被包裹
6、修改amoeba的后端MySQL数据库服务器配置文件
vim /usr/local/amoeba/conf/dbServers.xml
<property name="port">3306</property> #第20行,表示amoeba去连接数据库的端口号
<property name="schema">woniuxy</property> #第23行,表示客户机连接进去后的默认数据库
<property name="user">amoebatest</property> #第26行,前面在主MySQL上授权的用户名
<property name="password">Woniuxy@1314</property> #第29行,前面在主MySQL上授权的用户名密码
<dbServer name="master" parent="abstractServer"> #第45行,amoeba主配置文件中指定的写操作MySQL服务器名称
<property name="ipAddress">192.168.14.128</property> #第48行,写操作MySQL服务器的IP地址
<dbServer name="slave1" parent="abstractServer"> #第52行,amoeba主配置文件中指定的读操作MySQL服务器名称
<property name="ipAddress">192.168.14.129</property> #第55行,读操作MySQL服务器的IP地址
<dbServer name="slaves" virtual="true"> #第59行,读操作的集群名称,和主配置文件中的名称一致
<property name="poolNames">slave1</property> #第65行,集群中的服务器数量,如果有多台,使用逗号分隔
##修改的时候注意前后的注释包裹、记得取消
7、启动amoeba服务器
/usr/local/amoeba/bin/amoeba start
#检测是否启动成功、也可以amoeba start&后台自执行
netstat -anpt
#查看进程,是否有java的进程,如果有表示启动成功
8、验证,需要有一台客户端机器,在客户端上安装MySQL客户端程序
yum -y install mysql
mysql -uamoeba -p123456 -h192.168.88.143 -P8066
#amoeba amoeba服务器的用户
#192.168.14.132 amoeba服务器的IP
#8066 amoeba服务器的监听端口
#连接上后进行读写操作
#如果想要看出明显的效果,需要结合wireshark进行抓包分析查看
#写操作(客户机→amoeba→MySQL主服务器)
#读操作(客户机→amoeba→MySQL从服务器)
9、完成
喜欢博主记得点赞关注+收藏哦
总结
读写分离就是只在主服务器上写,只在从服务器上读,基本的原理是让主数据库处理事务性查询,而从数据库处理 select 查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库