amoeba搭建mysql8.0读写分离

一、搭建mysql8.0主从复制

 这个可以通过脚本https://download.csdn.net/download/krb___/89615542或者博客搭建docker MySQL主从复制_docker mysql主从复制 empty set-CSDN博客这个是5.6的主从博客和8.0的数据库略有差异例如权限设定。

二、配置jdk1.8

 这个可以通脚本https://download.csdn.net/download/krb___/89524089或者博客搭建Centos7 linux安装JDK1.8-CSDN博客

三、配置数据库账号和相应的权限

--1、给主从数据库,添加amoeba账号,数据库访问权限,以及外部访问权限
--添加amoeba账号 密码自定义这里是123456
CREATE USER 'amoeba'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
--设定账号访问数据库权限 这里用的是所有数据库都可操作%
GRANT REPLICATION SLAVE ON *.* TO 'amoeba'@'%';
--开启外部访问权限
alter user amoeba@'%' identified with mysql_native_password by '123456';
--刷新数据库
flush privileges;
--2、添加主从链接账号,数据库访问权限以及外部访问权限(我这里用的的是root账号)
--添加账号,因为是root账号所以下面语句可以不执行 当然也可以添加个其他账号
CREATE USER 'master_slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
--设定账号访问数据库权限 这里用的是所有数据库都可操作%
GRANT REPLICATION SLAVE ON *.* TO 'master_slave'@'%';
--开启外部访问权限
alter user root@'%' identified with mysql_native_password by '123456';
--刷新数据库
flush privileges;

四、下载配置amoeba

#安装wget
yum install -y wget
#创建文件夹
mkdir -p /usr/local/amoeba/
#下载amoeba3.0.5
wget https://sourceforge.net/projects/amoeba/files/latest/download/amoeba-mysql-3.0.5-RC-distribution.zip
#解压缩
unzip amoeba-mysql-3.0.5-RC-distribution.zip

1、配置dbServers.xml配置文件

vim /usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/dbServers.xml

<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd">
<amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/">
                <!-- 
                        Each dbServer needs to be configured into a Pool,
                        If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration:
                         add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig
                         such as 'multiPool' dbServer   
                -->
        <dbServer name="abstractServer" abstractive="true">
                <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
                        <property name="connectionManager">${defaultManager}</property>
                        <property name="sendBufferSize">64</property>
                        <property name="receiveBufferSize">128</property>
                                
                        <!-- mysql port 容器 设定的3307 3308 都不用这里统一用3306因为调用的是容器内部IP-->  
                        <property name="port">3306</property>
                           
                        <!-- mysql schema 调用的数据库名称 需要有text数据库不然报错-->
                        <property name="schema">text</property>
                        
                        <!-- mysql user 登录主从的用户名和密码 这个可以是root也可以也是其他 自己设定-->
                        <property name="user">root</property>
                        <!-- 密码 -->
                        <property name="password">123456</property>
                </factoryConfig>
                <poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool">
                        <property name="maxActive">500</property>
                        <property name="maxIdle">500</property>
                        <property name="minIdle">1</property>
                        <property name="minEvictableIdleTimeMillis">600000</property>
                        <property name="timeBetweenEvictionRunsMillis">600000</property>
                        <property name="testOnBorrow">true</property>
                        <property name="testOnReturn">true</property>
                        <property name="testWhileIdle">true</property>
                </poolConfig>
        </dbServer>
        <!-- name自定义 master 下面是主数据库的配置 IP地址以及端口号 如果端口号不一致可以在下面单独配置 可以有读个主数据库配置 -->
        <dbServer name="master"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">172.18.0.6</property>
                        <property name="port">3306</property>
                </factoryConfig>
        </dbServer>
        <!-- name自定义 slave01 slave02 下面是从数据库的配置 IP地址以及端口号 如果端口号不一致可以在下面单独配置 可以有读个从数据库配置 -->
        <dbServer name="slave01"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip -->
                        <property name="ipAddress">172.18.0.7</property>
                        <property name="port">3306</property>
                </factoryConfig>
        </dbServer>
        <dbServer name="slave02"  parent="abstractServer">
                <factoryConfig>
                        <!-- mysql ip 端口使用容器 内部端口 -->
                        <property name='ipAddress'>172.18.0.8</property>
                        <property name="port">3306</property>
                </factoryConfig>
        </dbServer>
        <!-- 主库调用的组 下面可以调用读个主库的陪,中间用逗号隔开 master1,master2等等 -->
        <dbServer name="masters" 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">master</property>
                </poolConfig>
        </dbServer>
        <!-- 从库调用的组 下面可以调用读个主库的陪,中间用逗号隔开 slave01,slave02等等 -->
        <dbServer name="slaves" 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">slave01,slave02</property>
                </poolConfig>
        </dbServer>
</amoeba:dbServers>

2、配置amoeba.xml配置文件

vim /usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/amoeba.xml

<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
<amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">
        <proxy>
                <!-- service class must implements com.meidusa.amoeba.service.Service -->
                <service name="Amoeba for Mysql" class="com.meidusa.amoeba.mysql.server.MySQLService">
                        <!-- port 外部用amoeba链接的端口号 -->
                        <property name="port">8066</property>
                        
                        <!-- bind amoeba的ipAddress -->
                        <!-- -->
                        <property name="ipAddress">192.168.60.61</property>
                        <property name="connectionFactory">
                                <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
                                        <property name="sendBufferSize">128</property>
                                        <property name="receiveBufferSize">64</property>
                                </bean>
                        </property>
                        <property name="authenticateProvider">
                                <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
                                        <!-- amoeba 链接数据库的用户名 主从库都需要添加amoeba账号并且设定数据库访问权限以及外部访问权限 -->
                                        <property name="user">amoeba</property>
                                        <!-- amoeba 数据库的链接密码 123456 -->
                                        <property name="password">123456</property>
                                        <property name="filter">
                                                <bean class="com.meidusa.toolkit.net.authenticate.server.IPAccessController">
                                                        <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
                                                </bean>
                                        </property>
                                </bean>
                        </property>
                </service>
                <runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext">
                        <!-- proxy server client process thread size -->
                        <property name="executeThreadSize">128</property>
                        <!-- per connection cache prepared statement size  -->
                        <property name="statementCacheSize">500</property>
                        <!-- default charset -->
                        <property name="serverCharset">utf8</property>
                        <!-- query timeout( default: 60 second , TimeUnit:second) -->
                        <property name="queryTimeout">60</property>
                </runtime>
        </proxy>
        <!-- 
                Each ConnectionManager will start as thread
                manager responsible for the Connection IO read , Death Detection
        -->
        <connectionManagerList>
                <connectionManager name="defaultManager" class="com.meidusa.toolkit.net.MultiConnectionManagerWrapper">
                        <property name="subManagerClassName">com.meidusa.toolkit.net.AuthingableConnectionManager</property>
                </connectionManager>
        </connectionManagerList>
                <!-- default using file loader -->
        <dbServerLoader class="com.meidusa.amoeba.context.DBServerConfigFileLoader">
                <property name="configFile">${amoeba.home}/conf/dbServers.xml</property>
        </dbServerLoader>
        <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
                <property name="ruleLoader">
                        <bean class="com.meidusa.amoeba.route.TableRuleFileLoader">
                                <property name="ruleFile">${amoeba.home}/conf/rule.xml</property>
                                <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>
                        </bean>
                </property>
                <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
                <property name="LRUMapSize">1500</property>
                <!-- 主要读写的数据库 默认调用的数据库 名字需要和 dbServers.xml 配置文件赋予的名称一致 (write 和 read一样)-->
                <property name="defaultPool">master</property>
                <!-- write 写  read 读 -->
                <property name="writePool">master</property>
                <property name="readPool">slaves</property>
                <property name="needParse">true</property>
        </queryRouter>
</amoeba:configuration>

3、配置启动文件launcher

vim /usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin/launcher
##############launcher 启动文件顶部添加 否则启动报错#######################
#jdk1.8的目录
JAVA_HOME=/usr/local/java/jdk1.8.0_202
#启动配置大小
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"
#####################################################

五、启动链接测试amoeba

#切换到启动目录
cd /usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin
#启动
./launcher


#链接
mysql -h 192.168.60.61 -P 8066 -u amoeba -p
#密码上面设置是 123456

#测试 在slave01和slave02添加不同的数据 用查询语句查询即可测试是否成功
#slave01
insert into text values(1,'slave01');
#slave02
insert into text values(2,'slave02');
#amoeba     查询看一下是否一个跳转一次
select * from text

#可以通过查询amoeba的report.log日志来确定是否执行成功
tail -n 50 report.log

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值