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

[经验分享] MySQL 高可用性keepalived+mysql

[复制链接]

尚未签到

发表于 2018-10-2 06:08:29 | 显示全部楼层 |阅读模式
  生产环境中一台mysql 主机存在单点故障,所以我们要确保 mysql 的高可用性,即两台 MySQL
  服务器如果其中有一台 MySQL 服务器挂掉后,另外一台能立马接替其进行工作。
  MySQL 的高可用方案一般有如下几种:
  keepalived+双主,MHA,PXC,MMM,Heartbeat+DRBD 等,比较常用的是 keepalived+双主, MHA 和 PXC。
  本节主要介绍了利用 keepalived 实现 MySQL 数据库的高可用。
  Keepalived+mysql 双主来实现MySQL-HA,我们必须保证两台MySQL 数据库的数据完全一样,基本思路是两台 MySQL 互为主从关系,通过 Keepalived 配置虚拟 IP,实现当其中的一台MySQL 数据库宕机后,应用能够自动切换到另外一台 MySQL 数据库,保证系统的高可用。拓扑环境
  OS:centos6.5 x86_64
  Mysql 版本:mysql 5.5.38
  Keepalived: keepalived-1.2.20 Mysql-vip:192.168.1.100 Mysql-master1:192.168.1.101 Mysql-master2:192.168.1.102
  一、配置两台 mysql 主主同步
DSC0000.jpg

  该过程的第一部分就是 master 记录二进制日志。在每个事务更新数据完成之前,master 在二日志记录这些改变。MySQL 将事务写入二进制日志。在事件写入二进制日志完成后,master通知存储引擎提交事务。
  下一步就是slave 将 master 的 binary log 拷贝到它自己的中继日志。首先,slave 开始一个工作线程——I/O 线程。I/O 线程在master 上打开一个普通的连接,然后开始 binlog dump process。Binlog  dump  process 从 master 的二进制日志中读取事件,如果已经同步了 master,它会睡眠并等待 master 产生新的事件。I/O 线程将这些事件写入中继日志。
  SQL slave thread(SQL 从线程)处理该过程的最后一步。SQL 线程从中继日志读取事件,并重放其中的事件而更新 slave 的数据,使其与 master 中的数据一致。只要该线程与 I/O 线程保持一致,中继日志通常会位于 OS 的缓存中,所以中继日志的开销很小。
  主主同步就是两台机器互为主的关系,在任何一台机器上写入都会同步。若 mysql 主机开启了防火墙,需要关闭防火墙或创建规则。
  1、修改 MySQL 配置文件
  两台 MySQL 均要开启 binlog 日志功能,开启方法:在 MySQL 配置文件[MySQLd]段中加上log-bin=MySQL-bin 选项,两台 MySQL 的 server-ID 不能一样,默认情况下两台 MySQL 的serverID 都是 1,需将其中一台修改为 2 即可。
  master1 中有关复制的配置如下:
  log-bin = mysql-bin binlog_format = mixed server-id = 1

  relay-log =>  relay-log-index = slave-relay-bin.index auto-increment-increment = 2
  auto-increment-offset = 1
  重启 mysqld 服务
  #service mysqld restart
  master2 中有关复制的配置如下:
  log-bin = mysql-bin binlog_format = mixed server-id = 2

  relay-log =>  relay-log-index = slave-relay-bin.index auto-increment-increment = 2
  auto-increment-offset = 2
  重启 mysqld 服务
  #service mysqld restart
  注:master1 和 master2 只有 server-id 不同和 auto-increment-offset 不同。
  mysql 中有自增长字段,在做数据库的主主同步时需要设置自增长的两个相关配置:
  auto_increment_offset 和 auto_increment_increment。
  auto-increment-increment 表示自增长字段每次递增的量,其默认值是 1。它的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为 2。
  auto-increment-offset 是用来设定数据库中自动增长的起点(即初始值),因为这两能服务器都设定了一次自动增长值 2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突,
  注:可以在 my.cnf 文件中添加“binlog_do_db=数据库名”配置项(可以添加多个)来指定要同步的数据库
  2、将 master1 设为 master2 的主服务器
  在 master1 主机上创建授权账户,允许在 master2(192.168.1.102)主机上连接
DSC0001.jpg

  查看 master1 的当前 binlog 状态信息
DSC0002.jpg

  在 master2 上将 master1 设为自已的主服务器并开启 slave 功能。
  设置防火墙:
DSC0003.jpg

  设置防火墙:
  #iptables I INPUT –p tcp –dport 3306 –j ACCEPT #service iptables save
  查看从的状态,mysql>show slave status\G;以下两个值必须为 yes,代表从服务器能正常连接主服务器
  能正常连接主服务器
  Slave_IO_Running:Yes
  Slave_SQL_Running:Yes
DSC0004.jpg

  3、将 master2 设为 master1 的主服务器
  在 master2 主机上创建授权账户,允许在 master1(192.168.1.101)主机上连接
DSC0005.jpg

  查看 master2 的当前 binlog 状态信息
DSC0006.jpg

  在 master1 上将 master2 设为自已的主服务器并开启 slave 功能。
DSC0007.jpg

  设置防火墙:
  #iptables I INPUT –p tcp –dport 3306 –j ACCEPT #service iptables save
  查看从的状态,以下两个值必须为 yes,代表从服务器能正常连接主服务器Slave_IO_Running:Yes
  Slave_SQL_Running:Yes
DSC0008.jpg

DSC0009.jpg

  4、测试主主同步
  在 master1 上创建要同步的数据库如 test_db,并在 test_db 中创建一张测试表如 tab1
DSC00010.jpg

  查看 master2 主机是否同步了 master1 上的数据变化
DSC00011.jpg

  从上图可以看出master2 同步了 master 的数据变化
  在 master2 主机上向 tab1 表中插入数据
DSC00012.jpg

  查看 master1 主机是否同步了 master2 上的数据变化
DSC00013.jpg

  现在任何一台MySQL 上更新数据都会同步到另一台MySQL,MySQL 同步完成。
  注:若主 MYSQL 服务器已经存在,只是后期才搭建从 MYSQL 服务器,在置配数据同步前应先将主 MYSQL 服务器的要同步的数据库拷贝到从 MYSQL 服务器上(如先在主 MYSQL 上备份数据库,再用备份在从MYSQL 服务器上恢复)
  下面我们就完成keepalived 的高可用性。
  keepalived 是集群管理中保证集群高可用的一个软件解决方案,其功能类似于 heartbeat,用来防止单点故障
  keepalived 是以 VRRP 协议为实现基础的,VRRP 全称 Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
  虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将 N 台提供相同功能的路由器组成一个路由器组,这个组里面有一个 master 和多个 backup,master 上面有一个对外提供服务的 vip,master 会发组播(组播地址为 224.0.0.18),当 backup 收不到 vrrp 包时就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master。这样的话就可以保证路由器的高可用了。
  keepalived 主要有三个模块,分别是 core 、check 和 vrrp。core 模块为 keepalived 的核心, 负责主进程的启动、维护以及全局配置文件的加载和解析。check 负责健康检查,包括常见的各种检查方式。vrrp 模块是来实现 VRRP 协议的。
  二、keepalived 的安装配置
  1、在 master1 和 master2 上安装软件包 keepalived
  安装 keepalived 软件包与服务控制
  在编译安装 Keepalived 之前,必须先安装内核开发包 kernel-devel 以及 openssl-devel、popt-devel 等支持库。
  若没有安装则通过rpm 或yum 工具进行安装编译安装 Keepalived



运维网声明 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.iyunv.com/thread-607269-1-1.html 上篇帖子: MySQL 5.7 坑爹参数 下篇帖子: MYSQL调优常用的方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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