amoeba实现mysql主从读写分离_使用Amoeba实现MySQL的主从读写分离

前言:作者踏入Linux大门不久,这是第一个完成的功能演练。本文包含了MySQL+Amoeba实现主从读写分离的配置及个人过程中遇到的问题总结,网上相关教学也很多,如有错误和疏漏请多多指教。

主从同步架构的优点

读取工作交给了从服务器,降低了主服务器的压力

在从服务器进行备份,避免备份期间影响主服务器服务

当主服务器出现问题时,可以切换到从服务器。

Amoeba介绍

Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(s)之间,对客户端透明。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能。本次主要用到的就是Amoeba for Mysql这个软件。

7f4d78a4a29f3f0e14604c223a492d1e.png

MySQL的主从同步配置

实验环境

服务器类型:虚拟机

系统: CentOS release 6.8 (Final)

MySQL: 5.1.73

主数据库: 172.16.2.239

从数据库: 172.16.2.230

配置主库

本次操作使用yum服务进行安装,输入yum -y install mysql(注:-y 表示安装过程自动选择’y’)

service mysql start 启动MySQL服务

在root账户下使用 mysqladmin -u root password ‘newpassword’为mysql的root账户设置密码(注:首次登录root账号没有密码,直接回车进入,但没有设置密码无法进行很多操作)

mysql -u root -p 输入密码后登录

grant replication salve on *. * to ‘root’@’172.16.2.230’ identified by ‘123456’ (添加从库到本机同步的远程账号下,root是账号,ip为从库地址,123456为登录密码)

select user, host,password from mysql.user查看是否创建成功并查看有无账号密码为空的账户,并删除(注:这步不是必须,空账户的存在会影响登录,这是在遇到问题之前先进行排除)

vim /etc/my.cnf

11daa628f8a7e0a50f1bbfcf3aac8649.png

(server-id 不能与其它节点重复,replicate_ignore_db设置了不进行同步的databases)

退出MySQL,service mysqld restart重启后登录,查看server_id 以及 File+position信息并记录

220720d6fb20cb57b46a8b20c852f8d7.png

配置从库

在172.16.2.230上开始配置从库,安装过程参照主库(这里笔者使用的是默认数据库作为主从,所以直接用yum安装从库,如果主库有改动需要保持一致则使用dump备份并在从库节点上恢复的方式配置)

vim /etc/my.cnf 编辑配置文件

6e406c103edb70d8c1ea0553b4720e01.png

(注:这里的server-id一定不能与主库相同)

service mysqld restart重启数据库

mysql -u root -p -h 172.16.2.239验证连接主库(此处的root为在主库中授权过的账号)

退出远程连接,换为本地root账号登录,SHOW VARIABLES LIKE ‘server_id’查看ID号确认是否和主库重复

slave stop;关闭同步服务

change master to master_host=’172.16.2.239’, master_user=’root’, master_password=’123456’, master_log_file=’master_bin.000019’, master_log_pos=106;(注:此处的master_user为授权的账号,log_file和pos为之前主库上查看的记录,见上面第8步。如果在主库中在未同步的情况下使用过flush privileges命令刷新过数据库的话,log_file会自动+1)

slave star**t 打开同步,**show slave status查看状态

8d78986879293e8d440b69eba00d2267.png

这里主要注意的是Slave_IO_Running 和 shlave_SQL_Running是否为Yes,如果为NO,注意检查配置

检查完状态后可以在主库中的test库中建立一张表,写入完成后便能再从库中查看,同步完成

安装配置 Amoeba

1.配置Java环境

此处需要下载JDK,笔者图方便直接从yum上进行下载安装,yum -y install java-1.6.0-openjdk 这里使用的是1.6的版本。也可以直接使用wget 到Oracle上进行下载,只不过需要解压建立连接等操作。

vim /etv/profile 进行java环境变量的配置,注意下载方式不同,路径也不同

85b8b6ef735eee26e668f103e0fcc356.png

完成后执行source profile ,使用java -verison查看

2. 安装Amoeba

wget https://sourceforge.net/projects/amoeba/files/Amoeba_for_mysql/2.2.x/amoeba-mysql-binary-2.2.0.tar.gz/download

mkdir /usr/local/amoeba-2.2.0

tar xvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba-2.2.0

3.配置Amoeba

vim /usr/local/amoeba-2.2.0/conf/dbServers.xml

67a7e7cca0469994364fc0e56cb23d6b.png

port = 3306指的是主从数据库的端口号

schema = test指的是amoeba代理数据库的名称

user = root 以及 password 是amoeba登录主从服务器的账号密码,因此要注意这里的账户必须有访问两个数据库的权限才行

705755231cb9adf455d90ecb4cab16bd.png

这里的localhost指的是主库的代号,底下的ipAddress为主库地址

slave指的是从库的代号,底下的ipAddress为从库地址

轮询的主和从的读设置权重设置成1:3,这样就可以很好的解决主从不压力均衡的问题

vim /usr/local/amoeba-2.2.0/conf/amoeba.xml

0a5eba40bf2fcefc1c4ffe88b7f8d271.png

这里的8066端口为amoeba代理所监听的端口

user 和 password 是用来登录amoeba代理所使用的账号信息

f2c1a34a387858c0e91e56b568cebce4.png

LRUMapSize定义了Amoeba缓存的SQL语句解析条数

defaultPool配置了默认的节点,一些除了SELELCT/UPDATE/INSERT/DELETEDE的语句都会在上面执行

writePool配置了写库,通常就是主库

readPool配置了读库,可以为一个也可以是数据库池

这样Amoeba的配置就完成了(注:关于配置文件的参数意义在amoeba文档中有完整的解释)

接下来进行环境变量的配置,vim /etc/profile.d/amoeba.sh

export AMOEBA_HOME=/usr/local/amoeba-2.2.0/

export PATH=$AMOEBA_HOME/bin/:$PATH

4.启动Amoeba

执行amoeba start

The stack size specified is too small, Specify at least 160k

Could not create the Java virtual machine.

如果报以上错误,需编辑二进制脚本,因为JAVA启动对xss参数最小值有限制

vim /usr/local/amoeba-2.2.0/bin/amoeba

DEFAULT_OPTS=”-server -Xms256m -Xmx256m -Xss128k”

修改为如下

DEFAULT_OPTS=”-server -Xms256m -Xmx256m -Xss256k”

(注:如果启动失败要主要看有无 Amoeba Monitor Server shutdown completed!,如果没有请执行一遍amoeba stop)

5.连接amoeba

正常启动后连接amoeba数据库,mysql -u root -p -h 172.16.2.231 -P8066

7c1e4959236190f219ed099d2eb970ec.png

这就是正常启动后的提示信息,如果提示错误的话可能性很多,但大多数是网络(防火墙没关,主从数据库未启动等)、权限(主从数据库未提供amoeba账号权限等)以及配置的问题,多多阅读错误提示和日志能让你更快的定位到错误

c076d8830fc8c42106a33862c0917a5e.png

6.测试

测试的方法有很多种这里就不举例了,主要的思想是:

- 在amoeba上创建表,测试操作是否同步主从;

- 将从库的同步关闭slave stop,在amoeba上进行写操作看是否只有主库写入;在主从上分别插入一条数据,并在amoba上执行读操作看显示的数据等。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值