内容要点:
mysql
1、Mysql 读写分离原理linux
2、关于 Amoebasql
3、配置实例数据库
第一步:配置 Amoeba 服务器vim
第二步:在三台 mysql 服务器上添加权限,开放给 amoeba 访问(即三台mysql容许amoeba对它们进行访问)安全
第三步:在 amoeba 服务器上配置读写分离功能bash
第四步:客户端测试服务器
4、总结并发
1、Mysql 读写分离原理负载均衡
读写分离就是只在主服务器上写,只在从服务上读;
主数据库处理事务性查询,从数据库处理 select 查询;
数据库复制被用来把事务性查询致使的变动同步到集群中的从数据库
2、关于 Amoeba
(1)Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此能够实现负载均衡、读写分离、高可用性等需求。
(2)Amoeba至关于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是彻底实现它们。须要结合使用MySQL的 Replication等机制来实现副本同步等功能。
3、配置实例
环境说明:
准备三台 Mysql服务器(一台为主服务器,其他两台为从服务器);
一台 Amoeba,用来实现读写分离,写的操做交给主服务器,读的操做发给两台从服务器;
实验验证:在客户机上执行写的操做,在主、从服务器上验证。
说明:Mysql 主从复制与读写功能是密切相关的,经过主从复制来实现数据同步,再经过读写分离来提高数据库的并发负载能力。
应用客户端 | 192.168.220.131 |
Amoeba | 192.168.220.129 |
主服务器 | 192.168.220.141 |
从服务器 1 | 192.168.220.140 |
从服务器 2 | 192.168.220.136 |
第一步:配置 Amoeba 服务器
(1)关闭防火墙:
systemctl stop firewalld.service setenforce 0
(2)安装管理 jdk:
一、安装 jdk
cp jdk-6u14-linux-x64.bin /usr/local/ //复制 ./jdk-6u14-linux-x64.bin //安装jdk ,注意这一步,一路按回车到最后,提示输入yes,等待安装
二、方便管理,将jdk包从新命名:
mv jdk1.6.0_14/ /usr/local/jdk1.6
三、修改 profile 文件
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
使环境变量生效:
source /etc/profile
(3)解压 amoeba包:
一、先建立一个文件
mkdir /usr/local/amoeba
二、解压
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
三、赋权,并验证是否安装成功
chmod -R 755 /usr/local/amoeba/
输入:/usr/local/amoeba/bin/amoeba ,按回车检查是否成功
第二步:在三台 mysql 服务器上添加权限,开放给 amoeba 访问(即三台mysql容许amoeba对它们进行访问)
进入数据库,输入如下命令:
grant all on *.* to test@'192.168.220.%' identified by '123.com'; //容许ip为192.168.220网段从任意终端经过123.com的密码进行访问
第三步:在 amoeba 服务器上配置读写分离功能
一、cd /usr/local/amoeba vim conf/amoeba.xml 第30行:<property name="user">amoeba</property> 第32行:<property name="password">123456</property> 117行去掉注释: <property name="writePool">master</property> <property name="readPool">slaves</property>
二、vim conf/dbServers.xml
26-29行:去掉注释,设置登陆用户名和密码 <property name="user">test</property> <property name="password">123.com</property> 找到主服务器和从服务器模块,修改好名称和对应IP地址: 主服务器: <dbServer name="master" parent="abstractServer"> <property name="ipAddress">192.168.220.141</property> 第一台从服务器: <dbServer name="slave1" parent="abstractServer"> <property name="ipAddress">192.168.220.140</property> 第二台从服务器: <dbServer name="slave2" parent="abstractServer"> <property name="ipAddress">192.168.220.136</property> 指定从服务器池: <dbServer name="slaves" virtual="true"> <property name="poolNames">slave1,slave2</property>
三、启动 amoeba
/usr/local/amoeba/bin/amoeba start& //&表示将进程放到后台,时间较长,稍等待
第四步:客户端测试
一、客户端虚拟机,能够直接用yum安装一个mysql服务
yum install -y mysql
二、链接 amoeba 服务器
(1)指定密码和端口链接 amoeba
mysql -u amoeba -p 123456 -h 192.168.220.129 -P8066
(2)建立一个 名为 school 的库,再建立一个叫 info 的表
MySQL [school]> create table info ( -> id int(4) not null primary key, //指定id号,为primary key,不为空 -> name varchar(10) not null, //名字 -> score decimal(4,1) not null); //成绩 Query OK, 0 rows affected (0.03 sec)
三、三台mysql服务器验证明验结果
首先验证写的操做是否分离:
(1)此时,咱们在主服务器上,直接进入数据库,就会发现也多了一个名为 info的表
(2)可是,两台从服务器上并无:
因此,咱们在客户端写入的语句,在主服务器上会查询到,可是两台从服务器上并无,此时写的操做就直接交给了主服务器。
接下来是验证读的操做:
(1)在两台从服务器上的各自也建立一个 info 表,也都各自写入两条信息。
(2)客户端查询 info 表的内容,由于作了读写分离操做,因此查询的内容应该是 两台从服务器上 info表的内容。
所以,用户读取数据,同时经过从服务器,这样就减轻了主服务器的并发量。
4、总结
这篇博客,为了展现读写分离的实验效果,并无同时作主从同步,在企业网中,主从同步和读写分离是密不可分的。这样,客户对数据库进行写的操做时,就由主服务器承担;进行读取,查询等操做时,就由从服务器来承担(因为作了主从同步,每台从服务器的数据和主服务器是同样的)
在高并发请求时,实现了负载均衡,保证数据的安全性,服务器的高效运行。