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服务。
  • 相关阅读:
    WPF 使用 Direct2D1 画图 绘制基本图形
    WPF 使用 Direct2D1 画图 绘制基本图形
    dot net core 使用 IPC 进程通信
    dot net core 使用 IPC 进程通信
    win2d 图片水印
    win2d 图片水印
    Java实现 LeetCode 240 搜索二维矩阵 II(二)
    PHP closedir() 函数
    PHP chroot() 函数
    PHP chdir() 函数
  • 原文地址:https://www.cnblogs.com/ningzijie/p/12637222.html
Copyright © 2011-2022 走看看