Amoeba是什么?
Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发,它位于与Client、DBServer(s)之间,对客户端透明。具有 负载均衡、高可用性、SQL过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果 。
通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能,目前Amoeba已在很多 企业的生产线上面使用。
分布式数据库代理的相关概念
Amoeba在分布式数据库领域将致力解决数据切分,应付客户端“集中式”处理分布式数据。这里集中式是一个相对概念,客户端不需要知道某种数据的物理存储地。避免这种逻辑出现在业务端,大大简化了客户端操作分布式数据的复杂程度。
分布式数据库系统的优点:
降低费用 。分布式数据库在地理上可以式分布的。其系统的结构符合这种分布的要求。允许用户在自己的本地录用、查询、维护等操作,实行局部控制,降低通信代价,避免集中式需要更高要求的硬件设备。而且分布式数据库在单台机器上面数据量较少,其响应速度明显提升。
提高系统整体可用性。避免了因为单台数据库的故障而造成全部瘫痪的后果。
易于扩展处理能力和系统规模。分布式数据库系统的结构可以很容易地扩展系统,在分布式数据库中增加一个新的节点,不影响现有系统的正常运行。这种方式比扩大集中式系统要灵活经济。在集中式系统中扩大系统和系统升级,由于有硬件不兼容和软件改变困难等缺点,升级的代价常常是昂贵和不可行的。
Amoeba不能做什么?
目前还不支持事务
暂时不支持存储过程(近期会支持)
不适合从amoeba导数据的场景或者对大数据量查询的query并不合适(比如一次请求返回10w以上甚至更多数据的场合)
暂时不支持分库分表,amoeba目前只做到分数据库实例,每个被切分的节点需要保持库表结构一致
需求案例:
有三个数据库节点分别命名为Master、Slave1、Slave2如下:
Master: Master (只写)
Slaves:Slave1、Slave2 (2个平等的数据库。只读/负载均衡)
案例实现Master、Slaves之间数据库主从复制、读写分离,负载均衡的高可用Mysql架构。
实验架构图:
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
系统环境:
主机 操作系统 IP地址 软件包
amoeba服务器 CentOS 7.0 x86_64 192.168.100.4 jdk-6u14-linux-x64.bin、amoeba-mysql-binary-2.2.0.tar.gz
Master服务器 CentOS 7.0 x86_64 192.168.100.5 mysql-5.5.24.tar.gz
Slave1服务器 CentOS 7.0 x86_64 192.168.100.6 mysql-5.5.24.tar.gz
Slave2服务器 CentOS 7.0 x86_64 192.168.100.7 mysql-5.5.24.tar.gz
客户端 CentOS 7.0 x86_64 192.168.100.3 mysql
软件包:百度网盘 密码:iikf
开始部署:
一般情况下,我们的集群为内网环境,无法和外网进行联网同步时间,那么这里我们使Slaves服务器与Master服务器进行时间同步。
一 、Master服务器同步时间
1.修改ntp.conf配置文件
vim /etc/ntp.conf
#本地是时钟源
server 127.127.100.0
#设置时间层级为8(限制在15内)
fudge 127.127.100.0 stratum 8
2.启动ntpd服务
service ntpd start
3.关闭防火墙及selinux
service iptables stop
setenforce 0
Slave1、Slave2服务器同步时间
1.启动ntpd服务
service ntpd start
2.关闭防火墙及selinux
service iptables stop
setenforce 0
3.进行时间同步
/usr/sbin/ntpdate 192.168.100.4
二、Master、Slave1、Slave2 分别安装mysql数据库
1.安装 gcc 、 gcc-c++ 、make、cmake ncurses-devel、bison、libaio-devel的软件包
yum install gcc gcc-c++ make cmake ncurses-devel bisonlibaio-devel -y
2.mysql软件包解压至/opt目录下
tar zxvf mysql-5.5.24.tar.gz -C /opt/
3.创建mysql用户
useradd -s /sbin/nologin mysql
4.创建mysql目录
mkdir /usr/local/mysql
5.进入mysql目录进行软件包安装
cd /opt/mysql-5.5.24
#配置mysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_EXTRA_CHARSETS=all
-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_MEMORY_STORAGE_ENGINE=1
-DWITH_READLINE=1
-DENABLED_LOCAL_INFILE=1
-DMYSQL_DATADIR=/home/mysql
-DMYSQL_USER=mysql
-DMYSQL_TCP_PORT=3306
6.编译及安装(时间比较长)
make & make install
7.修改mysql目录的属主、属组信息
chown -R mysql.mysql /usr/local/mysql
8.添加mysql的环境变量
vi /etc/profile
export PATH=$PATH:/usr/local/mysql/bin/
9.更新环境变量
source /etc/profile
10.复制mysql默认配置文件及启动脚本
cp /opt/mysql-5.5.24/support-files/my-medium.cnf /etc/my.cnf
cp /opt/mysql-5.5.24/support-files/mysql.server /etc/init.d/mysqld
11.修改mysqld启动脚本执行权限
chmod 755 /etc/init.d/mysqld
12.添加至启动项并init3/5自动启动mysql服务
chkconfig --add /etc/init.d/mysqld
chkconfig mysqld --level 35 on
13.初始化mysql数据库
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
14.建立软连接
ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock
15.配置mysqld中的mysql安装路径及数据目录路径
vi /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/home/mysql
16.启动mysql服务
service mysqld start
17.修改mysql管理员(root)用户的密码
mysqladmin -u root password 'pwd123'
18.登录mysql测试
mysql -uroot -p pwd123
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
19.关闭防火墙及selinux
service iptables stop
setenforce 0
特别提醒:以上三台mysql服务器安装步骤一样
三、mysql主从服务器
Master主服务器配置
1.修改my.cnf
vim /etc/my.cnf
server-id = 1 #修改id号
log-bin=master-bin #新增,主服务器日志文件
log-slave-updates=true #新增,从服务器更新二进制日志
2.重启mysql服务
service mysqld restart
3.登录mysql
mysql -u root -p
4.为Slaves从服务器同步创建用户
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.100.%' IDENTIFIED BY '123456';
5.以上修改直接生效
FLUSH PRIVILEGES;
6.查看master状态信息
show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000002 | 339 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Slave1从服务器配置
1.修改my.cnf
vim /etc/my.cnf
server-id = 11 #修改id号
relay-log=relay-log-bin #新增,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index #新增,定义relay-log的位置和名称
2.重启mysql服务
service mysqld restart
3.登录mysql
mysql -u root -p
4.添加向主服务器同步数据命令
change master to master_host='192.168.100.5',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=339;
5.开启slave从服务器
start slave;
6.查看slave状态
show slave status\G;
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
注意:Slave_IO_Running和Slave_SQL_Running状态都为‘Yes’,复制状态正常。
Slave2从服务器配置
1.修改my.cnf
vim /etc/my.cnf
server-id = 12 #修改id号
relay-log=relay-log-bin #新增,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index #新增,定义relay-log的位置和名称
2.重启mysql服务
service mysqld restart
3.登录mysql
mysql -u root -p
4.添加向主服务器同步数据命令
change master to master_host='192.168.100.5',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=339;
5.开启slave从服务器
start slave;
6.查看slave状态
show slave status\G;
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
注意:Slave_IO_Running和Slave_SQL_Running状态都为‘Yes’,复制状态正常。
7.验证主从同步
在Master主服务器上创建数据库:
create database db_test;
分别查看Slave从服务器上数据库:
show databases;
四、amoeba服务器
1.关闭防火墙及selinux
service iptables stop
setenforce 0
2.复制jdk包及安装
cp jdk-6u14-linux-x64.bin /usr/local/
./jdk-6u14-linux-x64.bin # yes 按enter
3.修改jdk目录名称
mv jdk1.6.0_14/ /usr/local/jdk1.6
4.添加jdk、jre、amoeba环境变量
vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
5.刷新环境变量
source /etc/profile
6.创建amoeba目录
mkdir /usr/local/amoeba
7.解压amoeba软件包至/usr/local/amoeba目录下
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
8.修改amoebab目录权限
chmod -R 755 /usr/local/amoeba/
9.验证amoeba是否安装成功
/usr/local/amoeba/bin/amoeba
#显示amoeba start|stop说明安装成功
10.分别在三台mysql上添加权限提供给amoeba访问
10.1 登录mysql
mysql -u root -p abc123
10.2 为amoeba授权访问
grant all on *.* to amoeba@'192.168.100.%' identified by '123123';
11.回到amoeba服务器,修改其配置文件
cd /usr/local/amoeba/conf
12.编辑amoeba.xml配置文件
vim amoeba.xml
---30行--
----32行---------
---117-去掉注释-
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
13.修改dbServers.xml配置文件
vi dbServers.xml
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
67
68
69
70
71
14.启动amoeba服务
/usr/local/amoeba/bin/amoeba start&
15.查看java服务
netstat -anpt | grep java
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
五、客户端
1.安装mysql软件
yum install -y mysql
2.登录amoeba服务器
mysql -u amoeba -p123456 -h 192.168.100.4 -P8066
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
3.关闭防火墙及selinux
service iptables stop
setenforce 0
六、客户端测试访问
一、验证主从复制
1.在Master服务器上创建表
mysql -u root -p
create database db_test;
use db_test;
create table zang (id int(10),name varchar(10),address varchar(20));
2.Master服务器上:
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
3.Slave1服务器上:
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
4.Slave2服务器上:
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
二、验证读写分离
1.分别在两台Slave1、Slave2从服务器上关闭同步
stop slave;
2.在客户端上插入记录,不会同步到从服务器
insert into zang values('1','zhang','this_is_master');
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
3.Slave1从服务器上插入记录
use db_test;
insert into zang values('2','zhang','this_is_slave1');
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
4.Slave2从服务器上插入记录
use db_test;
insert into zang values('3','zhang','this_is_slave2');
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
5.在客户端上测试----第一次会向从服务器Slave1 读数据-第二次会从服务器Slave2读取
#多次执行该sql语句查看
use db_test;
select * from zang;
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)
三、验证负载均衡
1.在客户端上反复执行查询语句,已经轮询访问slave1、slave2服务器了
select * from zang;
Amoeba搭建Mysql集群(实现Mysql主从复制、读写分离、负载均衡)0daybank
文章评论