技术标签: 数据库
在做体系结构作业时,需要实现一个大数据量,对响应速度要求比较高的网站,类似于淘宝。需要使用分布式数据库,负载均衡和读写分离技术。我经过搜索,发现开源的amoeba非常轻便好用。而且是淘宝的某个大牛研发的,支持国产哈哈!主要是中文文档看上去很方便,而且文档写得也挺清晰详细的,易上手。
1.准备环境
电脑必须已安装并配置好jdk。目前Amoeba经验证在JavaTM SE 1.5和Java SE 1.6能正常运行,(可能包括其他未经验证的版本),文档上是这么说,不过我用的是最新的jdk1.8也是完全可行的。所以1.5版本之后应该都是可以的。本文所使用操作系统为Windows7 64位,amoeba版本为2.2.0,anoeba所在服务器ip为192.168.1.102,后端数据库为mysql-5.6.24,两台MySQL数据库所在服务器ip分别为127.0.0.1和192.168.1.104。
2.下载安装
到此网址下载amoeba:http://sourceforge.net/projects/amoeba/files/,下载后是压缩包形式,在电脑目录中创建一个文件夹命名为amoeba,将压缩包解压到此文件夹中,解压后的文件如下图所示:
3.启动amoeba
打开cmd,进入amoeba的bin目录,运行输入命令amoeba
如果看到:amoeba start|stop 就代表安装成功了(注意:如果是amoeba 3.0及3.0以上的版本,输入此命令会显示不存在该命令,因为3.0的版本的命令不是amoeba,而是launcher。我这里的版本是amoeba 2.0,所以可以用amoeba命令。)
#/* 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]
配置amoeba中的dbServer.xml(后端mysql 服务器连接配置)
打开conf文件夹下的dbServer.xml,需要更改的有以下几个地方:
1.设置abstractserver,里面定义了要代理的mysql服务器的用户名和密码(密码遮住不给你们看啦!)
2.添加两个dbServer,继承自abstractserver,一个代表主数据库,一个代表从数据库。
3.配置数据库池。
dbServer.xml配置完毕。
4. 配置 Amoeba 监听端口[amoeba.xml]
配置监听IP,登录账户和密码(密码不给看)
读写分离配置:
amoeba.xml配置完毕。
5. 配置 Amoeba 插入规则[rule.xml]
rule.xml配置完毕。
三、amoeba启动与读写分离测试
1.启动amoeba:
首先,确认对被代理的Mysql数据库拥有有远程登录权限,没有的话通过以下命令赋予权限:(密码设置的123)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.102' IDENTIFIED BY '123' WITH GRANT OPTION;
在命令行中进入当前目录,输入amoeba start启动amoeba。
2.新开一个命令行,输入以下命令登录>mysql -uroot -h 192.168.1.102 -P8066 -p,密码是123,如果可以正常登录,则amoeba配置成功。
3.分别在两台后端数据库服务器的test数据库中新建一个test表,插入不同数据,这里分别插入的是100,101和102,在登录amoeba的命令提示符中输入
insert into test.test (id) values (100);
insert into test.test (id) values (101);
insert into test.test (id) values (102);
插入3次,发现第一次插入了master服务器的数据库表,第二次插入了slave服务器的数据库表,第三次又插入了master的数据库表。id为偶数插入master,id为奇数插入slave,与我们之前在rule.xml中配置的一致。
插入之后,再输入语句:
select * from test.test;
会出现100,101,102,所有服务器中数据库里数据。
所以之前插入的三条数据虽然被分片到了不同的数据库节点,但Amoeba的合并工作使得它们看起来像在一个库里,也因此可见Amoeba对客户端的透明。.
文章浏览阅读591次。爱贝支付nodejs实现,完整的代码,复制即可执行总结几个小坑:1. 使用私钥进行签名的问题,爱贝支付的签名规则是采用RSA MD5数字签名算法,私钥签名、公钥验签 所以本案例中用的是 nodejs 的 crypto 模块// 签名crypto.createSign('md5WithRSAEncryption');//验签crypto.createVerify('..._export const generatesign = (signstr) => { let sign = crypto.createsign('md5
文章浏览阅读1.5w次,点赞46次,收藏59次。#include <stdio.h>#include <malloc.h>int main(){ char *str= (char *)malloc(20*sizeof(char)); scanf_s("%s", str); printf("%s\n",str);} 在使用VS2017时,应编译器要求需使用更加安全的..._vs2017写入位置时发生访问冲突
文章浏览阅读118次。#include<stdlib.h>#include<stdio.h>#include<time.h>#define ROW 4#define LINE 4//这个数组为 全局数组--全局数组可以被该文件内任意函数调用//调用的前提--出现在任何函数之前int array_2048[ROW][LINE] = { 0 };//现在设定一个函数,功能是设置某个位置的随机值void position()//随机产生4或2{ int i..._2048游戏的实现用c语言studying one
文章浏览阅读479次,点赞6次,收藏8次。1.1 研究背景近些年,随着中国经济发展,人民的生活质量逐渐提高,对网络的依赖性越来越高,通过网络处理的事务越来越多。随着宿舍管理的常态化,如果依然采用传统的管理方式,将会为工作人员带来庞大的工作量,这将是一个巨大考验,需要投入大量人力开展对宿舍管理等相关工作进行管理,单一且反复的操作容易出错且不易被察觉,工作人员对此风险并不能完全归避。利用现代信息技术,设计开发一款宿舍管理系统,能够极大的节省人力物力、提高工作效率、降低工作成本。1.2研究目的及意义。
文章浏览阅读94次。孤岛营救问题Time Limit:1 SecMemory Limit:128 MBDescription1944年,特种兵麦克接到国防部的命令。要求马上赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩。瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图。迷宫的外形是一个长方形,其南北方向被划分为 N行,东西方向被划分为 M列,于是整个迷宫被划分为 N×M...
文章浏览阅读685次。DataFrame:读取和执行查询都会返回DataFrame,是一个由ROW 对象组成的RDD,附带包括每列数据类型的结构信息。ROW对象是支队基本数据类型的数组的封装。 ROW对象:表示DataFrame中的记录。本质是一个定长的字段数组。Spark将RDD转换成DataFrame的两种方式一、通过反射指定结构类型 通过反射的方式来推断RDD元素中的元数据。因为RDD本身一条数据本身是没有元数_spark java rdd转dataframe
文章浏览阅读69次。活着,为了什么?陈老师这样问我们。许久,我都没找到答案。整天沉醉与周公与网络的世界。一天又一天,早已忘却时间与烦恼。你说,举杯消愁。你说,明天再来。可我,明明习惯了自己的世界,为何心中总有些不安与惶恐。是体弱多病的爷爷奶奶,还是年少童真的小妹,亦或是整日奔劳在外的父母。那份期待,那份盼望,那份心安与放下。。。路,是自己选的,如何...
文章浏览阅读871次。这道题打开ida又是那么一大堆一大堆的函数,也没有外部引用的段,所以就是静态链接把好多函数都链接进来了所以就和 BUU上另一道 inndy_rop 一样,直接用ROPgadget 去找rop链 from struct import pack # Padding goes here p = '' p += pack('<I', 0x0806e82a) # pop edx ..._mo77.tup/501
文章浏览阅读54次。市场需要CMMI的认证,我们现在要开始做CMMI 了。大概的过程,就在《CMMI 的认证流程、时间段、预备、费用》中有一些简短的介绍。从这个文章,大家可以知道一些步骤,制定一个预算。有人也提到过,在那篇文章里的费用可能太高了。我知道有很多单位可以用更少的费用,就成功通过评估,达到某一个CMMI的级别。这个在中国很普遍。但是我不希望大家这样做。短期、低成本通过认证应该是符合...
文章浏览阅读1.9k次。这几天在使用bootstrap框架的插件时突然忘记了jQuery文件时怎么导入的,接下来就详细讲解以下导入过程。_如何导入bootstrap的css和js文件、jquery文件
文章浏览阅读4.2k次,点赞2次,收藏26次。参考文章:http://blog.ncmem.com/wordpress/2023/09/27/java%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e5%92%8c%e4%b8%8b%e8%bd%bd%e7%9a%84%e6%96%b9%e6%b3%95%e8%af%a6%e8%a7%a3/编写文件上传的方法, 通过MultipartFile类型的参数即可接收上传的文件, 方法形参的名称需要与页面的file域的name属性一致。_用java实现文件的上传下载
文章浏览阅读95次。以下是我看MySQL官方文档的时候整理的笔记,仅作参考保留。RANGE,LIST分区管理1:为未分区表创建分区ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;2:删除某个分区的数据ALTER TABLE tr DROP PARTITION p2;3:为分区表添加一个分区ALTE..._mysql分区权限