• ADADADADAD

    Amoeba实现数据库读写分离[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:54:52

    作者:文/会员上传

    简介:

    一 环境以及软件版本:系统:CentOS Linux release 7.2.1511 (Core)mysql:Server version: 5.6.33Amoeba:amoeba-mysql-3.0.5-RC-distributionJDK:1.7.0_80-b15 (Amoeba的运行需要

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    一 环境以及软件版本:
    系统:CentOS Linux release 7.2.1511 (Core)
    mysql:Server version: 5.6.33
    Amoeba:amoeba-mysql-3.0.5-RC-distribution
    JDK:1.7.0_80-b15 (Amoeba的运行需要jdk)


    二 安装Amoeba:
    1 下载好所需软件:

    ls
    amoeba-mysql-3.0.5-RC-distribution.zipjdk-7u80-linux-x64.rpm

    2 安装jdk

    yum -y install jdk-7u80-linux-x64.rpm
    #java -versionjava version "1.7.0_80"Java(TM) SE Runtime Environment (build 1.7.0_80-b15)Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

    3 解压Amoeba

    unzip amoeba-mysql-3.0.5-RC-distribution.zip
     # mv amoeba-mysql-3.0.5-RC /usr/local/amoeba # mv amoeba-mysql-3.0.5-RC /usr/local/amoeba # cd /usr/local/amoeba/conf/ # vim amoeba.xml<property name="port">3306</property> #设置amoeba监听的端口,默认是8066<property name="ipAddress">10.0.0.159</property>#设置amoeba监听的ip地址<property name="user">root</property>#设置连接amoeba的用户<property name="password">123456</property>#设置连接amoeba的密码#(这里的账号密码和amoeba连接后端数据库服务器的密码无关)<property name="defaultPool">master</property>#设置amoeba默认的池,这里设置为matster#这两个选项默认是注销掉的,需要取消注释,这里用来指定写库和读库 <property name="writePool">master</property> <property name="readPool">multiPool</property> #这给的是一个组,如果这个组里有多个dbServers则可以负载均衡,此组在 dbServers.xml中设置

    设置mysql库的信息,在当前目录下的dbServers.xml文件里

    vim dbServers.xml
    <!-- mysql port --> #设置amoeba连接后端mysql的端口 <property name="port">3306</property><!-- mysql schema --> #设置缺省的数据库,当连接amoeba时,操作表必须显式的指定数据库名,即采用dbname.tablename的方式,不支持 use dbname指定缺省库,因为操作会调度到各个后端dbserver <property name="schema">test</property> <!-- mysql user --> #设置amoeba连接后端mysql的用户名和密码 <property name="user">amoeba</property><property name="password">123456</property> <dbServer name="master"parent="abstractServer">#设置一个后端的dbServer,这里设置连接可写的master库,此名字可自定义,但要和amoeba.xml中调用的名字一致即可。<factoryConfig><!-- mysql ip -->#后端mysql的ip地址<property name="ipAddress">10.0.0.176</property></factoryConfig></dbServer><dbServer name="slave"parent="abstractServer"> #设置一个后端的dbServer,这里设置连接可读的salve,此名字可自定义,但要和amoeba.xml中调用的名字一致即可。<factoryConfig><!-- mysql ip -->#后端mysql的ip地址<property name="ipAddress">10.0.0.193</property></factoryConfig></dbServer> <dbServer name="multiPool" virtual="true"> #定义一个dbserver组<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"><!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->##选择调度算法,1表示轮询负载均衡,2表示权重,3表示HA, 这里选择1<property name="loadbalance">1</property><!-- Separated by commas,such as: server1,server2,server1 --><property name="poolNames">slave</property> #组成员,当有多个时用逗号分隔</poolConfig></dbServer>

    三 mysql授权amoeba用户登录(此处我的两台mysql服务器master和slave已经做好了主从同步,并且已经验证成功,需要做主从同步请看https://blog.51cto.com/zengzeyang/1911173)
    master上授权:
    mysql>grant select,insert,update,delete on . to 'amoeba'@'10.0.0.%' identified by '123456';
    mysql>flush privileges;
    slave上授权:
    mysql> grant select on . to 'amoeba'@'10.0.0.%' identified by '123456';
    mysql> flush privileges;
    注意:此处授权的用户密码要和dbServers.xml中配置的一致。如果你的mysql开启所有库主从同步则你在主上授权的用户会同步到从库,解决方法是:1在从库上降权;2主从同步时不让mysql库同步

    四 启动amoeba:
    #cd /usr/local/amoeba/bin

    vim launcher
    添加JAVA_HOME:

    JAVA_HOME=/usr/java/jdk1.7.0_80

    # cd /usr/local/amoeba/ # vim jvm.properties 修改VM_OPTIONS: JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m" # /usr/local/amoeba/bin/launcher2018-01-02 23:34:21 [INFO] Project Name=Amoeba-MySQL, PID=48981 , starting... log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml 2018-01-02 23:34:22,152 INFOcontext.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45- mysql-amoeba-proxy-3.0.4-BETAlog4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf2018-01-02 23:34:22,520 INFOnet.ServerableConnectionManager - Server listening on /10.0.0.159:3306.#启动成功# ss -tanlpLISTE128 ::ffff:10.0.0.159:3306 :::*

    五测试:用另外的mysql客户端连接amoeba,测试时我暂停了主从同步,以便更直接的看出效果

    mysql -uroot -p123456-h20.0.0.159


    主库上新增一条数据

    从库上加入一条数据

    回到mysql连接的客户端验证:

    只能查看从库的数据,说明基本成功,进一步验证,在客户端插入一条数据

    并且客户端在从库上没有查询到新插入的数据,回到主库确认下:

    到此验证成功,开启主从同步即可实现读写分离(开始同步前,请自行清理掉有差异的数据,以便主从能正常运行)

    Amoeba实现数据库读写分离.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载