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

[经验分享] MySQL5.6基于GTID同步复制,与如何实现MySQL负载均衡、读写分离。

[复制链接]

尚未签到

发表于 2018-9-27 10:30:48 | 显示全部楼层 |阅读模式
  MySQL想必大家都不陌生,之前文章也有介绍同步复制与半同步复制,今天先来了解下什么是GTID。

  GTID(global transaction>  特性:从服务器从主服务器复制过来的事务,GTID不变,也就是说一个事务在全局复制架构中的ID不变。
  有什么用:
  在MySQL集群中,当Master故障时,需要从Slave中挑选一个提升为Master可以基于GTID对比其他Slave来保证数据的一致性。
  MySQL主从同步如何配置数据过滤
  主服务器配置:
  Binlog-do-db   //指定要记录二进制日志的数据库
  Binlog-ignore-db  //指定要忽略记录二进制日志的数据库
  从服务器配置:
  Replicate-do-table=   //指定要记录二进制日志的表
  Replicate-ignore-table=  //指定要忽略记录二进制日志的表
  Replicate-do-db=  //指定要记录二进制日志的数据库
  Replicate-ignore-db=  //指定要忽略记录二进制日志的数据库
  Replicate-wild-do-table=  //指定要记录二进制日志的表(支持通配符)
  Replicate-wild-ignore-table=  //指定要忽略记录二进制日志的表(支持通配符)
  实验一、配置一个基于GTID的MySQL主从复制架构。
  实验环境:RHEL6.4+MySQL5.6
  Master:192.168.18.201 admin1.tuchao.com
  Slave: 192.168.18.202 admin2.tuchao.com
  安装和启动MySQL过程和之前都一样(略)
  Master配置:
  [mysqld]
  port            = 3306
  socket          = /tmp/mysql.sock
  skip-external-locking
  key_buffer_size = 256M
  max_allowed_packet = 1M
  table_open_cache = 256
  sort_buffer_size = 1M
  read_buffer_size = 1M
  read_rnd_buffer_size = 4M
  myisam_sort_buffer_size = 64M
  thread_cache_size = 8
  query_cache_size= 16M
  thread_concurrency = 2
  datadir=/mydata
  log-bin=mysql-bin
  innodb_file_per_table = 1
  binlog-format=ROW  //设置二进制日志格式
  log-slave-updates=true //是否记录从服务器同步数据动作
  gtid-mode=on //启用Gtid模式
  enforce-gtid-consistency=true //是否强制GTID的一致性
  master-info-repository=TABLE //master信息的记录位置
  relay-log-info-repository=TABLE //中继日志信息的记录位置
  sync-master-info=1
  slave-parallel-workers=2 //设置从服务器复制线程数
  binlog-checksum=CRC32 //设置binlog校验算法(循环冗余校验码)
  master-verify-checksum=1 //设置主服务器是否校验
  slave-sql-verify-checksum=1 //设置从服务器是否校验
  binlog-rows-query-log_events=1
  server-id       = 10
  report-port=3306
  report-host=admin1.tuchao.com //设置报告给哪台服务器,一般设置为本机的主机名。
  Slave配置:
  [mysqld]
  port            = 3306
  socket          = /tmp/mysql.sock
  skip-external-locking
  key_buffer_size = 256M
  max_allowed_packet = 1M
  table_open_cache = 256
  sort_buffer_size = 1M
  read_buffer_size = 1M
  read_rnd_buffer_size = 4M
  myisam_sort_buffer_size = 64M
  thread_cache_size = 8
  query_cache_size= 16M
  thread_concurrency = 2
  datadir=/data
  log-bin=mysql-bin
  innodb_file_per_table = 1
  binlog-format=ROW
  log-slave-updates=true
  gtid-mode=on
  enforce-gtid-consistency=true
  master-info-repository=TABLE
  relay-log-info-repository=TABLE
  sync-master-info=1
  slave-parallel-workers=2
  binlog-checksum=CRC32
  master-verify-checksum=1
  slave-sql-verify-checksum=1
  binlog-rows-query-log_events=1
  server-id       = 20
  report-port=3306
  report-host=admin2.tuchao.com
  其实master和slave配置几乎相同, 只需要修改几个参数我在上面用红色字体做了标记,如server-id ,report-host等。
  在Master上授权复制权限的用户


  •   grant replication slave,replication client on *.* to 'repluser'@'192.168.18.202'>
  启动slave复制线程

  •   change master to master_host='admin1.tuchao.com',master_user='repluser',master_password='123456',master_auto_position=1;
  •   start slave;
  查看警告信息

  •   Show warnings
  查看Slave状态

  •   show slave status\G
DSC0000.jpg

  这时我们在Master上创建一个tuchao数据库
DSC0001.jpg

  来到Slave查看
DSC0002.jpg

  同步成功!
  实验二、使用amoeba构建MySQL集群实现负载均衡,读写分离。
  我们在192.168.18.199这台主机部署amoeba由于是java程序,要先安装jdk,然后定义JAVA_HOME环境变量,导出PATH环境变量。(略)
  amoeba-mysql2.2 官网下载地址:
  http://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.2.x/
  创建需要的目录,创建链接,解压程序到目录。
  mkdir /usr/local/amoeba-mysql-2.2
  cd /usr/local
  ln -sv amoeba-mysql-2.2 amoeba
  tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba-mysql-2.2/
  导出PATH环境变量

  •   vim /etc/profile.d/amoeba.sh
  export AMOEBA_HOME=/usr/local/amoeba
  export PATH=$AMOEBA_HOME/bin:$PATH
  编辑 /usr/local/amoeba/conf/dbServers.xml
DSC0003.jpg

DSC0004.jpg

  编辑vim /usr/local/amoeba/conf/amoeba.xml
DSC0005.jpg

DSC0006.jpg

  配置完成后保存,启动amoeba。
  amoeba start
DSC0007.jpg

  连接amoeba
DSC0008.jpg

  创建数据库,创建表,然后用tcpdump在两个节点抓包,你会发现写操作都会转发到Master。
  执行select等语句凡是读操作,会发两个请求给Slave,一个给Master。
DSC0009.jpg

DSC00010.jpg

  tcpdump 命令简单介绍
  -i 指定网卡
  -s 指定报文的长度,s0表示抓整个包。
  -nn 不要解析主机名和端口名。
  -XX 显示报文内容十六进制码,ASCII,以太网头部。
  -vv 显示详细信息。
  -A  显示数据包里的ASCII
  -w  把内容导出到指定的文件中
  例子:
  tcpdump -i eth0 -s0 -nn -A tcp dst port 3306 and dst host 192.168.18.202
  tcpdump -i eth1 -s0 -nn -vv -A ip src 210.32.92.217 and tcp dst port 443
  还可以用src 指定源地址。
  这篇就写到这里了,大家自行抓包测试。


运维网声明 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-602690-1-1.html 上篇帖子: Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群 下篇帖子: 以MHA方式实现Mysql的高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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