mysql amoeba负载均衡_mysql+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架构。

实验架构图:

40f37d0448d90ab74c253adbc5614cbb.png

系统环境:

30cc16851ba2a88de0f2776eceb5b72c.png

数据库主从复制环境部署

一、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

2e9d4e9f7a9a186db6da584b51fd1cd0.png

2、重启数据库并重置

systemctl restart mariadb

mysql_secure_installation

487526567b9ca0be4acdfed14f132966.png

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;

98969b1825877921876024f67549ae31.png

4、查看master状态,记录二进制文件名(mysql-bin.000002)和位置(245)

SHOW MASTER STATUS;

f358c65353cfd399c44ff41ac8023e35.png

5、防火墙放行服务及端口

1ca22fb43ae081687d0eec4ca24ece09.png

二、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

a6bbc1f5fc1b70768917354e31f523d1.png

2、重启数据库并重置

systemctl restart mariadb

mysql_secure_installation

487526567b9ca0be4acdfed14f132966.png

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;

f8078f32d09ea6b53da6cabbdeffd540.png

4、启动slave同步进程,并查看slave状态

mysql>start slave;

mysql>SHOW SLAVE STATUS;

aab0fa46248917de82dc25eb5be1f72d.png

5、建立amoeba用户,并授予相关权限,为部署amoeba做准备(两台从数据库都要添加)

GRANT ALL PRIVILEGES ON . TO amoeba@10.100.246.240 IDENTIFIED BY '123456' WITH GRANT OPTION;

mysql>FLUSH PRIVILEGES;

e8737d3bc05e911139d57758e23d1dc0.png

6、防火墙放行服务及端口

bc445983529d7b8b7df942e8a1b26c90.png

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

0a85a8c88270bdce8222f99e21989125.png

499d4ffd0fd9ebddf288da2a19a624a6.png

b296ad541d854ea1c1f864fff8f93e18.png

2.2粘贴地址到浏览器地址栏

f006ad13d3fa62c684923606ff29c940.png

根据版本,系统位数,选择tar.gz文件下载 (注:记得勾选license)

19de0953ed07a0c1e772f444bcd842af.png

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

8acf2b8510de534e3cb9ac3a302fbb8e.png

4、刚刚设置的环境变量生效并检查是否安装成功

source /etc/profile 或者 . /etc/profile

java -version

10368dc7ea720fbc32080f0c90de3ad9.png

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

d21f0ab482854b4a34c11fa09feb1525.png

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、防火墙放行端口号

389dc85511c40c9770098a50f6e42993.png

我们在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(密码)

07387ccc625e8fbf3e7efc343a2bfb96.png

而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以英文逗号隔开

68b96390a5520d79a10569bbe2568a35.png

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,这点需要注意

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

端口,用户名和密码配置完之后,我们来配置queryRouter标签,该标签可以实现真正意义上的读写分离,以上配置均为该标签做准备。其中我们需要手动修改的地方有三处,分别是defaultPool,writePool和readPool。defaultPool配置了默认的数据库节点,一些除了SELECT\UPDATE\INSERT\DELETE的语句都会在defaultPool执行,一般设置为主库。writePool顾名思义就是数据库写库,insert,update和delete操作都将会在此库中执行,一般设置为主库。readPool就是写库。如果是单主单从,则readPool就写从库在dbServers.xml中设置的名称,例如设置为slave01,如果是一主多从,则readPool设置为从数据库池,例如本案例中的multiPool,就是从数据库池,包含slave01和salve02两个从数据库,这样就完成了读写分离(主从)和负载均衡(从一和从二)。至此,amoeba的配置工作已完成

0a5b168f383f59b2f8934825668ad8b6.png

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"

908a4928a987f1e473226bdfe75885c8.png

5ea45a16584e12cadc81a661b7c4d31e.png

8、启动脚本

./launcher &

adae7affe491e4e3c5b978413ef5a739.png

9、将脚本加入开机启动项

vim /etc/profile

./usr/amoeba/amoeba-mysql-3.0.5-RC/bin/launcher &

5752084e20c8c6638ceb97665950a83b.png

10、查看java服务

netstat -tnlap | grep java

3a9a403aa1f6a38b4519125405ea1c5f.png

客户端验证

1、安装mariadb软件

yum install -y mariadb

2、登录amoeba服务器

mysql -h10.100.246.240 -udesktop -P8066 -p

9ef3acabf416f818608a05d72baf9c54.png

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与表中插入的数据,存在则说明写入成功,主从同步成功

9588154ace771e0b993ebaba4df8df2d.png

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;

7e8bafc075bc3d60023466da46bbec71.png

5、测试验证读是否限制在slave01和slave02两台从数据库中

5.1临时关闭slave01和slave02与主数据库的同步

MariaDB [bob]> STOP SLAVE;

5.2客户端在cisco数据表中插入一条数据,通过SELECT命令是否能查看插入的数据,不能看见数据,则实验成功

7618a6199c9407b1d29d471cc9bed0a6.png

5.3再将slave01和slave02与主数据库的同步开启,验证客户端上是否能够查看到数据

slave01和slave02:MariaDB [bob]> START SLAVE;

desktop:MariaDB [bob]>SELECT * FROM cisco;

b8f83a6bc8c6552cf1db876add502ba4.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值