实验拓扑:
Mysql主从复制和读写分离
地址分配:
Client 192.168.1.1
Amoeba 192.168.1.2
Mysql-Master 192.168.1.3
Mysql-slave1 192.168.1.4
Mysql-slave2 192.168.1.5
1、配置时间同步
1)在Master上使用yum安装ntp,修改其配置文件/etc/ntp.conf后启动服务。为udp端口123开启iptables例外。
2)在两台slave上执行/usr/sbin/ntpdate 192.168.1.3使得时间同步与Master同步。
2、主从复制
注意:三台Mysql数据库上都需要开启tcp端口3306的iptables例外。
1)主服务器Master的配置
/etc/my.cnf的配置
Mysql主从复制和读写分离
重启mysqld服务
Mysql主从复制和读写分离
执行mysql -u root -p登录到mysql数据库,为服务器授权
Mysql主从复制和读写分离
2)从服务器slave的配置(两台从服务器配置相同)
/etc/my.cnf的配置
Mysql主从复制和读写分离
重启服务(service mysqld restart),登陆mysql配置启动slave
Mysql主从复制和读写分离
通过show slave status\G可以查看主从复制运行是否正常。主从复制依赖于SQL进程和IO进程,这两个进程状态为“yes”即表示运行正常。
Mysql主从复制和读写分离
3、读写分离
Mysql读写分离可以通过两种方式实现,基于程序代码内部实现和基于中间件实现,本次使用Amoeba就是基于中间件实现的其中一个方法。
1)Amoeba中间件服务器的配置
安装jdk
Mysql主从复制和读写分离
修改/etc/profile
Mysql主从复制和读写分离
执行source /etc/profile立即生效,java -version查看是否完成安装。
Mysql主从复制和读写分离
安装Amoeba
Mysql主从复制和读写分离
修改Amoeba配置文件/usr/local/amoeba/conf/amoeba.xml
Mysql主从复制和读写分离
Mysql主从复制和读写分离
修改Amoeba配置文件/usr/local/amoeba/conf/dbServers.xml
Mysql主从复制和读写分离
Mysql主从复制和读写分离
Mysql主从复制和读写分离
启动Amoeba,查看端口
Mysql主从复制和读写分离
所以Amoeba中间件需要开启tcp端口8066iptables例外。
2)三台Mysql都需要给Aomeba授权(三台相同操作)
Mysql主从复制和读写分离
4、客户端连接Amoeba。(正常应当在命令后加-P8066,我后来将端口修改为3306了,就不用在后面加端口号了)
Mysql主从复制和读写分离
注意:横线处输入密码为‘amoeba’的密码‘123456b’,而命令中密码为‘chen’的密码‘123456c’。
总结,最后的效果是:
1)在slave上登陆本地mysql写数据,不会同步到master;而在master上写数据,可以同步到slave。
2)关闭主从复制,在client上写数据,可以在master上看到该数据,slave上看不到(因为client写数据会直接写到master上)。
3)关闭主从复制后,在master上登陆本地的mysql写数据,client读取不到数据;相反在slave上登陆本地写数据,client可以读取到(因为client读数据是从slave上读取的)。