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 实践的更多相关文章

  1. Oracle Compute云快速搭建MySQL Keepalived高可用架构

    最近有个客户在测试Oracle Compute云,他们的应用需要使用MySQL数据库,由于是企业级应用一定要考虑高可用架构,因此有需求要在Oracle Compute云上搭建MySQL高可用集群.客户 ...

  2. paip.python连接mysql最佳实践o4

    paip.python连接mysql最佳实践o4 python连接mysql 还使用了不少时间...,相比php困难多了..麻烦的.. 而php,就容易的多兰.. python标准库没mysql库,只 ...

  3. Mysql + keepalived 实现双主热备读写分离【转】

    Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论   架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...

  4. mysql+keepalived 双主热备高可用

    理论介绍:我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互 ...

  5. Mysql+Keepalived双主热备高可用操作记录

    我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务.当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.MySQL双主复制,即互为Mast ...

  6. MySQL · 最佳实践 · 分区表基本类型

    MySQL · 最佳实践 · 分区表基本类型 MySQL分区表概述 随着MySQL越来越流行,Mysql里面的保存的数据也越来越大.在日常的工作中,我们经常遇到一张表里面保存了上亿甚至过十亿的记录.这 ...

  7. MySQL keepalived 双主.md

    MySQL keepalived 双主搭建 环境说明 系统 IP 主机名 mysql keepalived VIP CentOS 6.8 192.168.197.61 C6-node1 5.6.36 ...

  8. mysql + keepalived架构

    mysql + keepalived架构 文档(这个文章共有三篇): http://blog.itpub.net/27000195/viewspace-1364706/

  9. [转帖]【MySQL+keepalived】用keepalived实现MySQL主主模式的高可用

    [MySQL+keepalived]用keepalived实现MySQL主主模式的高可用 https://www.jianshu.com/p/8694d07595bc 一.实验说明 MySQL主主模式 ...

随机推荐

  1. 小组冲刺第十四天站立会议(Beta版发布)

    注: “助成”招聘网站链接:http://58.87.74.131:8080/zhucheng 欢迎大家进行评测. 一.任务看板: 二.燃尽图: 三.任务总结: 根据前期收集的用户反馈,再次对网站进行 ...

  2. 使用git进行代码的推送

    首先是对于锐捷墙的问题,登陆github有时可以有时又连不上,网络又非常慢,所以用了十足的耐心才fork完了代码库.链接https://github.com/niconiconiconi/hellow ...

  3. What is the difference between WinRT, UWP and WPF?

    在学习UWP的过程中确实有这个迷惑,在此分享一下. UWP (Universal Windows platform), Metro and WinRT are all result of Micros ...

  4. docker简易实践

    docker简易实践 实验环境 操作系统:deepin 15.4 安装步骤 1.安装docker sudo apt-get install docker.io 2.启动docker服务 sudo se ...

  5. ElasticSearch 2 (19) - 语言处理系列之故事开始

    ElasticSearch 2 (19) - 语言处理系列之故事开始 摘要 全文搜索是精度(尽可能少的返回不相关文档)和召回(尽可能多的返回相关文档)的战场.尽管只精确匹配用户查询的词肯定会是精确的, ...

  6. 【壹拾壹周】final分数分配

    组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块NEO 发布时间:12.3 git地址:https://git.coding.net/Boxer_/ho ...

  7. MYSQL 解决中文字符集乱码问题的方法

    修改 /etc/mysql/my.cnf 增加内容 [client] default-character-set = utf8mb4 [mysql] default-character-set = u ...

  8. Grafana elasticsearch 应用

    早期的时候,项目基于ES+echart写了一些仪表盘的展示页面,虽然ES配合这种char界面有着天然的优势,但实际写起代码来,还是很多重复的劳动,在一次偶然中发现Grafana,看到它提供了很多仪表盘 ...

  9. 【题解】FBI序列

    题目描述 两伙外星人策划在未来的XXXX年侵略地球,侵略前自然要交换信息咯,现在,作为全球保卫队队长,你截获了外星人用来交换信息的一段仅由“F”,“B”,“I”,“O”组成的序列.为了保卫地球和平,为 ...

  10. Appium+python自动化获取toast消息(windows版)的方法

    原来用的Appium1.5.3GUI版本,那为什么升级呢? 为了兼容最新版本的iOS10和Android7 Xcode8升级后,将不支持使用UIAutomation,而是改为使用XCUITest了,并 ...