基于amoeba实现mysql数据库的读写分离/负载均衡
更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn)
一、Amoeba的简述:[来自百度百科]
# 解压JDK软件到/usr/local目录下 [root@centos tmp]# tar -xf jdk-7u15-linux-x64.tar.gz -C /usr/local/ # 进入相应目录,并建立java目录 [root@centos tmp]# cd /usr/local/ [root@centos local]# mkdir java # 将解压出来的内容移到java目录 [root@centos local]# mv jdk1.7.0_15/* java # 设置java环境变量 [root@centos local]# echo 'export JAVA_HOME=/usr/local/java' >> ~/.bashrc [root@centos local]# . ~/.bashrc # 测试jdk是否正确安装 [root@centos local]# java -version # ******************************* # 以下这个方法设置JDK[在下面设置amoeba时,会覆盖,所以这里的配置文件,以最下面amoeba的配置为准] [root@centos java]# echo $JAVA_HOME [root@centos java]# vim /etc/profile # 在末尾添加 export JAVA_HOME=/usr/locla/java export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH [root@centos java]# source /etc/profile # *******************************
[root@centos java]# cd /tmp/ # 建立相应amoeba目录 [root@centos tmp]# mkdir /usr/local/amoeba # 将压缩包解压到指定目录 [root@centos tmp]# tar -xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba [root@centos tmp]# cd /usr/local/amoeba/ [root@centos amoeba]# cd conf/ # 准备修改配置文件 #/* 以下部分为注解 #/* Amoeba总共有7个配置文件,分别如下: #/* Amoeba主配置文件($AMOEBA_HOME/conf/amoeba.xml),用来配置Amoeba服务的基本参数,如Amoeba主机地址、端口、认证方式、用于连接的用户名、密码、线程数、超时时间、其他配置文件的位置等。 #/* 数据库服务器配置文件($AMOEBA_HOME/conf/dbServers.xml),用来存储和配置Amoeba所代理的数据库服务器的信息,如:主机IP、端口、用户名、密码等。 #/* 切分规则配置文件($AMOEBA_HOME/conf/rule.xml),用来配置切分规则。 #/* 数据库函数配置文件($AMOEBA_HOME/conf/functionMap.xml),用来配置数据库函数的处理方法,Amoeba将使用该配置文件中的方法解析数据库函数。 #/* 切分规则函数配置文件($AMOEBA_HOME/conf/ruleFunctionMap.xml),用来配置切分规则中使用的用户自定义函数的处理方法。 #/* 访问规则配置文件($AMOEBA_HOME/conf/access_list.conf),用来授权或禁止某些服务器IP访问Amoeba。 #/* 日志规格配置文件($AMOEBA_HOME/conf/log4j.xml),用来配置Amoeba输出日志的级别和方式。 # 配置后端mysql 服务器连接[dbServer.xml] [root@centos conf]# vim dbServers.xml .........................(省略)<dbServer name="abstractServer" abstractive="true"><factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory"><property name="manager">${defaultManager}</property><property name="sendBufferSize">64</property><property name="receiveBufferSize">128</property> # 设置 mysql 数据库的端口<!-- mysql port --><property name="port">3306</property> # 设置缺省的数据库,当连接amoeba时,操作表必须显式的指定数据库名,即采用dbname.tablename的方式, # 不支持 use dbname指定缺省库,因为操作会调度到各个后端dbserver<!-- mysql schema --><property name="schema">kongzhong</property># 设置amoeba连接后端数据库服务器的账号和密码,需在后端数据库器上创建该用户,并授权amoeba连接<!-- mysql user --><property name="user">kongzhong123</property><!-- mysql password --><property name="password">kongzhong123</property></factoryConfig><poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool"># 最大连接数[默认]<property name="maxActive">500</property># 最大空闲连接数[默认]<property name="maxIdle">500</property><property name="minIdle">10</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># 设置一个后端的dbServer,名为master ,这个可以随便取,但是为了明确其含义,最好给予特殊含义的单词,这里是主DB SERVER<dbServer name="master" parent="abstractServer"><factoryConfig># 设置这台DB server 的ip地址<!-- mysql ip --><property name="ipAddress">192.168.1.102</property></factoryConfig></dbServer> # 再设置一台后端mysql数据库,这里叫slave,名字需要唯一[这里可以创建N个后端数据库,只要复制下面<dbServer>...</dbServer>]<dbServer name="slave" parent="abstractServer"><factoryConfig> # 设置这台DB server 的ip地址<!-- mysql ip --><property name="ipAddress">192.168.1.100</property></factoryConfig></dbServer> # 指定一个虚拟的dbServer,将上面定义的dbserver加入这个虚拟的dbserver,相当于组成一个组[这里我们将读的数据库组成一个组] # 这里 需要将 name="mul..." 改成自己想要取的名字,这个名字也需要有含义,后面会用到<dbServer name="ReadPool" virtual="true"><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 --> # 负载均衡,slave1,slave2当成2个服务器进行调度,这模拟量加权的调度算法。 # 注意这里使用的dbserver必须是已经定义了的,可以写多个,如slave1,slave2<property name="poolNames">slave</property></poolConfig></dbServer> </amoeba:dbServers>
[root@centos conf]# vim amoeba.xml .........................(省略)<proxy><!-- service class must implements com.meidusa.amoeba.service.Service --><service name="Amoeba for Mysql" class="com.meidusa.amoeba.net.ServerableConnectionManager"><!-- port --># 设置amoeba监听的端口(这里如果默认,后面测试需要指定端口,就是这里的端口)<property name="port">3306</property><!-- bind ipAddress --><!--# 设置监听的接口,如果不设置,则监听所有的IP[选择默认]<property name="ipAddress">127.0.0.1</property>--> .........................(省略)<property name="authenticator"><bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator"> # 提供客户端连接amoeba时需要使用这里设定的账号 (这里的账号密码和amoeba连接后端数据库服务器的密码无关)<property name="user">kongzhong</property> # 提供客户端连接amoeba时需要使用这里设定的密码<property name="password">kongzhong</property><property name="filter"><bean class="com.meidusa.amoeba.server.IPAccessController"><property name="ipFile">${amoeba.home}/conf/access_list.conf</property></bean></property></bean></property></service> .........................(省略)<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><property name="defaultPool">master</property><!-- --> # 把默认注释掉的读写分离选项,把注释去掉并readpool修改成ReadPool(这个名字,我们前面在dbServer.xml里设置一个读数据库组,这里是作为只读池)<property name="writePool">master</property><property name="readPool">ReadPool</property><property name="needParse">true</property></queryRouter>
[root@centos conf]# vim /etc/profile JAVA_HOME=/usr/locla/java AMOEBA_HOME=/usr/local/amoeba export PATH=$PATH:$AMOEBA_HOME/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin [root@centos conf]# source /etc/profile
# 如果确认能够正常启动,就加>>/dev/null 否则还是看一下提示信息 [root@centos conf]# amoeba start & >>/dev/null # 检测启动情况 [root@centos conf]# netstat -tulnp |grep java # 停止amoeba测试指令是否可用 [root@centos conf]# amoeba stop
# 建立配置文件指定的数据库 mysql> create database kongzhong; mysql> use kongzhong # 创建用于测试的表 mysql> create table t1(name varchar(10)); # 插入测试数据 mysql> insert into t1 values('102'); # 授予amoeba用户连接数据库的权限 mysql> grant all privileges on kongzhong.* to 'kongzhong123'@'192.168.1.104' identified by 'kongzhong123'; mysql> flush privileges;
# 建立配置文件指定的数据库 mysql> create database kongzhong; mysql> use kongzhong # 创建用于测试的表 mysql> create table t1(name varchar(10)); # 插入测试数据 mysql> insert into t1 values('100'); # 授予amoeba用户连接数据库的权限 mysql> grant all privileges on kongzhong.* to 'kongzhong123'@'192.168.1.104' identified by 'kongzhong123'; mysql> flush privileges;
# 登陆相应数据库,查询当前所在数据库(相应大家都应该懂的,就不详细演示了) [root@client102 ~]# mysql -ukongzhong -p -h192.168.1.104 [root@client100 ~]# mysql -ukongzhong -p -h192.168.1.104 [root@client104 ~]# mysql -ukongzhong -p -h192.168.1.104
The stack size specified is too small, Specify at least 160k Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. 解决方法: [root@centos bin]# cd /usr/local/amoeba/ # 修改配置文件 [root@centos amoeba]# vim bin/amoeba 将下面这行 DEFAULT_OPTS="-server -Xms1024m -Xmx1024m -Xss128k" 修改为: DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"
Error: JAVA_HOME environment variable is not set. 解决方法: [root@centos local]# echo 'export JAVA_HOME=/usr/local/java' >> ~/.bashrc [root@centos local]# . ~/.bashrc
[root@centos conf]# vim log4j.xml [此文件在amoeba目录下的conf目录下] 修改log4j.xml 取消日志文件生成(太大了,磁盘很容易满) <param name="file" value="${amoeba.home}/logs/project.log"/> 改成 <param name="file" value="<![CDATA[${amoeba.home}/logs/project.log>/dev/null]]>"/>
[root@centos amoeba]# vim bin/amoeba DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k" 改成 DEFAULT_OPTS="-server -Xms512m -Xmx512m -Xmn100m -Xss1204k"
转载于:https://blog.51cto.com/634871/1335129
基于amoeba实现mysql数据库的读写分离/负载均衡相关推荐
- 徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离?
徐无忌MySQL笔记:案例实战:如何实现MySQL数据库的读写分离? 完成:第一遍 1.理想的主从架构实现的效果是怎样的? 主库负责所有读写操作,从库只实现对主库备份功能,这样的主从架构性价比是很低的 ...
- MySQL数据库集群实现负载均衡的安装配置详解
本文我们详细地介绍了MySQL 5.0数据库集群负载均衡的安装配置工作,希望能够对您有所帮助. 本文我们主要介绍了MySQL数据库集群实现负载均衡的安装配置工作,接下来我们就让我们一起来了解一下这部分 ...
- 【MySQL】Spring Boot项目基于Sharding-JDBC和MySQL主从复制实现读写分离(8千字详细教程)
目录 前言 一. 介绍 二. 主从复制 1. 原理 2. 克隆从机 3. 克隆从机大坑 4. 远程登陆 5. 主机配置 6. 从机配置 7. 主机:建立账户并授权 8. 从机:配置需要复制的主机 9. ...
- linux企业实战 --MySQL数据库之读写分离
文章目录 1. MySQL读写分离 2. MySQL-proxy实现读写分离 1. MySQL读写分离 Mysql的主从复制和Mysql的读写分离两者有着紧密联系. 首先部署主从复制,只有主从复制完了 ...
- MySQL数据库:读写分离
一.读写分离的原理: 1.实现原理: 读写分离解决的是,数据库的写操作,影响了查询的效率,适用于读远大于写的场景.读写分离的实现基础是主从复制,主数据库利用主从复制将自身数据的改变同步到从数据库集群中 ...
- amoeba实现mysql主从读写分离_利用Amoeba实现MySQL主从复制和读写分离
在实际生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是完全不能满足实际需求的,因此,一般来说都是通过主从复制(Master-Slave) ...
- MySQL数据库mycat读写分离
mycat读写分离 Mycat的读写分离是建立在Mysq的主从复制的基础上的 修改配置文件 schema.xml <?xml version="1.0"?> <! ...
- Mysql数据库的读写分离
读写分离,即在主数据库中进行写操作(也可以进行增.删.改操作),在从数据库中进行读操作.在正常情况下,我们对主数据库进行的是增.删.改.查操作,数据库的写入时间比较长,而查询时间短,所以为了提高数据库 ...
- Atlas实现MySQL数据库的读写分离
在实现了mysql的主从配置后,博主这里准备实现一下mysql的读写分离 这里我选择的是360团队的Atlas作为代理当然还可以使用mycat,one proxy,proxySQL等等开源的中间件,有 ...
最新文章
- Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境
- JQ用变量关联input name
- android 模拟飞行,安卓版模拟飞行 X Plane 9试玩
- 【Python】我的Pandas学习经历及动手实践
- POJ 3186Treats for the Cows(区间DP)
- MySQL 事务 :ACID、并发带来的问题、事务的隔离级别、事务的实现
- WindowsServer 2008 Ad建立ftp隔离用户
- 这8种保证线程安全的技术你都知道吗?
- RefreshLayout刷新组件,有详细注释适合使用和中高端学习
- Business Connectivity Services 团队博客简介
- 在ASP.NET中如何添加过滤器
- 3.2 Tensorflow基础运算
- 涂鸦板制作教程——其中的重做和撤消我觉得不错
- matlab四宫格画图_Matlab绘图初级教程
- 20210219 plecs为不同的PWM 配置不同的死区时间
- 无线系列-无线通信频段与电波传播
- 整人网页html语言网站,html愚人节整人一直弹的网页窗口怎么做?
- 反向传播算法的直观理解
- linux分析rna-seq,RNA-seq 分析流程(一)linux部分
- win10系统设置番茄家园开机音乐以及关机音乐(亲测有效)
热门文章
- 【python】面向对象的封装、继承、多态的练习题
- 如何使用JMeter发送Post请求
- Linux下dd查看磁盘的读写性能
- 初学者,学习vue应该从何下手?
- 7-3 sdut-求两个整数之和(I)
- Linux启动syslog进程,linux – 使用systemd启动的进程正在记录到/ var / log / syslog和/var/log/daemon.log...
- using在sql中是什么意思_扇贝英语地道表达法——“call for”是什么意思呢?
- Linux中w r x数学代码,Linux bc命令实现数学计算器
- c语言程序排奇数,十个数奇数升序排列偶数降序排列,用C语言程序表示
- 视频播放器+android,Android视频播放器