阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Amoeba实现MySQL数据库读写分离

163次阅读
没有评论

共计 3780 个字符,预计需要花费 10 分钟才能阅读完成。

一 环境以及软件版本:
系统: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.zip    jdk-7u80-linux-x64.rpm

2 安装 jdk

# yum -y install jdk-7u80-linux-x64.rpm
#  Java -version
    java 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 已经做好了主从同步,并且已经验证成功,需要做主从同步请看 http://www.linuxidc.com/Linux/2018-01/150060.htm)
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/launcher
        2018-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 INFO  context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-           mysql-amoeba-proxy-3.0.4-BETA
log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf
2018-01-02 23:34:22,520 INFO  net.ServerableConnectionManager - Server listening on /10.0.0.159:3306.
    # 启动成功

    # ss -tanlp
    LISTE    128     ::ffff:10.0.0.159:3306     :::*

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

#  mysql -uroot -p123456  -h10.0.0.159

Amoeba 实现 MySQL 数据库读写分离
主库上新增一条数据
Amoeba 实现 MySQL 数据库读写分离
从库上加入一条数据
Amoeba 实现 MySQL 数据库读写分离
回到 mysql 连接的客户端验证:
Amoeba 实现 MySQL 数据库读写分离
只能查看从库的数据,说明基本成功,进一步验证,在客户端插入一条数据
Amoeba 实现 MySQL 数据库读写分离
并且客户端在从库上没有查询到新插入的数据,回到主库确认下:
Amoeba 实现 MySQL 数据库读写分离

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

本文永久更新链接地址:http://www.linuxidc.com/Linux/2018-01/150059.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计3780字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中