zoukankan      html  css  js  c++  java
  • 通过Amoeba实现mysql集群的读写分离

    一.介绍

    Q1:什么是Amoeba?

    Amoeba是mysql的代理应用,可以用Amoeba来灵活的代理mysql或mysql集群,客户端直接访问Amoeba服务就能访问到它所代理的mysql数据库了,访问方式是用mysql指令远程访问。

    Q2:Amoeba能实现什么功能?

    1.mysql集群的读写分离
    2.mysql集群的负载均衡
    3.mysql集群的数据切片

    Q3: 搭建Amoeba重点关注是什么?

    搞懂Amoeba的重点是搞懂三个配置文件:dbserver.xmlamoeba.xmlrule.xml
    1. dbserver.xml是用来告知Amoeba,需要被代理的mysql服务有哪些,配置这些mysql服务的ip地址、端口、登录帐号与密码等,然后还可定义多个mysql成一个集群,与集群轮转方式;
    2. amoeba.xml是Amoeba的主配置文件,用来配置Amoeba的登录帐号、密码、端口号,和配置读服务器或读服务器集群、写服务器或写服务器集群;
    3. rule.xml是用来配置数据切片。


    二.源码包搭建Amoeba读写分离

    Amoeba代理Mysql读写分离,架构图
    客户


    web应用程序,游戏程序(c,php,java.......)客户端
    |
    |
    代理层(Amoeba) 读写分离/数据切分
    |
    |
    mysql主 <----> mysql从*2

    安装前准备

    1. amoeba-mysql-binary-2.2.0.tar.gz
    2. jdk-8u161-linux-x64.tar.gz
    3. 3台mysql服务器,并做一主二从
    4. 1台用来搭建Amoeba的linux
    5. 1台用来测试的Linux

    搭建过程
    第一步:还是事前准备
    1.主机名三步,互相绑定
    2.时间同步
    3.关闭iptables,selinux
    4. 配置好yum
    5. 静态ip地址

    第二步:安装Java
    因为Amoeba是用Java语言开发的,所以需要Java环境

    1.安装jdk1.8版本,tar包源码包,解压即能用

    [root@node1 ~]# ls
    amoeba-mysql-binary-2.2.0.tar.gz jdk-8u161-linux-x64.tar.gz
    [root@node1 ~]# tar xf jdk-8u161-linux-x64.tar.gz -C /usr/local
    [root@node1 ~]# cd /usr/local/
    [root@node1 local]# mv ./jdk1.8.0_161/ ./java   
    
    

    验证一下刚解压安装的的jdk版本

    [root@node1 local]# /usr/local/java/bin/java -version
    java version "1.8.0_161"
    Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
    

    第三步:安装amoeba软件

    1.将源码包解压至新建的目录

    [root@node1 ~]# mkdir /usr/local/amoeba
    [root@node1 ~]# tar xf /root/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
    [root@node1 ~]# ls /usr/local/amoeba/
    benchmark  bin  changelogs.txt  conf  lib  LICENSE.txt  README.html
    

    关注下面二个目录
    bin 是启动脚本目录
    conf 是配置文件目录
    配置文件目录里我们要关注有三个文件:
    amoeba.xml--配置amoeba的全局配置文件
    dbServers.xml --配置amoeba连接mysql数据库的文件
    rule.xml--配置我们数据切分的文件

    1. 开始配置amoeba连接mysql数据库
      2.1. 先修改dbserver.xml,配置mysql参数
    [root@node1 ~]# vim /usr/local/amoeba/conf/dbServers.xml 
    19                         <!-- mysql port 指定登录mysql的端口-->
    20                         <property name="port">3306</property>
    21 
    22                         <!-- mysql schema 指定访问的库,这里先填测试库-->
    23                         <property name="schema">test</property>
    24 
    25                         <!-- mysql user --指定登录用户名>
    26                         <property name="user">aa</property>
    27                         <!-- 指定登录密码-->
    28                         <property name="password">111</property>
    ...
    ...
    
     44         <dbServer name="server1"  parent="abstractServer">  --定义server1
    45                 <factoryConfig>
    46                         <!-- mysql ip -->
    47                         <property name="ipAddress">1.1.1.5</property> --mysql服务器的ip地址
    48                 </factoryConfig>
    49         </dbServer>
    50 
    51         <dbServer name="server2"  parent="abstractServer">  --定义server2
    52                 <factoryConfig>
    53                         <!-- mysql ip -->
    54                         <property name="ipAddress">1.1.1.6</property> --mysql服务器地址
    55                 </factoryConfig>
    56         </dbServer>
    57 
    58         <dbServer name="server3"  parent="abstractServer">  --定义server3
    59                 <factoryConfig>
    60                         <!-- mysql ip -->
    61                         <property name="ipAddress">1.1.1.7</property>  --mysql服务器ip地址
    62                 </factoryConfig>
    63         </dbServer>     
    64                         
    65         <dbServer name="multiPool" virtual="true">  --定义集群
    66                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
    67                         <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
    68                         <property name="loadbalance">1</property>
    69                    
    70                         <!--server2、server3定义为集群multpool,它们为从服务器,等会儿把他们作为读服务-->
    71                         <property name="poolNames">server2,server3</property> 
    72                 </poolConfig>
    73         </dbServer>
    
    
    

    保存退出

    2.2. 配置amoeba.xml

    [root@node1 ~]# vim /usr/local/amoeba/conf/amoeba.xml 
     11   <property name="port">8066</property> --指定登录amoeba的端口号
     30   <property name="user">amoeba</property> --指定登录amoeba用户名
     32   <property name="password">123</property> --指定登录amoeba密码
    <!--去掉注释-->
    118                 <property name="writePool">server1</property> --指定server1为写服务器
    119                 <property name="readPool">multiPool</property> --指定multPool为读集群
    
    

    保存退出

    1. 修改amoeba启动文件

    启动文件/usr/local/amoeba/bin/amoeba 是需要jdk的支持才能启动,下面我们配置启动文件指定访问jdk

    [root@node1 ~]# vim /usr/local/amoeba/bin/amoeba
     13 JAVA_HOME=/usr/local/java
     14 PATH=$PATH:$JAVA_HOME/bin
     15 export JAVA_HOME PATH
     ...
     ...
     62 DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss228k" --在62行把 Xss128k 改成228k,因启动时要求最低内存是228k 
    

    注:
    -Xms256m --分配256m物理内存给amoeba软件用,连接数据库时初始化内存就要256m
    -Xmx256m --这个是amoeba软件最大可用的物理内存,(32位的JDK最大只能是2G,64位的JDK无限制但不能大于本机的物理内存大小)
    -Xss128k --默认是128k,但amoeba软件要求是228k,这个启动amoeba软件就要228k的内存

    1. 再使用nohup方法启动Amoeba服务
    nohup /usr/lcoal/amoeba/bin/amoeba start &
    

    --这个启动方法把启动的信息写进nohup.out文件里,并在后台运行。建议用这种方法,方便我们排错。
    停止服务的方法:nohup /usr/local/amoeba/bin/amoeba start &


    第三步:在客户端测试

    客户端需要安装有mysql,使用mysql命令连接Amoeba服务器登陆测试

    mysql -uamoeba -p123321 -h1.1.1.7
    mysql>
    
    1. 如果有主从复制,则关闭;
    2. 在Amoeba服务器的测试库插入一条数据,查看server1会有这条数据,server2、server3没有这条数据,用amoeba查询也没有这条数据;
    3. 如果测试结果是这样的话,那就说明安装成功了;
    4. 然后停止amoeba服务,进入amoeba.xml把测试库改成真正想要读写分离的库,删除测试库,开启主从复制;
    5. 开启amoeba服务。
  • 相关阅读:
    js json字符串与json对象互相转换(最全)
    eclipse 离线安装SVN插件(支持eclipse201909)
    eclipse maven项目如何将所有的jar包复制到lib目录下?
    windows/tomcat 修改java虚拟机JVM以utf-8字符集加载class文件的两种方式
    eclipse 设置所有文件编码为UTF-8(最全)
    控制程序的启动数量(限制游戏多开)
    POJ 1719 Shooting Contest(二分图匹配)
    微信企业号开发:消息类型与差别
    Android
    SSI(Server Side Include)简单介绍
  • 原文地址:https://www.cnblogs.com/ningzijie/p/12637222.html
Copyright © 2011-2022 走看看