部署MySQL主从复制与读写分离

栏目: 数据库 · Mysql · 发布时间: 7年前

内容简介:1.一台CentOS 7作为客户端测试,对应的地址为:192.168.80.1202.一台CentOS 7作为Amoeba前端代理服务器,对应的地址为:192.168.80.1103.一台CentOS 7作为mysql主服务器,对应的地址为:192.168.80.100

一、实验坏境

1.一台CentOS 7作为客户端测试,对应的地址为:192.168.80.120

2.一台CentOS 7作为Amoeba前端代理服务器,对应的地址为:192.168.80.110

3.一台CentOS 7作为 mysql 主服务器,对应的地址为:192.168.80.100

4.两台CentOS 7分别作为mysql从服务器,对应的地址分别为:192.168.80.140,192.168.80.150

5.所有的虚拟机都绑定同一块虚拟网卡vnet1:192.168.80.10

二、主从复制和读写分离的原理

1、主从复制的原理

MySQL的主从复制和读写分离两者有着紧密的联系,首先要部署主从复制,只有主从复制完成了才能在此基础上进行数据的读写分离。

MySQL支持的复制类型有:基于语句的复制、基于行的复制、混合类型的复制。

复制的工作过程如下:

部署MySQL主从复制与读写分离

2、读写分离的原理

简单来说,读写分离就是只在主服务器上写,只在从服务器上读。基本原理是让主数据库处理事务性查询,而从服务器处理select查询。数据库复制被用来把事务性查询导致的变更同步到从数据库中。

基于中间代理层实现:代理一般位于客户端和服务器之间,代理服务器接到客户段的请求通过判断后转发到后端数据库。

读写分离的过程如下:

部署MySQL主从复制与读写分离

三、搭建MySQL主从复制

将三台CentOS 7分别用源码编译安装MySQL数据库具体操作: http://blog.51cto.com/13871362/2328667

1、配置主服务器

1)建立时间同步环境

yum install ntp -y      //安装ntp时间同步服务器

vi /etc/ntp.conf    //编辑配置文件

17行添加

restrict 192.168.80.0 mask 255.255.255.0 nomodify notrap        //限定同步的网段
server 127.127.1.0
fudge 127.127.1.0 stratum 8     //设置时间服务器的层级为8级,顶级是0

部署MySQL主从复制与读写分离 systemctl start ntp //开启服服务

2)配置主MySQL

vi /etc/my.cnf      //编辑数据库配置文件
在 [mysqld]模块下面添加以下几行
server_id = 11      //主服务器编号
log_bin=master_bin  //指定二进制日志
log_slave_updates=true      //允许从服务器更新

部署MySQL主从复制与读写分离 systemctl restart mysqld //重启服务

3)进入数据库授权

mysql -u root -pabc123      //进入数据库

GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.80.%' IDENTIFIED BY 'abc123'; //为所有从服务器授权所有数据库
FLUSH PRIVILEGES;       //刷新权限
show master status; //要记下 Position 列的值 (我的是603)

部署MySQL主从复制与读写分离

2、配置从服务器(两台从步骤一样,区别server-id不同)

1)配置从MySQL

vi /etc/my.cnf      //编辑数据库配置文件
在 [mysqld]模块下面添加以下几行
server_id = 22      //从服务器编号
relay_log=relay-log-bin //指定从服务器的中继日志
relay_log_index=slave-relay-bin.index   //定义中级日志的位置和名称

部署MySQL主从复制与读写分离 systemctl restart mysqld //重启服务

2)在从服务器上进行时间同步

yum install ntpdate -y  //安装时间同步工具
ntpdate 192.168.80.100      //与主服务器时间同步

部署MySQL主从复制与读写分离

echo '*/30 * * * * /usr/sbin/ntpdate 192.168.80.183' >> /var/spool/cron/root
crontab -l      //创建计划任务每隔三十秒同步一次

3)进入从数据库授权

mysql -uroot -pabc123   //进入数据库

change master to master_host='192.168.80.100',master_user='mysyslave',master_password='abc123',master_log_file='master_bin.000001'',master_log_pos=603;     //指定主服务器

start slave;    //开启从服务器
show slave status \G

部署MySQL主从复制与读写分离

3、验证主从复制

进入主服务器数据库

mysql -u root -p123456
create database test;   //建库测试

在两台从服务器上验证

show databases;
部署MySQL主从复制与读写分离

四、搭建MySQL读写分离

1、配置前端代理服务器

1) 安装JDK环境(amoeba基于jdk开发的)

tar xf jdk-8u144-linux-x64.tar.gz   //解压jdk安装包
cp -rv jdk1.8.0_144/ /usr/local/java

vi /etc/profile

添加 Java 环境

export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib

source /etc/profile     //刷新环境
java -version   //验证jdk环境

2)安装Amoeba

unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/ //解压软件包

mv /usr/local/amoeba-mysql-3.0.5-RC/ /usr/local/amoeba      //更改软件位置
chmod -R 755 /usr/local/amoeba/     //提权

vi /usr/local/amoeba/jvm.properties //编辑jvm配置文件优化
32行下注释新增:#JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m"
JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k"

3)制作amoeba启动脚本

vi /etc/init.d/amoeba
#!/bin/bash
#chkconfig: 35 62 62
#
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
NAME=Amoeba
AMOEBA_BIN=/usr/local/amoeba/bin/launcher
SHUTDOWN_BIN=/usr/local/amoeba/bin/shutdown
PIDFILE=/usr/local/amoeba/Amoeba-MySQL.pid
SCRIPTNAME=/etc/init.d/amoeba

case "$1" in
start)
echo -n "Starting $NAME... "
$AMOEBA_BIN
echo " done"
;;
stop)
echo -n "Stoping $NAME... "
$SHUTDOWN_BIN
echo " done"
;;
restart)
$SHUTDOWN_BIN
sleep 1
$AMOEBA_BIN
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}"
exit 1
;;
esac

chmod +x /etc/init.d/amoeba     //将amoeba启动脚本提权
chkconfig --add amoeba      //加入系统配置中

service amoeba start    //出现下面的端口说明启动成功,直接ctrl+C退出

部署MySQL主从复制与读写分离 netstat -anpt | grep 8066 //默认监听在8066端口
部署MySQL主从复制与读写分离

4)与客户端对接

vi /usr/local/amoeba/conf/amoeba.xml

28-30行

部署MySQL主从复制与读写分离

83行

部署MySQL主从复制与读写分离

5)与后端服务器对接

vi /usr/local/amoeba/conf/dbServers.xml

26-29行

部署MySQL主从复制与读写分离

43-56行

部署MySQL主从复制与读写分离

65-73行

部署MySQL主从复制与读写分离

service restart amoeba //服务重启

6)在三台mysql数据库中(一主两从)为amoeba授权

GRANT ALL  ON *.* TO test@'192.168.80.%' IDENTIFIED BY '123.com';   //为代理授权链接
FLUSH PRIVILEGES;       //刷新权限

2、配置客户端

yum install -y mysql        // 安装mysql客户端
mysql -u amoeba -p123456 -h 192.168.80.110 -P8066       //用代理地址登录数据库

3、测试读写分离

1) 在MASTER上新建的数据库或者里面的表,两台从服务器会同步

use test;
create table zhang (id int(10),name varchar(10),address varchar(20));
show tables; //三台数据库服务器上查看会是相同结果

部署MySQL主从复制与读写分离

2)在两台从服务器上停止从服务后

stop slave;

在主主服务器插入内容

use test
insert into zhang values('1','hahahha','this_is_master');

在从服务器1上出入内容

use test;
insert into zhang values('2','zhang','this_is_slave1');

在从服务器2上出入内容

use test;
insert into zhang values('3','zhang','this_is_slave2');

3)在客户端上面测试从服务器只读数据

Select * from test.zhang;
部署MySQL主从复制与读写分离

4)在客户端上面测试主服务器只写数据

insert into zhang values('4','zhang','write_test');

在客户端查看

select * from zhang;
部署MySQL主从复制与读写分离

在主服务器查看

部署MySQL主从复制与读写分离

在从服务1上查看

部署MySQL主从复制与读写分离

在从服务器2上查看

部署MySQL主从复制与读写分离

4、结论

以上实验在主从同步的基础上验证了MySQLd的读写分离,而Amoeba充当代理服务器,负责将客户的请求进行转发,分配到相应的服务器,也验证的原理。


以上所述就是小编给大家介绍的《部署MySQL主从复制与读写分离》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Dream Machine

The Dream Machine

M. Mitchell Waldrop / Penguin Books / 2002-8 / USD 16.00

While most people may not be familiar with the name J. C. R. Licklider, he was the guiding spirit behind the greatest revolution of the modern era. At a time when most computers were big, ponderous ma......一起来看看 《The Dream Machine》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具