设为首页 收藏本站
查看: 1931|回复: 0

[经验分享] Mysql主从同步 读写分离

[复制链接]

尚未签到

发表于 2018-10-7 11:34:30 | 显示全部楼层 |阅读模式
  Mysql主从同步 读写分离
  目录
  一.概述4
  二. 实验目的4
  三.试验环境4
  四. 方案说明4
  五.Mysql主从同步配置5
  1. 安装与初始化数据库5
  2. 主从服务器均授予MySQL远程登录权限。5
  3. 主从同步配置5
  六.Amoeba读写分离配置13
  1. Amoeba下载安装13
  2. 安装Java13
  3. 修改amoeba的配置文件amoeba.xml和dbServers.xml的配置。14
  4. 启动amoeba进行测试。20
  七.读写分离测试。21
  1. 写测试21
  2. 读测试24
  一.概述
  Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。
二. 实验目的
  实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。通过主从同步(Master-Slave)的方式来同步数据,再通过读写分离(amobe)来提升数据库的并发负载能力。
  部署MySQL主从同步与读写分离,同时可以使我们真正的了解其内部工作原理,更好的认识安畅云数据库,快速定位故障并及时解决,为客户提供更专业的IT服务。
三.试验环境
  设备名称
  管理IP
  操作系统
  用途
  Slave1
  172.16.200.82
  Centos 6.5 64bit
  Mysql5.1.73
  Slave2
  172.16.200.80
  Centos 6.5 64bit
  Mysql5.1.73
  amoeba-mysql-master
  172.16.200.81
  Centos 6.5 64bit
  Amobe 3.0.5 Mysql5.1.73
  初始配置:关闭防火墙或将3306与8066添加例外,关闭Selinux。
四. 方案说明
  本方案为利用amobe实现mysql数据库读写分离,提升数据库并发负载能力,同时配置mysql主从同步,增加数据库安全性和高可用性能。
五.Mysql主从同步配置
1. 安装与初始化数据库
  主从服务器均安装MySQL,并设置开机自启动。
  Yum install mysql mysql-devel mysql-server
  /etc/init.d/mysqld start
  Chkcofig mysqld on
  分别设置MySQL数据库密码为123.com
  mysqladmin -u root password "123.com"
  注:
  所有机器的MySQL数据库密码要相同,amoeba配置要求。
2. 主从服务器均授予MySQL远程登录权限。
  mysql> grant all privileges on *.* to  root@"172.16.200.%"  identified by "123.com";
  mysql> flush privileges;
  注:
  我这里为配置简单,将root用户开启远程登录,在生产环境中建议新建MySQL用户并设置相关的登录权限。例如:限制源IP,允许访问的库文件等。
3. 主从同步配置
  (1). 在amoeba-mysql-master上创建数据库文件
  相关操作命令如下:
  create database 数据库名称;               //创建数据库
  Use 数据库;                             //改变所使用的数据库
  create table 表名称(字段名称 数据类型);//创建表
  description 表名称;                       //查看表结构
  select 字段 from 表;                    //数据库查询
DSC0000.png

  查看amoeba-mysql-master目前数据库列表文件是否创建成功
DSC0001.png

  (2). 分别修改主从服务器的MySQL配置文件对新建数据库master_test文件进行同步。
  修改amoeba-mysql-master服务器的/etc/my.cnf文件配置如下:
  [mysqld]
  datadir=/var/lib/mysql
  socket=/var/lib/mysql/mysql.sock
  user=mysql
  log-bin=mysql-bin   #打开mysql二进制日志
  server-id=1     #设置mysql_id,主从不能相同
  binlog-do-db=master_test   #设置二进制日志记录的库
  binlog-ignore-db=mysql   ##设置二进制日志不记录的库
  sync_binlog=1
  symbolic-links=0
  # Disabling symbolic-links is recommended to prevent assorted security risks
  [mysqld_safe]
  log-error=/var/log/mysqld.log
  pid-file=/var/run/mysqld/mysqld.pid
DSC0002.png

  修改slave1服务器/etc/my.cnf配置如下:
  [mysqld]
  datadir=/var/lib/mysql
  socket=/var/lib/mysql/mysql.sock
  user=mysql
  log-bin=mysql-bin
  server-id=2
  master-user=root
  master-host=172.16.200.81
  master-password=123.com
  master-port=3306
  # Disabling symbolic-links is recommended to prevent assorted security risks
  symbolic-links=0
  [mysqld_safe]
  log-error=/var/log/mysqld.log
  pid-file=/var/run/mysqld/mysqld.pid
DSC0003.png

  修改slave1服务器/etc/my.cnf配置如下:
  [mysqld]
  datadir=/var/lib/mysql
  socket=/var/lib/mysql/mysql.sock
  user=mysql
  log-bin=mysql-bin
  server-id=3
  master-user=root
  master-host=172.16.200.81
  master-password=123.com
  master-port=3306
  # Disabling symbolic-links is recommended to prevent assorted security risks
  symbolic-links=0
  [mysqld_safe]
  log-error=/var/log/mysqld.log
  pid-file=/var/run/mysqld/mysqld.pid
DSC0004.png

  注:MySQL主与MySQL从服务器server-id 不能相同,MySQL主的ID为1,其他从服务器的ID均未1以下,保证不相同即可。
  (2). 进行数据同步
  将amoeba-mysql-master服务器MySQL数据master_test数据库打包分别copy到从服务器MySQL数据目录/var/lib/mysql/下,并进行解压。拷贝打包好的数据可以使用scp命令。
  scp master_test.tar.gz root@172.16.200.82:/var/lib/mysql/
  scp master_test.tar.gz root@172.16.200.83:/var/lib/mysql/
  数据解压完成分别登录主从服务器查看数据库主从同步状态
  首先查看master服务器状态
  mysql> show master status;
DSC0005.png

  其次查看slave1和slave2的状态。分别如下:
  mysql> show slave status \G
  Slave1状态如下:
DSC0006.png

  Slave2状态如下:
DSC0007.png

  (3). 主从同步测试
  在amoeba-mysql-master服务器的MySQL新建数据库文件master_test数据口中新建表tongbu进行测试。
DSC0008.png

DSC0009.png

  测试数据库同步配置已完成。
六.Amoeba读写分离配置
1. Amoeba下载安装
  登陆amoeba官网下载相应的版本https://sourceforge.net/projects/amoeba/files/,我这里下载的是amoeba-mysql-3.0.5-RC-distribution.zip。
  将下载好的amoeba解压至相应的目录并修改相应的名称,我这里讲amoeba解压到了当前用户目录下,并更名为amoeba-mysql-3.0.5-RC,
DSC00010.png

  至此amoeba安装完成,后面根据需要进行配置文件修改即可。
2. 安装Java
  因为amoeba为java语言开发,所以需要安装jdk运行环境。我们使用yum安装jdk1.6
  yum list available java* (查看java安装包)
DSC00011.png

  yum install java-1.6.0-openjdk(这里安装java1.6)
  配置环境变量:
  java路径为/usr/bin/java, 编辑amoeba  bin/下的启动程序launcher(3.0以上版本)或者amoeba(3.0以下版本)添加如下变量JAVA_HOME=/usr。
3. 修改amoeba的配置文件amoeba.xml和dbServers.xml的配置。
  (1). 修改后的amoeba.xml的配置文件如下:
  
  
  
  

  
  8066  #服务端口
  
  172.16.200.81 #主机地址(amoeba)
  
  
  128
  64
  
  
  
  
  root #(amoeba的用户名)
  root #(amoeba的密码)
  
  
  ${amoeba.home}/conf/access_list.conf
  
  
  
  
  
  

  
  utf8
  
  60
  
  
  
  
  
  com.meidusa.toolkit.net.AuthingableConnectionManager
  
  
  
  
  ${amoeba.home}/conf/dbServers.xml
  
  
  
  
  ${amoeba.home}/conf/rule.xml
  ${amoeba.home}/conf/ruleFunctionMap.xml
  
  
  ${amoeba.home}/conf/functionMap.xml
  1500
  write
  write
  read
  true
  
  
  注:对于amoeba.xml配置需要注意修改的地方,主要是管理IP地址和amoeba的服务管理方式截图如下:
DSC00012.png

  确认池名称要与dbServer.xml中的名称相同
DSC00013.png

  (2). 修改后的dbServers.xml的配置文件如下:
  
  
  
  
  
  
  ${defaultManager}
  64
  128
  
  3306 #mysql服务端口
  
  master_test #需要做读写分离的库文件
  
  root #MySQL用户名
  123.com #MySQL密码
  
  
  500
  500
  10
  600000
  600000
  true
  true
  true
  
  
    #命令dbServer
  
  
  172.16.200.81 #dbServer 管理IP(主)
  
  
  
  
  
  172.16.200.82 #dbServer 管理IP(从)
  
  
  
  
  
  172.16.200.80 #dbServer 管理IP(从)
  
  
    #write是一个虚拟的数据库的写节点
  
  
  1
  
  server1
  
  
   #read是一个虚拟的数据库的读节点
  
  
  1
  
  server3,server2 #负载轮询设置
  
  
  
  注:dbServers.xml需要的配置包括数据库的端口、用户名、密码、进行读写分离的库文件和读写地址池,已经轮询设置。
  MySQL的主从服务器密码最好设置相同。
DSC00014.png

  定义server1为master,server2和server3为slave
DSC00015.png

  定义write为server1,read为server2、server3所在pool的数据库轮训规则,支持轮训、权重、HA,所在pool的数据库服务器,多台配置已”, ”隔开。server2,server3为轮训方式工作,默认从server1到server3,也可以重复添加比如server1,server2,server3,server3,这样server3在查询中被链接2次。写的服务器也可以不用添加到读的pool,这样就实现server1写,server2,3读。
  地址池中的write和read要与dbServer.xml中设置的池名称相同
DSC00016.png

  至此amoeba全部配置完成。启动测试。
4. 启动amoeba进行测试。
  进入amoeba的文件路径下的bin/目录,执行./launcher(3.0版本)即可。
DSC00017.png

  在从服务器上连接amoeba测试:
  命令如下mysql -u root -p -h 172.16.200.81 -P 8066  (登录输入的密码为amoeba的密码)
DSC00018.png

七.读写分离测试。
1. 写测试
  使用另外一台安装了MySQL客户端服务器的主机远程连接amoeba服务并在master_test库中创建 write_test表文件,并插入write_wangzx数据测试数据的的写入库。(此操作前需要将主从同步停止,更能直观反映文件写入是访问的是mysql-master服务器)
  (1). 通过远程amoeba服务创建write_test表文件。
  [root@i-d5g65b9d ~]# mysql -u root -p -h 172.16.200.81 -P 8066
  密码为amoeba.xml配置文件中设置的密码
DSC00019.png

  (2). 停止MySQL的主从同步(该操作需要在从服务器上操作即可)。相关操作命令如下:
  STOP SLAVE IO_THREAD;      #停止IO进程
  STOP SLAVE SQL_THREAD;     #停止SQL进程
  STOP SLAVE;                             #停止IO和SQL进程
DSC00020.png

  启动主从同步命令如下:(补充说明)
  START SLAVE IO_THREAD;    #启动IO进程
  START SLAVE SQL_THREAD;  #启动SQL进程
  START SLAVE;                             #启动IO和SQL进程
  (3). 在远程MySQL的服务器上使用master_test库中创建 write_test表文件,并插入write_wangzx相关数据数据,(1,'wangzx','master');。
  mysql>  insert into write_test values(1,'wangzx','master');
DSC00021.png

  分别登录主从服务器的MySQL查看上图新建数据是否存在。
  主服务器查看的数据信息如下图:
DSC00022.png

  两台从服务器查看到的信息如下:
  Slave1信息如下;
DSC00023.png

  Slave2信息如下;
DSC00024.png

  从以上信息判断,数据写入的库文件写入到了MySQL主服务器。
  2. 读测试
  (1). 分别登录到两台从服务器
  使用master_test库中创建 write_test表文件,并分别插入write_wangzx相关数据数据,(1,'wangzx','slave1');和(1,'wangzx','slave2'); 。
  mysql> insert into write_test values(1,'wangzx','slave1');
DSC00025.png

  mysql> insert into write_test values(1,'wangzx','slave2');
DSC00026.png

  (2).测试数据的读取以及amoeba的轮询。
  通过远程连接到amoeba查看读取的数据表信息,通过表信息查看轮询主机。
  输入mysql> select * from write_test;查看相关表信息,将命令连续操作两次,查看到表信息不同,并且未读取到主服务器表信息,说明读取数据时只在从服务器上进行读取,并且能实现从服务器轮询读取数据,实现负载功能。
DSC00027.png



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-614288-1-1.html 上篇帖子: mysql 5.7基于组提交,group commit 下篇帖子: 二进制安装mysql|mariadb
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表