amoeba代理
Mysql代理软件Amoeba
Amoeba的作用是在于Mysql之上,用于代理应用与Mysql的连接,可以理解为中间件,他的作用是将连接细化,如:将读写进行分离,分别指向不同的数据库,也可用根据不同的数据进行指向不同的数据库,还可以做读或写的负载均衡
mysql 代理层有mysqlproxy, amoeba, cobar等
Mysqlproxy:数据量很小的时候用的还不错,可数据量一但大起来,这个软件就会暴露出很多BUG问题,Mysql官方给出的建议是适应轻量级的应用
Amoeba:适用中大型数据量的应用负载,可做读写分离,数据切分,负载均衡等技术,是目前企业中用的最广的数据库代理
Cobar:Cobar的分布式主要是通过将表放入不同的库来实现。是阿里巴巴开发的软件,本地的软件和Amoeba一样
Amoeba代理Mysql读写分离
Amoeba代理Mysql读写分离,架构图:
1 |
|
准备4台服务器(3台也行,amoeba当代理又当客户端)
192.168.224.10 客户端
192.168.224.11 amoeba
192.168.224.12 mysql主
192.168.224.13 mysql从
1 | -u 指定用户名 |
架构前所有节点准备:
1,主机名三步,互相绑定
2,时间同步
3,关闭iptables,selinux
4, 配置好yum
5, 静态ip地址
6,安装好mysql
第一步:安装amoeba服务器
在amoeba服务器上操作。
因为是java开发的,需要java运行环境,需要先安装JDK
1、安装jdk1.8版本,
tar包二进制包,解压即能用。 本地上传
1 | tar xf jdk-8u45-linux-x64.tar.gz -C /usr/local/ |
把刚解压的JDK改名为java
1 | mv /usr/local/jdk1.8.0_45 /usr/local/java |
验证一下刚解压安装的的jdk版本
1 | /usr/local/java/bin/java -version |
到此为止JDK已经好了,下面amoeba要用到这个jdk目录
2、安装amoeba软件
官网
1 | https://sourceforge.net/projects/amoeba/ |
下载amoeba
1 | wget https://nchc.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip |
使用ls查看解压的目录
1 | ls /usr/local/amoeba/ |
关注下面二个目录
bin 是启动脚本目录
conf 是配置文件目录
配置文件目录里我们要关注有三个文件:
amoeba.xml #配置amoeba的全局配置文件
dbServers.xml #配置amoeba连接mysql数据库的文件
rule.xml #配置我们数据切分的文件
3.开始配置amoeba连接mysql数据库
Amoeba-dbServers配置
- dbServers.xml:读写分离配置文件
- access_list.conf:IP访问列表控制配置文件 默认禁止所有ip连接
1 | vim /usr/local/amoeba/conf/access_list.conf |
修改 ./conf/dbServers.xml
1 | vim /usr/local/amoeba/conf/dbServers.xml |
1 | 20 <property name="port">3306</property> #修改端口,默认是3306,可以不修改 |
如果要再定义一台从服务器,可以再这里增加内容,(45-50行)6yy复制6行 p粘贴,把name=”server2”改成”server3”再修改对应IP就可以了
再修改 ./conf/amoeba.xml 文件
1 | vim /usr/local/amoeba/conf/amoeba.xml |
设置amoeba监听的端口,默认是8066
1 | 11 <property name="port">8066</property> #修改端口(可以改可以不改) |
注意:
- 以上配置客户端连接amoeba时需要使用这里设定的账号;
- 此处账号密码和amoeba连接后端数据库服务器的密码无关;
- 前端应用程序连接数据库的地址就是Amoeba服务器的值,连接用户名和密码即为此处配置的用户名和密码。
4、修改amoeba启动文件
启动文件/usr/local/amoeba/bin/amoeba 是需要jdk的支持才能启动,下面我们配置启动文件指定访问jdk
在第1步时我们解压了jdk,这里要配置amoeba访问jdk
1 | vim /usr/local/amoeba/bin/amoeba |
在10行下面,加上以下代码
1 | JAVA_HOME=/usr/local/java |
修改-Xss196k的大小
1 | vim /usr/local/amoeba/jvm.properties |
把 Xss196k 改成228k,因启动时要求最低内存是228k,我这里改成512k,物理内存1024m
1 |
|
注:-Xms256m #分配256m物理内存给amoeba软件用,连接数据库时初始化内存就要256m
-Xmx256m #这个是amoeba软件最大可用的物理内存,(32位的JDK最大只能是2G,64位的JDK无限制但不能大于本机的物理内存大小)
-Xss128k #默认是128k,但amoeba软件要求是228k,这个启动amoeba软件就要228k的内存
再使用nohup方法启动amoeba服务
nohup ./bin/amoeba start & –这个启动方法把启动的信息写进nohup.out文件里,并在后台运行。建议用这种方法,方便我们排错。
绝对路径: nohup /usr/local/amoeba/bin/amoeba start &
启动的另外二个方法:建议不使用
./bin/amoeba start & –这个启动的方法是把启动的信息打印在终端窗口。
./bin/amoeba start >/dev/null & –把启动的信息输出到/dev/null 空洞里面。
查看是否启动
1 | netstat -putnal |grep java |
第二大步:在mysql主从服务器上授权并验证
为了方便验证,把两台mysql复制关闭,然后两台mysql都新建下面的测试表
下面的步骤,两台数据库都要操作执行。
1 | mysql> create database aaa; |
并对mysql进行授权,授权的IP为amoeba的IP
创建用户
1 | create user 'mysql'@'%' identified with mysql_native_password by '123.Shui!!@#'; |
授权
1 | grant all on aaa.* to 'mysql'@'%'; |
授权后,可以去amoeba(192.168.224.11)这台去连接一下这两个mysql,需要能连才行,如果不能连则把上面再做一遍
在amoeba服务器测试连接两台mysql
1 | mysql -umysql -h192.168.224.12 -P3306 -p'123.Shui!!@#' |
如果防火墙清空后还是连不上192.168.224.13的话, 可以把13这台mysql重启
或者在mysql服务器上执行命令
1 | mysqladmin flush-hosts -p'123.Shui!!' |
第三大步:在客户端进行测试
客户端使用mysql命令连接 amoeba服务器登陆测试
1 | mysql -uamoeba -p123 -h192.168.224.11 -P8066 |
注意开放对应的端口
1 | iptables -A INPUT -p tcp -m multiport --dport 8066 -j ACCEPT |
登录后测试
1 | mysql> use aaa; |
真实环境就要把主从复制打开
Amoeba集群 之 读集群
集群的好处是,可以让服务器平均负载我们连接请求
Amoeba集群分发算法有三种:
1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA
ROUNDROBIN #代表轮询,1台访问一次
WEIGHTBASED #代表加权轮询,是以哪一台性能好就承载多一点连接
HA #代表高可用
把读写分离改成读集群的条件是至少2台服务器做读,
第一步:配置dbServers.xml文件:
dbServer.xml文件里的 59行~67行 是设置集群的段
我们关注的行有59,62,65行
59行的 name=”multiPool”,这个是设置服务器集群名称,在amoeba.xml文件里设备读服务器时要用到
62行是设置集群的算法,默认是1轮询
65行是设置服务器列表。
以下是配置代码:
1 | vim /usr/local/amoeba/conf/dbServers.xml |
#设置定义一个虚拟的dbserver,实际上相当于一个dbserver组,这里将可读的数据库ip统一放到一个组中,将这个组的名字命名为myslave。
1 |
|
第二步:配置amoeba.xml文件:
amoeba.xml文件里我们要修改以下行。
1 | vim /usr/local/amoeba/conf/amoeba.xml #修改配置文件 |
第三步:重启amoeba代理软件。
1 | nohup /usr/local/amoeba/bin/launcher & 启动 |
第四步:在客户机上测试读集群是否生效。
先在sql服务器上创建emp表
1 | mysql> create table emp (id int, ename varchar(20)); |
在客户机上使用mysql命令登陆amoeba服务器
1 | mysql -uamoeba -p123 -h192.168.224.11 -P8066 |
往emp表里插入两条数据
1 | mysql> insert into emp values(10,"test1"); |
注:配置文件定义的是客户端写入数据是进入server1服务器上,server2服务器上就没有数据,
客户端也可以读server1服务器上的数据。
再查询emp表的数据
1 | mysql> select * from emp; |
查询的时候一次查询mysql 1上面的数据,再查询一次又跳到另外一台mysql服务器上了
真实环境需要把集群搭建好,数据需要同步。这里是测试,所以才分别建的不同表,
到此mysql读集群配置完毕。
Mysql 数据切分
是按照不同的数据访问不同的数据库
第一步:搭建前,先关闭读写分离和主从复制
vim /usr/local/amoeba/conf/amoeba.xml
#把下面的内容注释,读写分离成功关闭。
1 | <!-- |
第二步:配置数据切片
面我是按aaa.emp表里的emp_id这一列来切分,当它为奇数就给server2,为偶数就给server1
修改第三个配置文件,定义数据切分的规则
1 | vim /usr/local/amoeba/conf/rule.xml |
参数解释
1 | <?xml version="1.0" encoding="gbk"?> |
先拷贝一份默认文件
1 | cp /usr/local/amoeba/conf/rule.xml /usr/local/amoeba/conf/rule.xml.bak |
直接复制粘贴上去,格式空格之类的太多;可以先在vim里:set paste再insert模式粘贴上去就可以了
1 | <?xml version="1.0" encoding="gbk"?> |
备:复制到rule.xml文件后,要把后面的中文注释删除,光标移到需要删除的地方。使用命令d$
第三步:重启amoeba
如果配置文件出错会启动不了:
1 | nohup /usr/local/amoeba/bin/launcher & 启动 |
第四步:客户端测试
在客户端连接进行测试,连接的IP为amoeba的IP,端口为8066
1 | mysql -h192.168.224.11 -uamoeba -p123 -P8066 |
意:amoeba是根据sql解析来进行数据切分的,所以需要把切分的关键字段(这里是emp表的id字段)加入到sql中.否则切分规则无效。无效后,会在 server1,server2 均都插入数据。
1 | insert into aaa.emp values (1,'aaa'); #这样做是错误的,会在两个后台数据库里都插入数据 |
正确的插入方法
1 | mysql> insert into aaa.emp(id,ename) values (1,'aaa'); |
然后去server1(192.168.224.12)上查看,只有1,3两条数据
去server2(192.168.224.13)上查看,只有2,4两条数据
数据切分成功
delete和update操作也是同理
数据水平切分
按照上面的配置文件,只修改rule.xml规则文件如下,做成以emp_id值的范围来进行水平切分
下面实现的是id小于等于100的任何操作都在server1,大于100的任何操作都是在server2
1 | <?xml version="1.0" encoding="gbk"?> |
重启amoeba
1 | nohup /usr/local/amoeba/bin/launcher & 启动 |
客户端测试
1 | mysql -h192.168.224.11 -uamoeba -p123 -P8066 |
id分别输入大于100和小于100测试
1 | mysql> insert into aaa.emp(id,ename) values (99,'aaa'); |
数据水平切分成功
Amoeba数据切分 之 垂直切分:
架构图
1 | client 192.168.224.10 |
第一步:准备测试环境
1、先把两个mysql(不做AB复制的)以前的数据删掉,新建两个表来做测试
192.168.224.12上
1 | mysql> create database aaa; |
192.168.224.13上
1 | mysql> create database aaa; |
第二步:修改rule.xml配置文件
1 | vim /usr/local/amoeba/conf/rule.xml #清空文件内容,加上下面一段 |
1 | <?xml version="1.0" encoding="gbk"?> |
第三步:重启amoeba
1 | nohup /usr/local/amoeba/bin/launcher & |
第四步:在客户端测试
1 | mysql -uamoeba -p123 -h192.168.224.11 -P8066 |
1 | mysql> use aaa; |
- 本文标题:amoeba代理
- 本文作者:yichen
- 本文链接:https://yc6.cool/2020/08/03/amoeba代理/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!