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

来源:互联网 发布:个人发卡平台源码 编辑:程序博客网 时间:2024/05/19 02:02

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

主从同步架构的优点

  • 读取工作交给了从服务器,降低了主服务器的压力
  • 在从服务器进行备份,避免备份期间影响主服务器服务
  • 当主服务器出现问题时,可以切换到从服务器。

Amoeba介绍

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

Amoeba for Mysql主从分离模式

MySQL的主从同步配置

实验环境

  • 服务器类型:虚拟机
  • 系统: CentOS release 6.8 (Final)
  • MySQL: 5.1.73
  • 主数据库: 172.16.2.239
  • 从数据库: 172.16.2.230

配置主库

  1. 本次操作使用yum服务进行安装,输入yum -y install mysql(注:-y 表示安装过程自动选择’y’)
  2. service mysql start 启动MySQL服务
  3. 在root账户下使用 mysqladmin -u root password ‘newpassword’为mysql的root账户设置密码(注:首次登录root账号没有密码,直接回车进入,但没有设置密码无法进行很多操作)
  4. mysql -u root -p 输入密码后登录
  5. grant replication salve on *. * to ‘root’@’172.16.2.230’ identified by ‘123456’ (添加从库到本机同步的远程账号下,root是账号,ip为从库地址,123456为登录密码)
  6. select user, host,password from mysql.user查看是否创建成功并查看有无账号密码为空的账户,并删除(注:这步不是必须,空账户的存在会影响登录,这是在遇到问题之前先进行排除)
  7. vim /etc/my.cnf
    my.cnf内容
    (server-id 不能与其它节点重复,replicate_ignore_db设置了不进行同步的databases)
  8. 退出MySQL,service mysqld restart重启后登录,查看server_id 以及 File+position信息并记录
    master status

配置从库

  1. 在172.16.2.230上开始配置从库,安装过程参照主库(这里笔者使用的是默认数据库作为主从,所以直接用yum安装从库,如果主库有改动需要保持一致则使用dump备份并在从库节点上恢复的方式配置)
  2. vim /etc/my.cnf 编辑配置文件
    从库配置
    (注:这里的server-id一定不能与主库相同)
  3. service mysqld restart重启数据库
  4. mysql -u root -p -h 172.16.2.239验证连接主库(此处的root为在主库中授权过的账号)
  5. 退出远程连接,换为本地root账号登录,SHOW VARIABLES LIKE ‘server_id’查看ID号确认是否和主库重复
  6. slave stop;关闭同步服务
  7. 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)
  8. slave star**t 打开同步,**show slave status查看状态
    同步状态
    这里主要注意的是Slave_IO_Running 和 shlave_SQL_Running是否为Yes,如果为NO,注意检查配置
  9. 检查完状态后可以在主库中的test库中建立一张表,写入完成后便能再从库中查看,同步完成

安装配置 Amoeba

1.配置JAVA环境

此处需要下载JDK,笔者图方便直接从yum上进行下载安装,yum -y install java-1.6.0-openjdk 这里使用的是1.6的版本。也可以直接使用wget 到oracle上进行下载,只不过需要解压建立连接等操作。
vim /etv/profile 进行java环境变量的配置,注意下载方式不同,路径也不同
环境变量
完成后执行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/downloadmkdir /usr/local/amoeba-2.2.0tar 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
这里写图片描述

  • port = 3306指的是主从数据库的端口号
  • schema = test指的是amoeba代理数据库的名称
  • user = root 以及 password 是amoeba登录主从服务器的账号密码,因此要注意这里的账户必须有访问两个数据库的权限才行

这里写图片描述

  • 这里的localhost指的是主库的代号,底下的ipAddress为主库地址
  • slave指的是从库的代号,底下的ipAddress为从库地址
  • 轮询的主和从的读设置权重设置成1:3,这样就可以很好的解决主从不压力均衡的问题

vim /usr/local/amoeba-2.2.0/conf/amoeba.xml
这里写图片描述

  • 这里的8066端口为amoeba代理所监听的端口
  • user 和 password 是用来登录amoeba代理所使用的账号信息

这里写图片描述

  • 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

这里写图片描述

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

这里写图片描述

6.测试

测试的方法有很多种这里就不举例了,主要的思想是:
- 在amoeba上创建表,测试操作是否同步主从;
- 将从库的同步关闭slave stop,在amoeba上进行写操作看是否只有主库写入;在主从上分别插入一条数据,并在amoba上执行读操作看显示的数据等。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 六角龙尾巴烂了怎么办 兰花长出来的包怎么办 长寿花花开败了怎么办 手机分期0首付怎么办办 办分期手机掉了怎么办 手机办分期被骗了怎么办 办手机分期年龄不够怎么办 信美分期没额度怎么办 家里人不给我钱怎么办 商场租金收不上来怎么办 魅蓝2电池坏了怎么办 格力空调不制冷怎么办 空调外机不好放怎么办 美的空调显示e3怎么办 发现安装空调条码被撕怎么办 删除了国美安装码怎么办 海信空调保修卡丢了怎么办 海尔空调保修卡丢了怎么办 科龙空调不制冷怎么办 魅族s6屏幕碎了怎么办 格力空调化霜怎么办 一开空调就跳闸怎么办 洗衣机顶盖的安全开关损坏怎么办 苹果平板电脑拍照坏了怎么办 苹果hom键不灵了怎么办 平板电脑home键发烫怎么办 华为平板无法输入资料怎么办 安卓平板没声音怎么办? 平果手机充不了电怎么办 苹果6s用电太快怎么办 平板充不起电了怎么办 日本买的电器国内售后怎么办 海淘地址试投不成功怎么办 怀孕了吐得厉害怎么办 玩网页游戏好卡怎么办 网页游戏占cpu高怎么办 微信有余额绑定其他名下怎么办 银行卡绑定支付余额不对怎么办 可乐机不制冷了怎么办 被淘宝卖家威胁怎么办 征信不好想贷款怎么办