mysql Keepalived 实践
Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived可以用来防止服务器单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,通过配合Nginx可以实现web前端服务的高可用。
Keepalived实现的基础是VRRP协议,Keepalived就是巧用VRRP协议来实现高可用性(HA)的.
VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。
VRRP协议使用多播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地址发送数据而不是自身网卡的MAC地址,VRRP运行时只有MASTER路由器定时发送VRRP通告信息,表示MASTER工作正常以及虚拟路由器IP(组),BACKUP只接收VRRP数据,不发送数据,如果一定时间内没有接收到MASTER的通告信息,各BACKUP将宣告自己成为MASTER,发送通告信息,重新进行MASTER选举状态。
1.解压源代码包(解压缩到 /usr/src/)
  tar zxvf keepalived-1.2.18.tar.gz -C /usr/src/
2.源代码安装(在解压缩目录下)
  (1)./configure
  (2)make
  (3)make install
3.用源代码包生成rpm包
  (1)生成keepalived.spec文件及Makefile文件夹
     ./configure
  (2)构建rpm包
     rpmbuild ~
     cp keepalived.spec ~/rpmbuild/SPECS/
     cp keepalived-1.2.18.tar.gz ~/rpmbuild/SOURCES/
  (3)进入 cd ~/rpmbuild/SPECS/  目录   
  (4)编译源码并生成rpm包
     rpmbuild -bb keepalived.spec
     构建完成后在 /root/rpmbuild/RPMS/x86_64目录下可以找到 
4.安装rpm包
  rpm -ivh keepalived-1.2.18-5.x86_64.rpm
----------------搭建mysql HA----------------------
1.关闭防火墙
  service iptables stop
2.将 SELinux 在 Enforcing 与 permissive 之间切换与查看(切换成permissive)
[root@www ~]# setenforce 0 
[root@www ~]# getenforce Permissive 
[root@www ~]# setenforce 1 
[root@www ~]# getenforce Enforcing
3.配置好相应的mysql replication 后登陆mysql(a机器为 197  b机器为165)
  A机器:
   GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.2.10.165' IDENTIFIED BY '123456';
   flush privileges;
  B机器:
   GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.2.10.197' IDENTIFIED BY '123456';
   flush privileges;
4.配置同步
  A机器:
  CHANGE MASTER TO MASTER_HOST='10.2.10.165', MASTER_PORT=3306, MASTER_USER='slave',MASTER_PASSWORD='123456', master_auto_position=1;
  start slave
  B机器:
  CHANGE MASTER TO MASTER_HOST='10.2.10.197', MASTER_PORT=3306, MASTER_USER='slave',MASTER_PASSWORD='123456', master_auto_position=1;
  start slave
5.配置keepalived.conf 和 mysql.sh(在/etc/keepalived/目录下配置)
  配置keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     @qq.com                                     #定义接受邮件的邮箱
   }
   notification_email_from root@localhost.localdomain   #定义接受邮件的邮箱
   smtp_server 127.0.0.1
   smtp_connect_timeout
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {            #定义vrrptest实例
    state BACKUP                #服务器状态(主为MASTER,从为BACKUP) 一般都设置为BACKUP进行故障切换
    interface eth0              #网络设备名称  可以使用ifconfig查看具体的配置
    virtual_router_id         #虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换(取值在0-255之间,用来区分多个instance的VRRP组播)
    priority                 #服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER
    nopreempt                   #设置此参数当优先级最的服务宕机重启之后不会抢夺当前主服务其的控制权
    advert_int                 #服务器之间的存活检查时间
    authentication {
        auth_type PASS          #认证类型
        auth_pass           #认证密码,一组lvs 服务器的认证密码必须一致
    }
    virtual_ipaddress {         #虚拟IP地址
        10.2.10.241
    }
}
virtual_server 10.2.10.241  {                #定义虚拟服务器
    delay_loop                                  #每个6秒检查一次real_server状态
    lb_algo wrr                                  #LVS算法
    lb_kind DR                                   #LVS模式
    nat_mask 255.255.255.0
    persistence_timeout                        #会话保持时间
    protocol TCP
    real_server 10.2.10.197  {               #真实的服务器地址
        weight
        notify_down /etc/keepalived/mysql.sh     #检测到服务down后执行的脚本kill keepalived
         TCP_CHECK {
             connect_timeout                   #连接超时时间
             bingto 10.2.10.241
             nb_get_retry                       #重连次数
             delay_before_retry                 #重连间隔时间
             connect_port                    #健康检测端口
         }
    }
}
 配置mysql.sh
  #!/bin/bash
  pkill keepalived
6.mysql.sh 增加执行权限
  chmod +x mysql.sh
7.在两台机器启动 keepalived 服务
  /etc/init.d/keepalived start
8.查看启动日志
  less /var/log/messages
shift+g 跳到最后一行
9.tcpdump抓取网络包,看是否正常
  tcpdump
10.监控虚拟ip
ip addr list
------------------------最终检测---------------------
1.使用PS命令检测服务运行状态
  a.ps -ef|grep keepalived
  b.ps -ef|grep mysql
2.查看系统日志,确定keepalived运行正确
  a. less /var/log/messages
  b. 或者 tail -f /var/log/messages
3.注意!服务启动顺序。先启动mysql后启动keepalived
------------------------测试方式---------------------
1.使用ping命令持续检测vip连通情况
2.关闭主节点上的mysql服务
3.观察主节点上的keepalived进程
4.观察VIP的ping结果
5.观察在切换后能否正常访问数据库
--------------------使用第三台测试机器进行测试---------------------
1.创建用于测试的数据库帐号在主被机器上
   grant all on world.* to test1@10.2.10.136 identified by 'test1';
   flush privileges;
2.在测试机器上
   mysql -h 10.2.10.241-utest1 -ptest1
3.在主机上模拟故障
停掉mysql服务
mysql Keepalived 实践的更多相关文章
- Oracle Compute云快速搭建MySQL Keepalived高可用架构
		
最近有个客户在测试Oracle Compute云,他们的应用需要使用MySQL数据库,由于是企业级应用一定要考虑高可用架构,因此有需求要在Oracle Compute云上搭建MySQL高可用集群.客户 ...
 - paip.python连接mysql最佳实践o4
		
paip.python连接mysql最佳实践o4 python连接mysql 还使用了不少时间...,相比php困难多了..麻烦的.. 而php,就容易的多兰.. python标准库没mysql库,只 ...
 - Mysql + keepalived 实现双主热备读写分离【转】
		
Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论 架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...
 - mysql+keepalived 双主热备高可用
		
理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互 ...
 - Mysql+Keepalived双主热备高可用操作记录
		
我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Mast ...
 - MySQL · 最佳实践 · 分区表基本类型
		
MySQL · 最佳实践 · 分区表基本类型 MySQL分区表概述 随着MySQL越来越流行,Mysql里面的保存的数据也越来越大.在日常的工作中,我们经常遇到一张表里面保存了上亿甚至过十亿的记录.这 ...
 - MySQL keepalived 双主.md
		
MySQL keepalived 双主搭建 环境说明 系统 IP 主机名 mysql keepalived VIP CentOS 6.8 192.168.197.61 C6-node1 5.6.36 ...
 - mysql + keepalived架构
		
mysql + keepalived架构 文档(这个文章共有三篇): http://blog.itpub.net/27000195/viewspace-1364706/
 - [转帖]【MySQL+keepalived】用keepalived实现MySQL主主模式的高可用
		
[MySQL+keepalived]用keepalived实现MySQL主主模式的高可用 https://www.jianshu.com/p/8694d07595bc 一.实验说明 MySQL主主模式 ...
 
随机推荐
- Apache DBUtils框架 结果处理器
			
package com.itheima.dbutil; import java.util.List; import java.util.Map; import org.apache.commons.d ...
 - Objective-C runtime 机制
			
Runtime使用C语言结构体表示对象,用C语言函数表示方法,这些C语言函数和结构体被Runtime封装后,我们就可以在程序中执行创建,检查,修改类和对象和他们的方法 OC的Class其实是一个obj ...
 - Alpha 冲刺五
			
团队成员 051601135 岳冠宇 051604103 陈思孝 031602629 刘意晗 031602248 郑智文 031602234 王淇 会议照片 项目燃尽图 项目进展 暂无实质性进展. 项 ...
 - 设置macbook休眠模式
			
前言: macbook默认合上盖默认是进入混合休眠模式模式(mode 3),此时电脑还会供电.不想耗电的话关机的话当前的工作状态就丢失了. macbook实际上是可以进入休眠模式的,只是没开放出来,我 ...
 - Mybatis 从入门到精通一:mybatis的入门
			
1.Mybatis简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation(阿帕奇软件基金会) 迁移到了google ...
 - Helm 安装 nginx-ingress 的方法
			
还是没学会 今天继续研究. Using Helm NGINX Ingress controller can be installed via Helm using the chart stable/n ...
 - 查看Jira 使用的H2数据库 数据结构以及内容的方法
			
1. 同事在研究jira 想看看jira的数据库 数据结构, 告知使用的是java的H2数据库. 如图示 2. 然后根据此内容 进行百度等. 下载 可以进行数据库连接的工具,主要找到两个,下载地址分别 ...
 - 【跨域】jsonp跨域实现方法
			
封装原生jsonp: 以跨域调取豆瓣电影最热榜单为例: function $jsonp(url,data,callback){ var funcName = 'jsonp_cb' + Math.ran ...
 - 当数据库字段与model字段规则不一致时候 需要在xml里面手工转换
 - http——解读梳理
			
(1)在客户端与服务器建立准确连接传输之前,先讲一讲三次握手 第一次握手:建立连接时,客户端发送syn包[同步序列编号(Synchronize Sequence Numbers).是TCP/IP建立连 ...