amoeba

Amoeba和mysqlproxy对比

岁酱吖の 提交于 2019-12-10 14:35:30
Amoeba for mysql的优劣 2014-03-23 21:42:09 分类: MySQL 转载地址:http://baike.baidu.com/link?url=RSqbHpbctiA2tDMU3UhWOH302J3- Td8eNdsCiDJSJmu2KXbHcluIDrspPUaVlJGGgI78ArIU2gIaxXTTT0gbvq 概述 Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将 SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。 Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来 替代作者的实现。这个程序总体上比较符合KISS原则的思想。 优势 编辑 Amoeba主要解决以下问题: a). 数据切分后复杂数据源整合 b).

MySQL海量数据分布式存储

心不动则不痛 提交于 2019-12-08 18:09:06
 本文只是一个概念,具体配置太多,这里不做细节描述。   1、分布式应用的概念和优势   分布式数据库是指利用高速网络将物理上分散的多个数据 存储 单元连接起来组成一个逻辑上统一的数据库。分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获得更大的存储容量和更高的并发访问量。近年来,随着数据量的增长,分布式数据库技术也得到了快速的发展,传统的关系型数据库开始从集中式模型向分布式存储,从集中式计算走向分布式计算。   分布式数据库系统的主要目的是容灾、异地数据备份,并且通过就近访问原则,用户可以就近访问数据库节点,这样就实现了异地的负载均衡。同时,通过数据库之间的数据传输同步,可以分布式保持数据的一致性,这个过程完成了数据备份,异地存储数据在单点故障的时候不影响服务的访问,只需要将访问流量切换异地镜像就行。   分布式数据库应用的优势如下:   (1)适合分布式数据管理,能够有效提高系统性能。   (2)系统经济性和灵活性好。   (3)系统的可靠性和可用性强。   2、mysql分布式应用的主要技术   (1)mysql数据切割   数据切割(sharding)是指通过某种特定的条件,将存放在同一数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。数据切分还可以提高系统的总体可用性,因为单台crash之后

分库分表

99封情书 提交于 2019-12-07 08:38:23
分库分表前的问题 任何问题都是太大或者太小的问题,我们这里面对的数据量太大的问题。 用户请求量太大 因为单服务器TPS,内存,IO都是有限的。 解决方法:分散请求到多个服务器上; 其实用户请求和执行一个sql查询是本质是一样的,都是请求一个资源,只是用户请求还会经过网关,路由,http服务器等。 单库太大 单个数据库处理能力有限;单库所在服务器上磁盘空间不足;单库上操作的IO瓶颈 解决方法:切分成更多更小的库 单表太大 CRUD都成问题;索引膨胀,查询超时 解决方法:切分成多个数据集更小的表。 分库分表方法 分库分表有两个维度的分法:垂直拆分,水平拆分。 垂直拆分 垂直拆分是按列拆分,例如表有:a,b,c,d,e五列,垂直拆分时a,b,c拆成一个新表,d,e拆成一个新表。 垂直拆分分为:垂直分表和垂直分库。 在实践中通常按照下面两点拆分: 按照主要数据和扩展数据拆分。 按照功能或业务拆分。例如:把表中的User数据拆成一个新表,Product拆成一个新表。 水平拆分 水平拆分分为:水平分表和水平分库。 水平分库分表切分规则 RANGE:从0到10000一个表,10001到20000一个表; HASH取模:一个商场系统,一般都是将用户,订单作为主表,然后将和它们相关的作为附表,这样不会造成跨库事务之类的问题。 取用户id,然后hash取模,分配到不同的数据库上。 地理区域

分库分表

懵懂的女人 提交于 2019-12-06 16:52:23
分库分表前的问题 任何问题都是太大或者太小的问题,我们这里面对的数据量太大的问题。 用户请求量太大 因为单服务器TPS,内存,IO都是有限的。 解决方法:分散请求到多个服务器上; 其实用户请求和执行一个sql查询是本质是一样的,都是请求一个资源,只是用户请求还会经过网关,路由,http服务器等。 单库太大 单个数据库处理能力有限;单库所在服务器上磁盘空间不足;单库上操作的IO瓶颈 解决方法:切分成更多更小的库 单表太大 CRUD都成问题;索引膨胀,查询超时 解决方法:切分成多个数据集更小的表。 分库分表方法 分库分表有两个维度的分法:垂直拆分,水平拆分。 垂直拆分 垂直拆分是按列拆分,例如表有:a,b,c,d,e五列,垂直拆分时a,b,c拆成一个新表,d,e拆成一个新表。 垂直拆分分为:垂直分表和垂直分库。 在实践中通常按照下面两点拆分: 按照主要数据和扩展数据拆分。 按照功能或业务拆分。例如:把表中的User数据拆成一个新表,Product拆成一个新表。 水平拆分 水平拆分分为:水平分表和水平分库。 水平分库分表切分规则 RANGE:从0到10000一个表,10001到20000一个表; HASH取模:一个商场系统,一般都是将用户,订单作为主表,然后将和它们相关的作为附表,这样不会造成跨库事务之类的问题。 取用户id,然后hash取模,分配到不同的数据库上。 地理区域

MYSQL的主从复制、读写分离

最后都变了- 提交于 2019-12-04 11:28:21
4,在master,slave1,slave2上分别安装MySQL [root@master1 ~]# mkdir /abc ##创建挂载点 [root@master1 ~]# mount.cifs //192.168.100.1/LNMP-C7 /abc/ ##远程挂载 Password for root@//192.168.100.1/LNMP-C7: [root@master1 ~]# cd /abc/ [root@master1 abc]# ls mysql-5.5.24 [root@master1 abc]# tar zxvf mysql-5.5.24.tar.gz -C /opt/ ##解压 [root@master1 opt]# yum install -y \ > gcc gcc-c++ \ > ncurses \ > ncurese-devel \ ##控制终端屏幕显示的库 > bison \ ##语法分析 > make > cmake ##cmake工具 > libaio-devel ##系统调用来实现异步IO [root@slave1 opt]# useradd -s /sbin/nologin mysql ##添加不可登录的mysql用户 [root@slave1 opt]# cd /opt/mysql-5.5.24/ [root@slave1 mysql

MySQL主从复制与读写分离

十年热恋 提交于 2019-12-02 17:46:14
MySQL主从复制的类型 基于语句的复制(默认) 在主服务器上执行的语句,从服务器执行同样的语句 基于行的复制 把改变的内容复制到从服务器 混合类型的复制 一旦发现基于语句无法精确复制时,就会采用基于行的复制 主从复制的工作过程 MySQL读写分离原理 读写分离就是只在主服务器上写,只在从服务器上读 主数据库处理事务性查询,从而数据库处理select查询 数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库 实验环境 amoeba服务器(192.168.142.160) master服务器(192.168.142.151) slave1服务器 (192.168.142.163) slave2服务器 (192.168.142.145) client客户端 (192.168.142.143) 1,在master服务器上安装ntp时间服务器 [root@ameoba ~]# yum install ntp -y ##安装时间服务器 [root@master1 ~]# vim /etc/ntp.conf ##在server下添加 server 127.127.13.0 ##本地是时间源 fudge 127.127.13.0 stratum 8 ##设置时间层级为8 [root@master1 ~]# systemctl start ntpd ##启动时间服务 [root

在CentOS7上搭建MySQL主从复制与读写分离

强颜欢笑 提交于 2019-12-01 19:52:55
在 CentOS7上搭建MySQL主从复制与读写分离 MySQL主从复制原理 MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。 ( 1)MySQL支持复制的类型。 1)基于语句的复制。MySQL默认采用基于语句的复制,效率比较高。 2)基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。 3)混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。 ( 2)MySQL复制的工作过程如图所示。 1)在每个事务更新数据完成之前,Master在二进制日志记录这些改变。写入二进制日志完成后,Master通知存储引擎提交事务。 2)Slave将Master的Binary log复制到其中继日志。首先,Slave开始一个工作线程——I/O线程,I/O线程在Master上打开一个普通的链接,然后开始Binlog dump process。Binlog dump process从Master的二进制日志中读取事件,如果已经跟上Master,它会睡眠并等待Master产生新的事件。I/O线程将这些事件写入中继日志。 3)SQL slave thred(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新Slave的数据

amoeba 读写分离

二次信任 提交于 2019-12-01 13:40:27
实验环境: MySQL amoeba:192.168.200.116 MySQL-master:192.168.200.111 MySQL-slave1:192.168.200.112 MySQL-slave2:192.168.200.113 MySQL client:192.168.200.100 先实现MySQL数据库的主从复制,方法见上一篇。 1.安装Amoeba上安装java环境(推荐jdk1.5或1.6) [root@localhost ~]# ls amoeba-mysql-binary-2.2.0.tar.gz initial-setup-ks.cfg nohup.out anaconda-ks.cfg jdk-6u14-linux-x64.bin yum.sh [root@localhost ~]# chmod +x jdk-6u14-linux-x64.bin [root@localhost ~]# jdk-6u14-linux-x64.bin 一路空格,输入yes,回车完成 [root@localhost ~]# mv jdk1.6.0_14/ /usr/local/jdk1.6 [root@localhost ~]# vim /etc/profile 末行添加 export JAVA_HOME=/usr/local/jdk1.6 export

基于 amoeba 读写分离

喜夏-厌秋 提交于 2019-12-01 13:34:43
环境配置: MySQL Master IP: 192.168.200.111 MySQL Slave1 IP: 192.168.200.112 MySQL Slave2 IP: 192.168.200.113 MySQL Amoeba IP: 192.168.200.114 MySQL Client IP: 192.168.200.115 1、在主机Amoeba上安装java环境 因为Amoeba是基于jdk1.5版本开发的,所以官方推荐使用1.5或者1.6版本,高版本不建议使用。 [root@localhost ~]# chmod +x jdk-6u31-linux-x64.bin [root@localhost ~]# ./jdk-6u31-linux-x64.bin [root@localhost ~]# mv jdk1.6.0_31/ /usr/local/jdk1.6 [root@localhost ~]# vim /etc/profile export JAVA_HOME=/usr/local/jdk1.6 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin export

MySQL主从异步复制备份案例及Amoeba是实现读写分离

£可爱£侵袭症+ 提交于 2019-12-01 13:15:01
实验1 (MySQL主从异步复制备份案例)环境 一主两从 MySQL-master 192.168.200.111 MySQL-slave1 192.168.200.112 MySQL-slave2 192.168.200.113 所有服务器关闭防火墙 所有服务器安装 yum -y install mariadb mariadb-server systemctl start mariadb //启动mariadb 建立时间同步环境,在主服务器上安装配置NTP时间同步服务器 主: yum -y install ntpdate vim /etc/ntp.conf server 127.127.1.0 fudge 127.127.1.0 startum 8 systemctl start ntpd 修改配置文件: vim /etc/my.cnf [mysqld] server_id=1 log-bin=mysql-binlog log-slave-updates=true systemctl restart mariadb mysql 登录数据库 给从服务器授权 MariaDB [(none)]> grant replication slave on *.* to 'slave'@'192.168.200.%' identified by '123123'; MariaDB [(none