大四项目实训,老师要求我们学习mysql的集群和mysql的读写分离。mysql集群已经搞定,也是基于windows下的,实验室机器都是windows的。mysql集群已经学会如何配置,但是感觉意义并没有那么大,毕竟在实际生产中基本都是使用mysql的读写分离。下面,分享一下我配置mysql读写分离的过程。
mysql读写分离是mysql自带的功能,只要配置好了从库和主库,就能实现读写分离,关键是在于需要代理分发请求到mysql的从库和主库上才能实现数据库的负载均衡。
本次配置使用的是虚拟机,和本机,相当于四台电脑。
准备如下:
oracle vm : win7-1(主) win7-2(从库) win7-3(从库)
主库: 172.18.0.48
从库1: 172.18.0.60
从库2: 172.18.0.62
amoeba: 172.18.0.202(本机)
系统:win7 32位
mysql版本:mysql-5.5.28-win32.msi
amoeba版本:amoeba-mysql-1.2.0-GA.zip
一、配置主库
1.配置主库:172.18.0.48
1.1在my.ini文件最后添下表信息:mysql安装目录
#数据库ID号, 一般为1时表示为Master,从库id大于主库
server-id = 1
#启用二进制日志;
log-bin=mysql-bin
#需要同步的二进制数据库名;
binlog-do-db=shop
binlog-do-db=test
#不同步的二进制数据库名,如果不设置可以将其注释掉;
binlog-ignore-db=information_schema
#设定生成的log文件名;
log=C:\program\mysql\log\mysql.log
#把更新的记录写到二进制文件中;
log-slave-updates
1.2重启mysql服务。
cmd命令行: net stop mysql net start mysql
或者服务窗口鼠标操作
1.3 配置从库访问主库的权限
grant replication slave on *.* to repl_user@172.18.0.60 identified by '123456';
grant replication slave on *.* to repl_user@172.18.0.62 identified by '123456';
1.4查看主库信息。
登入mysql命令行,执行: showmaster status;
其中的File 和Position 在配置从库的时候要用到
2.配置从库:172.18.0.60 172.18.0.62 (两个从库配置一样)
2.1在从库mysql安装目录下的my.ini文件末尾加入一下信息:
id不可重复,比主库id大
从库:172.18.0.60
server-id = 2
# 增加 日志文件, 用于验证读写分离
log = C:\program\mysql\log\mysql.log
从库:172.18.0.62
server-id = 3
# 增加 日志文件, 用于验证读写分离
log = C:\program\mysql\log\mysql.log
2.2重启mysql服务
2.3 进入mysql命令行界面,进行相应设置,输入以下命令
命令1
stopslave;
命令2:填写主库ip
change master to
master_host='172.18.0.48',
master_user='repl_user',
master_password='123456',
master_log_file='mysql-bin.000006',
master_log_pos=2266821;
命令3:
start slave;
其中的master_log_file和master_log_pos与主库的相对应(看上图)
2.4查看从库状态
在从库执行mysql命令:show slave status\G;
下图的waiting for master to send event 代表已经连接上主库
二、 验证主从库配置是否正确
在主库执行对应数据库的写操作,从库的信息会与主库一致。本次配置同步的数据库为shop 和 test,对test数据库进行操作。
2.1 在主库test数据库插入数据
2.2.在从库查询
可以在从库查看到主库写入的信息,说明主从复制配置成功
三、配置amoeba
原理:所有mysql写入读取语句由amoeba负责代理转发到相应的主库从库,实现数据库负载均衡
amoeba官方提供的图:
3.1设置amoeba所在ip访问主从库的权限(主从都要设置)
设置跟给主给从库权限设置类似,不过权限为all,允许amoeba的所有操作
3.2将压缩包解压出来,配置conf目录下的amoeba.xml文件
有参考其他博文,配置上基本有dbServer.xml,但是官方下载的amoeba压缩包没有这个文件,需要手动创建,amoeba.xml引入这个配置。
本次配置跟其他不同,dbServer.xml 没有独立出来,直接配置在amoeba.xml上
8066
172.18.0.202
20
30
30
128
true
root
546626
com.meidusa.amoeba.net.AuthingableConnectionManager
defaultManager
3306
172.18.0.48
shop
amoeba
546626
200
200
10
600000
600000
true
true
defaultManager
3306
172.18.0.60
shop
amoeba
546626
200
200
10
600000
600000
true
true
defaultManager
3306
172.18.0.62
shop
amoeba
546626
200
200
10
600000
600000
true
true
1
slave1,slave2
${amoeba.home}/conf/rule.xml
${amoeba.home}/conf/functionMap.xml
${amoeba.home}/conf/ruleFunctionMap.xml
1500
master
master
multiPool
true
关于dbServer的配置可以看这个链接,里面有详细说明各节点配置的含义http://docs.hexnova.com/amoeba/rw-splitting.html#example.rw.dbServer.virtualSlave
3.3启动amoeba
双击amoeba安装目录bin文件夹下的amoeba.bat即可。启动会窗口不会关闭,否则出错
四、测试amoeba配置是否成功
1.把本次实训用到的shop数据库导入,相应配置文件改为如下:
amoeba端口为8066,其中的用户名和密码在amoeba配置文件中配置
2.运行tomcat,执行相应查询操作
模仿京东的界面。。。。。,数据是队友爬下来的
数据查询没有问题,配置成功。可以在从库的日志文件里查看查询日志
更简单的测试方法是用navicat直接连接amoeba,填上端口和用户名密码即可看到数据库