mysql5.5基于表锁定 读取和写入互阻塞,为了解决这个问题便有了主从复制,读写分离的群集设置。
mysql配置主从复制,读写分离(附amoeba源码包)_第1张图片
三次认证
1、主从同步认证
2、amoeba访问数据库认证
3、客户端访问amoeba认证


写入和读取:
客户端写入数据写入到的是mysql主服务器中
从服务器同步主服务器
读取是读取从服务器上的内容
从而实现读写分离


本实验使用mysql5.5
附mysql5.5源码包以及安装脚本
链接:https://pan.baidu.com/s/1kA80VX67fXOBVChUt72__g 密码:e42o

jdk文件使用的是1.6
链接:https://pan.baidu.com/s/1E80A82_1YTxG2BU5745o0w 密码:xe6g
amoeba
链接:https://pan.baidu.com/s/1S8OaSgYjj0aXcK5n5uoo3g 密码:16gh


本实验使用5台centos7
使用redhat6操作也相同
主服务器地址:192.168.60.128
从服务器1地址:192.168.60.136
从服务器2地址:192.168.60.143
amoeba代理地址:192.168.60.144
客户端地址:192.168.60.129

实验需要我们每台虚拟机都关掉防火墙,加强性组件
systemctl stop firewalld.service
setenforce 0


一、使用ntp协议,时间同步

1、主服务器
rpm -q ntp //默认是安装了
vim /etc/ntp.conf //修改ntp配置文件
在末行插入以下两条语句
server 127.127.60.0 //自身60网段
fudge 127.127.60.0 stratum 8 //时间层级
systemctl start ntpd //启动ntp服务


2、从服务器(两台配置相同)
rpm -q ntpdate //默认也是安装了
systemctl start ntpd //启动服务
/usr/sbin/ntpdate 192.168.60.128 //同步主服务器,显示以下则同步成功

mysql配置主从复制,读写分离(附amoeba源码包)

二、配置mysql
安装mysql5.5(开头有安装包和脚本,不在赘述)

1、主服务器主配置文件
vim /etc/my.cnf
server-id = 11 //服务唯一标识
log-bin=master-bin //去掉注释,开启二进制日志
log-slave-updates=true //允许从服务器同步同步主服务器
service mysql restart //重启服务


2、主服务器进mysql给从服务器创建用户授权
grant replication slave on . to 'myslave'@'192.168.60.%' identified by '123123';
flush privileges 刷新即时生效
show master status 查看主服务器状态

mysql配置主从复制,读写分离(附amoeba源码包)_第2张图片

3、从服务器配置文件设置(除server-id外,两台从服务器设置一样)
vim /etc/my.cnf
server-id 22 //修改server-id
在server-id下添加如下两行
relay-log=realy-log-bin
relay-log-index=slave-relay-bin.index
service mysqld restart

mysql配置主从复制,读写分离(附amoeba源码包)_第3张图片

4、从服务器进mysql进行操作(两台从服务器操作相同)
change master to master_host='192.168.60.128',master_user='myslave',master_password='123123',master_log_file='master-bin.000001',master_log_pos=338;
start slave; //开启从复制
show slave status\G //查看slave状态

mysql配置主从复制,读写分离(附amoeba源码包)_第4张图片
mysql配置主从复制,读写分离(附amoeba源码包)_第5张图片

5、主从复制测试

mysql配置主从复制,读写分离(附amoeba源码包)_第6张图片
mysql配置主从复制,读写分离(附amoeba源码包)_第7张图片
mysql配置主从复制,读写分离(附amoeba源码包)_第8张图片

    三、amoeba代理服务器

systemctl stop firewalld.service //关闭防火墙及加强性组件
setenforce 0

1、挂载宿主机,复制JDK文件

mysql配置主从复制,读写分离(附amoeba源码包)_第9张图片

2、./jdk-6u14-linux-x64.bin
一直回车就行了,有提示会告诉你填yes/no,填yes,开始安装

mysql配置主从复制,读写分离(附amoeba源码包)
mysql配置主从复制,读写分离(附amoeba源码包)_第10张图片

3、添加环境变量
先将jdk的文件改名,方便后面填写环境变量
mv jdk1.6.0_14/ /usr/local/jdk1.6 //改名
vim /etc/profile //末行添加JDK环境变量,如下

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

scource /etc/profile //刷新环境变量


4、安装amoeba
mkdir /usr/local/amoeba //创建amoeba解压目录
chmod 755 /usr.local/amoeba 必须要755权限
tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ //解压
/usr/local/amoeba/bin/amoeba //查看amoeba是否安装成功

mysql配置主从复制,读写分离(附amoeba源码包)

5、每台mysql服务器都给amoeba创建权限
grant all on . to 'test'@'192.168.60.%' identified by '123456';
创建了一个用户给amoeba并且赋予权限,amoeba将以这个身份登录mysql


6、修改amoeba.xml配置文件
vim /amoeba/conf/amoeba.xml

    amoeba      30行修改用户为amoeba

 456789   32行认证amoeba密码为456789

117行
master     改成master


7、修改dbServers.xml配置文件


26行
test  改成test

29行
123456  去掉注释 改成认证mysql的密码

42行
    改成master 
            
                    
                    192.168.60.128   ip改成master的ip

   第二台slave2
            
                    
                    192.168.60.143
            
    
末尾

   池子名改为slaves

slave1,slave2  池子中添加slave1,savel2

8、开启amoeba服务
/usr/local/amoeba/bin/amoeba start& 开启服务
netstat -anpt | grep java

mysql配置主从复制,读写分离(附amoeba源码包)_第11张图片
mysql配置主从复制,读写分离(附amoeba源码包)_第12张图片

四、客户端验证读写分离

1、关闭防火墙,安装mysql并登陆
systemctl stop firewall
setenforce 0
yum install mysql -y
mysql -u amoeba -p456789-h 192.168.60.144 -P8066 远程通过amoeba的ip登陆

mysql配置主从复制,读写分离(附amoeba源码包)_第13张图片


2、主服务器创建一张list表,从服务器停止slave
创建的list表会被从服务器同步,首先我们利用客户端先写入一些信息到这张表中,到主服务器中查看,如果内容在主服务器显示,说明写入是针对主服务器。
然后我们分别在从服务器list表中写入一些信息,在客户端查看,如果内容显示的是从1,从2,服务器的内容,说明读功能针对从服务器。
满足以上两条则实现读写分离。


mysql配置主从复制,读写分离(附amoeba源码包)_第14张图片

3、客户端list表插入信息,主服务器查看,证明写入是写在主服务器上

mysql配置主从复制,读写分离(附amoeba源码包)_第15张图片
mysql配置主从复制,读写分离(附amoeba源码包)_第16张图片

4、从服务器分别写入数据,客户端查看,显示数据为从服务器数据,则证明读是读从服务器数据

mysql配置主从复制,读写分离(附amoeba源码包)_第17张图片
mysql配置主从复制,读写分离(附amoeba源码包)_第18张图片
mysql配置主从复制,读写分离(附amoeba源码包)_第19张图片

主从同步,读写分离成功!