下文给大家带来什么是Amoeba?,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用亿速云在行业内累计的经验来做一个解答。
Amoeba是什么?
Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发,它位于与Client、DBServer(s)之间,对客户端透明。具有 负载均衡、高可用性、SQL过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果 。
通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多 企业的生产线上面使用。
需求案例:
有三个数据库节点分别命名为Master、Slave1、Slave2如下:
Master: Master (只写)
Slaves:Slave1、Slave2 (2个平等的数据库。只读/负载均衡)
案例实现Master、Slaves之间数据库主从复制、读写分离,负载均衡的高可用Mysql架构。
实验架构图:
系统环境:
数据库主从复制环境部署
一、mster:(10.100.246.241)
yum install -y mariadb
systemctl enable mariadb
systemctl start mariadb
1、修改mysql配置
找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/mysql/my.cnf,在[mysqld]部分插入如下两行:
[mysqld]
log-bin=mysql-bin //开启二进制日志
server-id=241 //设置server-id
2、重启数据库并重置
systemctl restart mariadb
mysql_secure_installation
3、启mysql,创建用于同步的用户账号,并授予对应的权限
打开mysql会话shell>mysql -uname -ppassword
分别创建两个用户,一个用户授权给slave01和slave02,另一个用户授权给amoeba云服务器
slave username:slave ;password:123456
amoeba username:amoeba ;password:123456
mysql>CREATE USER slave@'10.100.246.%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE ON . TO slave@'10.100.246.%' WITH GRANT OPTION;
mysql>GRANT ALL PRIVILEGES ON . TO amoeba@10.100.246.240 IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
4、查看master状态,记录二进制文件名(mysql-bin.000002)和位置(245)
SHOW MASTER STATUS;
5、防火墙放行服务及端口
二、slave01和slave02:(10.100.246.242,10.100.246.243)
注:slave02操作步骤除了my.cnf配置里的server-id号不一样,其余操作步骤和slave01一样
yum install -y mariadb
systemctl enable mariadb
systemctl start mariadb
1、更改mysql配置
找到my.cnf配置文件,添加server-id
[mysqld]
server-id=242 //设置server-id,必须唯一;slave02 server-id=243
2、重启数据库并重置
systemctl restart mariadb
mysql_secure_installation
3、打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):
CHANGE MASTER TO MASTER_HOST='10.100.246.241', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=245;
4、启动slave同步进程,并查看slave状态
mysql>start slave;
mysql>SHOW SLAVE STATUS;
5、建立amoeba用户,并授予相关权限,为部署amoeba做准备(两台从数据库都要添加)
GRANT ALL PRIVILEGES ON . TO amoeba@10.100.246.240 IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
6、防火墙放行服务及端口
JDK环境部署:(amoeba使用java编写,所以运行amoeba的运行环境要安装好java环境,并配置好环境变量)
1、卸载系统自带的OpenJDK以及相关的java文件
rpm -aq | grep java
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64 java-1.7.0-openjdk-headless-1.7.0.141-2.6.10.5.el7.x86_64 java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
java -version
2、下载最新稳定JDK
【注意】:JDK安装在哪个用户下,就是给哪个用户使用
下载地址为
2.1当前最新版本下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
历史版本下载地址: http://www.oracle.com/technetwork/java/javase/archive-139210.html
2.2粘贴地址到浏览器地址栏
根据版本,系统位数,选择tar.gz文件下载 (注:记得勾选license)
2.3下载完成后,将JDK包本地解压,通过winscp上传至amoeba服务器 /usr/java 目录 (注:没有java这个目录可自行建立)
2.4将/java目录中的文件授予执行权限
chmod o+x /usr/java/ -R
3、配置JDK环境变量
在文本的最后一行粘贴如下:
注意JAVA_HOME=/usr/java/jdk-11.0.2 就是你自己的目录
【注】:CentOS6上面的是JAVAHOME,CentOS7是{JAVA_HOME}
vim /etc/profile
#java environment
export JAVA_HOME=/usr/java/jdk-11.0.2
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
4、刚刚设置的环境变量生效并检查是否安装成功
source /etc/profile 或者 . /etc/profile
java -version
Amoeba环境部署:(10.100.246.240)
一、准备工作
1、amoeba使用java编写,所以运行amoeba的运行环境要安装好java环境,并配置好环境变量,jdk版本要在1.5以上,因为amoeba就是用jdk1.5编写的;我的服务器java版本为11.0.2
2、amoeba是在主从同步的基础上工作的,所以要先配置好MySQL的主从同步功能
二、下载安装amoeba
1、下载地址:https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/3.x/
选择最新版本进行下载;我下载的版本为:amoeba-mysql-3.0.5-RC-distribution.zip
2、下载完成后,在本地将包解压,解压完成后,通过winscp工具将amoeba-mysql-3.0.5-RC文件上传至amoeba服务器/usr/amoeba目录下(注:amoeba目录自行建立)
3、授予该目录执行权限
[root@amoeba amoeba]# chmod o+x amoeba-mysql-3.0.5-RC/ -R
4、防火墙放行端口号
我们在amoeba文件夹中找到conf文件夹,其中我们需要配置的仅有dbServers.xml和amoeba.xm
5、编辑配置 /amoeba-mysql-3.0.5-RC/conf 目录下dbServers.xml文件
首先我们来看下name为abstractServer的dbServer标签,其中abstractive属性为true,意味着这是一个抽象的dbServer定义,可以由其他dbServer定义拓展,类似于抽象类,可以由其他类继承和扩展。其中需要我们手动修改的是端口(port),数据库(schema),用户名(user),密码(password);那么这里应该如何填写呢?本人第一次使用的时候也非常迷糊,其实我们应该填写的就是在master和slave上我们为amoeba服务器创建的用于连接master和slave数据库的用户,因此这里应该填写port——3306(默认端口无修改),schema——bob(bob数据库),user——amoeba(用户名),password——123456(密码)
而abstractServer下方的dbServer就是我们实际中需要使用的,关于dbServer,可以根据自己的情况书写,有几个需要配置的数据库,就填写几个,其中name可以自定义,最好书写有含义的名称,parent就填写abstractServer,因为我们要继承abstractServer,这样我们就可以在abstractServer的基础上进行扩展(继承了port,schema,user和password等属性),只需要添加独有的属性即可。
案列为一主两从,主为master,从一为slave01,从二为slave02。除了各自的dbServer之外,我们还可以新建一个dbServer作为数据库池,用于整合那些功能相同的数据库,案列中slave1和slave2都是从数据库,负责读取操作,我们就可以把它们集中在一起方便调用。其中属性为loadbalance代表负载均衡,默认值是1,代表轮询算法,poolNames属性就是让我们放置那些具有共同功能的dbServer,例如slave1,,slave2,其中不同的dbServer以英文逗号隔开
6、编辑配置 /amoeba-mysql-3.0.5-RC/conf 目录下amoeba.xml文件
配置完成dbSevers.xml之后,我们来配置amoeba.xml,首先我们来配置service标签,需要配置的地方有三点,port,user和password。其中port默认是8066,可以自行更改,但是不要跟现有端口起冲突,如非必要不建议更改。user和password则可以自定义,无需跟master和slave创建的用户一致。这里的端口,用户名和密码其实就是为了虚拟出一个mysql链接做准备的(非真实,amoeba服务器可以不安装真实的mysql数据库)
特别说明:在service标签中有一个被注释的ipAddress属性,该属性用于绑定可以链接amoeba虚拟出来的mysql的具体ip,如果不绑定,则amoeba服务器所在的网络环境(在同一个局域网下,非同一个局域网下未测试)的其他服务器,可以通过amoeba的内网ip进行链接,如果绑定了127.0.0.1,那么只有amoeba服务器可以链接虚拟出来的mysql,这点需要注意
端口,用户名和密码配置完之后,我们来配置queryRouter标签,该标签可以实现真正意义上的读写分离,以上配置均为该标签做准备。其中我们需要手动修改的地方有三处,分别是defaultPool,writePool和readPool。defaultPool配置了默认的数据库节点,一些除了SELECT\UPDATE\INSERT\DELETE的语句都会在defaultPool执行,一般设置为主库。writePool顾名思义就是数据库写库,insert,update和delete操作都将会在此库中执行,一般设置为主库。readPool就是写库。如果是单主单从,则readPool就写从库在dbServers.xml中设置的名称,例如设置为slave01,如果是一主多从,则readPool设置为从数据库池,例如本案例中的multiPool,就是从数据库池,包含slave01和salve02两个从数据库,这样就完成了读写分离(主从)和负载均衡(从一和从二)。至此,amoeba的配置工作已完成
7、配置jvm运行参数
运行在jdk11.0.2环境中的amoeba要求xss参数必须大于228才能启动JVM
所以在amoeba安装目录下的jvm.properties文件中进行参数设置
vim jvm.properties
JVM_OPTIONS="-server -Xms512m -Xmx1024m -Xss512k -XX:PermSize=16m -XX:MaxPermSize=96m"
8、启动脚本
./launcher &
9、将脚本加入开机启动项
vim /etc/profile
./usr/amoeba/amoeba-mysql-3.0.5-RC/bin/launcher &
10、查看java服务
netstat -tnlap | grep java
客户端验证
1、安装mariadb软件
yum install -y mariadb
2、登录amoeba服务器
mysql -h30.100.246.240 -udesktop -P8066 -p
3、测试数据库是否能够写入数据,主从数据是否同步
客户端登录数据库后,进入名为bob的数据库,插入一张表
MySQL [bob]> CREATE TABLE cisco (id int(10),name varchar(10),type varchar(20));
MySQL [bob]> INSERT INTO cisco VALUE ('1','ccie','this_is_master');
在主数据库和两台从数据库上查看是否存在建立的table与表中插入的数据,存在则说明写入成功,主从同步成功
4、测试验证两台从数据库是否实现负载均衡(轮询)
slave01:进入bob数据库,在cisco表中插入以下数据
MariaDB [bob]>INSERT INTO cisco VALUE ('2','ccie','this_is_slave01');
slave02:进入bob数据库,在cisco表中插入以下数据
MariaDB [bob]>INSERT INTO cisco VALUE ('2','ccie','this_is_slave01');
desktop:进入bob数据库,通过命令查看cisco表中数据,因为是轮询负载,所以表中查看数据会在slave01和slave02上来回切换数据
MariaDB [bob]>SELECT * FROM cisco;
5、测试验证读是否限制在slave01和slave02两台从数据库中
5.1临时关闭slave01和slave02与主数据库的同步
MariaDB [bob]> STOP SLAVE;
5.2客户端在cisco数据表中插入一条数据,通过SELECT命令是否能查看插入的数据,不能看见数据,则实验成功
5.3再将slave01和slave02与主数据库的同步开启,验证客户端上是否能够查看到数据
slave01和slave02:MariaDB [bob]> START SLAVE;
desktop:MariaDB [bob]>SELECT * FROM cisco;
看了以上关于什么是Amoeba?,如果大家还有什么地方需要了解的可以在亿速云行业资讯里查找自己感兴趣的或者找我们的专业技术工程师解答的,亿速云技术工程师在行业内拥有十几年的经验了。亿速云官网链接www.yisu.com
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。