在通过GTID构建主从环境后(GTID方式构建MySQL主从环境并排障),在主库10.234中先安装gcc环境[root@web etc]# yum install gcc* -y
上传jdk和amoeba包到主库10.234的/目录下。
解压jdk包安装jdk环境并配置相应的环境变量
[root@web ~]# mkdir amoeba[root@web ~]# tar -zxf jdk-8u281-linux-x64.tar.gz -C amoeba/[root@web ~]# cd amoeba/[root@web amoeba]# lltotal 0drwxr-xr-x 8 10143 10143 273 Dec 9 2020 jdk1.8.0_281[root@web amoeba]# ln -s jdk1.8.0_281/ jdk[root@web amoeba]# lltotal 0lrwxrwxrwx 1 root root 13 Jun 28 13:15 jdk -> jdk1.8.0_281/drwxr-xr-x 8 10143 10143 273 Dec 9 2020 jdk1.8.0_281[root@web amoeba]# export JAVA_HOME=/amoeba/jdk[root@web amoeba]# export PATH=$JAVA_HOME/bin:$PATH[root@web amoeba]# source /etc/profile

解压、安装amoeba
[root@web amoeba]# unzip amoeba-mysql-3.0.5-RC-distribution.zip[root@web amoeba]# lltotal 0drwxrwxrwx 7 root root 91 Apr 13 2017 amoeba-mysql-3.0.5-RClrwxrwxrwx 1 root root 13 Jun 28 13:15 jdk -> jdk1.8.0_281/drwxr-xr-x 8 10143 10143 273 Dec 9 2020 jdk1.8.0_281[root@web amoeba]# mv amoeba-mysql-3.0.5-RC amoeba
Amoeba配置读写分离、负载均衡
需要修改dbServers.xml和amoeba.xml两个配置文件(在/amoeba/amoeba/conf目录下)
修改dbServers.xml如下
[root@web conf]# vim dbServers.xml<!-- mysql port --><property name="port">3306</property>#端口<!-- mysql schema --><property name="schema">tianyi</property>#指定连接的数据库<!-- mysql user --><property name="user">root</property>#使用的用户名<property name="password">root123</property>#用户对应的密码……<dbServer name="server234" parent="abstractServer">#server234相当于定义一个名称<factoryConfig><!-- mysql ip --><property name="ipAddress">192.168.10.234</property>#主库的IP<property name="user">root</property><property name="password">root123</property></factoryConfig></dbServer><dbServer name="server233" parent="abstractServer"><factoryConfig><!-- mysql ip --><property name="ipAddress">192.168.10.233</property><property name="user">root</property><property name="password">root123</property></factoryConfig></dbServer><dbServer name="write" virtual="true">#定义一个dbServer的组名是write<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"><!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--><property name="loadbalance">1</property>#负载均衡方式为轮询<!-- Separated by commas,such as: server1,server2,server1 --><property name="poolNames">server234</property>#write组的成员</poolConfig></dbServer><dbServer name="read" virtual="true"><poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"><!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--><property name="loadbalance">1</property><!-- Separated by commas,such as: server1,server2,server1 --><property name="poolNames">server234,server233</property></poolConfig></dbServer>
根据上面的配置在主从都授权数据库root用户密码为root123
db01 [(none)]>grant all on *.* to 'root'@'192.168.10.%' identified by 'root123';
修改amoeba.xml如下
[root@web conf]# vim amoeba.xml<property name="port">8806</property>#默认监听端口<property name="ipAddress">192.168.10.234</property>#安装amoeba的服务器IP地址<property name="user">amoeba</property><property name="password">amoeba123</property>#设置客户端连接amoeba所需的用户名和密码<property name="defaultPool">write</property>#设置amoeba默认池<property name="writePool">write</property>#设置amoeba写池<property name="readPool">read</property>#设置amoeba读池
在主从都创建amoeba用户,并授权设置密码为amoeba123
db01 [(none)]> grant all on *.* to 'amoeba'@'192.168.10.%' identified by 'amoeba123';
修改amoeba启动文件中的JAVA_HOME的位置
[root@web conf]# vim amoeba/amoeba/bin/launcherJAVA_HOME=/amoeba/jdk
启动amoeba
[root@web conf]# /amoeba/amoeba/bin/launcher &[root@web ~]# netstat -ntpl | grep 8806tcp6 0 0 :::8806 :::* LISTEN 22755/java[root@web ~]#
测试
从另一台服务器10.184上使用amoeba用户登陆MySQL,在tianyi库(amoeba指定连接的数据库,没有的话要先创建)中创建t1和t2两个表
[root@backup_rsync ~]# mysql -uamoeba -pamoeba123 -P8806 -h192.168.10.234

此时去主库和从库上查看都可以看到t1和t2的表,因为默认写库是写到的主库10.234中,又因为配置了主从同步,所以会同步到从库中。
如果此时在从库中stop slave后,那么通过amoeba再创建一个表t3,那么只有主库中有,而从库中不会有t3这个表。而通过select @@server_id;可以轮询的获取到主库、从库的server_id,说明读的操作是在主库和从库之间轮询执行的,达到了读写分离、负载均衡的目的。

当在从库10.233再使用start slave;后,就又恢复主从复制关系了,t3就会同步到从库中了。

文章转载自运愁维卧,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




