当前位置: 首页 > news >正文

集群介绍,keepalived介绍,用keepalived配置高可用集群

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

集群介绍

Linux集群根据功能划分为两大类:高可用和负载均衡。

  • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 - 高可用衡量标准,4个九,就是99.99%,表示一个比例,在一年时间内99.99%的时间都是在线的,不允许宕机,不允许服务不可用。
  • 实现高可用的开源软件有:heartbeat、keepalived
  • 负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2
  • 实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx,商业的有F5、Netscaler

keepalived介绍

  • 在这里使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果;heartbeat 切换的时候,会不是很及时。
  • keepalived通过VRRP(Virtual Router Redundancy Protocl虚拟路由冗余协议)来实现高可用。
  • 在这个协议里,会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。
  • master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。
  • Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。

用keepalived配置高可用集群

  • 准备两台机器130和132,130作为master,132作为backup
  • 两台机器都执行yum install -y keepalived
  • 两台机器都安装nginx,其中130上已经编译安装过nginx,132上需要yum安装nginx: yum install -y nginx
  • 设定vip为100
  • 编辑130上keepalived配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf获取
  • 130编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh获取
  • 给脚本755权限
  • systemctl start keepalived 130启动服务
  • 132上编辑配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf获取
  • 132上编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh获取
  • 给脚本755权限
  • 132上也启动服务 systemctl start keepalived

首先准备两台机器,都需要安装keepalived,一个作为master,一个作为backup

080926_rWpX_3708406.png

080938_mxgn_3708406.png

两台机器装nginx服务,可以yum直接安装

081337_0TPc_3708406.png

master上配置

编辑keepalived配置文件,按快捷键> !$清空内容,添加内容如下

081933_pgSP_3708406.png

082057_98XF_3708406.png

notification_email//用于设置报警邮件地址

smtp_server 127.0.0.1 //设置邮件的smtp server地址

smtp_connect_timeout 30 //设置连接smtp sever超时时间

vrrp_script chk_nginx {  

script "/usr/local/sbin/check_ng.sh" //检查服务是否正常

 interval 3 //检查的时间间断是3秒

}

virtual_router_id 51 //定义路由器ID

priority 100 //权重

virtual_ipaddress//设置VIP

track_script//加载监控脚本

定义监控脚本,添加内容如下:

084217_nqh6_3708406.png

084348_jWYp_3708406.png

停止Keepalived服务是为了避免发生脑裂

然后更改脚本的权限,启动keepalived服务,查看进程

084931_0GMB_3708406.png

084958_OOhv_3708406.png

停掉nginx服务,查看nginx服务进程

085247_jVIj_3708406.png

查看ip地址,使用 ip add 命令,ifconfig命令无法查看到

085455_erJA_3708406.png

检查两台机器的防火墙和selinux是否关闭

090657_XKvp_3708406.png

090542_00vg_3708406.png

backup上配置

编辑keepalived配置文件,添加内容如下:

091248_SliH_3708406.png

091628_QfCp_3708406.png

091709_ALQJ_3708406.png

创建监控脚本,添加内容如下:

091826_aA8E_3708406.png

091928_gJnP_3708406.png

更改监控脚本权限,启动Keepalived服务,并查看

092034_oIkm_3708406.png

测试访问IP

访问master的IP

092734_c4B5_3708406.png

访问内容可以修改

092839_peVI_3708406.png

访问backup的IP

093016_pndU_3708406.png

092943_aYNm_3708406.png

访问192.168.133.132,出现和访问master的IP一样的内容,说明访问到的机器是master

093054_SbsE_3708406.png

测试高可用

  • 先确定好两台机器上nginx差异,比如可以通过curl -I 来查看nginx版本  
  • 测试1:关闭master上的nginx服务  
  • 测试2:在master上增加iptabls规则  
  • iptables -I OUTPUT -p vrrp -j DROP  
  • 测试3:关闭master上的keepalived服务
  • 测试4:启动master上的keepalived服务

执行命令ip add可以看到,VIP绑定在master上

093822_OaQR_3708406.png

在master上增加iptabls规则限制vrrp发包,并查看日志变化

094005_YYXo_3708406.png

094229_6yCB_3708406.png

访问VIP,发现还是在master上

094818_Q8TZ_3708406.png

所以封掉vrrp协议,不能达到切换资源的目的,恢复防火墙规则

094943_kjE8_3708406.png

模拟生产环境中宕机,停掉keepalived服务,查看IP

095124_QQTb_3708406.png

095204_6gvS_3708406.png

访问VIP,发现内容发生改变

095231_Pzwo_3708406.png

启动master上的keepalived服务,查看IP又回来了

095505_BSkZ_3708406.png

095710_0eHz_3708406.png

访问VIP,内容又变回来了

095549_XsPA_3708406.png

扩展

heartbeat和keepalived比较

DRBD工作原理和配置

mysql+keepalived

转载于:https://my.oschina.net/u/3708406/blog/1613756

相关文章:

  • 011-Spring Boot 运行流程分析SpringApplication.run
  • Linux Centos 7 - 系统安装
  • 宝哥iOS网络篇-AFNetworking基础使用指南
  • JS数组方法汇总
  • [解决方案]sql server复制需要有实际的服务器名称才能连接到服务器
  • 远程管理防火墙一
  • 用yarn替代npm
  • spring boot 整合apache shiro
  • linux用户操作
  • python 遍历本地文件
  • ShaderForge插件分享
  • eclipse不能正常启动
  • ReSharper2017.3的列对齐、排版格式、列对齐错误的修复
  • Vue.js 案例资料汇总
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • $translatePartialLoader加载失败及解决方式
  • .pyc 想到的一些问题
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • CentOS 7 防火墙操作
  • C语言笔记(第一章:C语言编程)
  • JavaScript新鲜事·第5期
  • Java多态
  • jdbc就是这么简单
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • MySQL-事务管理(基础)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • ubuntu 下nginx安装 并支持https协议
  • Vue ES6 Jade Scss Webpack Gulp
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 分享几个不错的工具
  • 基于组件的设计工作流与界面抽象
  • 全栈开发——Linux
  • 使用 Docker 部署 Spring Boot项目
  • 手写双向链表LinkedList的几个常用功能
  • 一份游戏开发学习路线
  • 在weex里面使用chart图表
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #define,static,const,三种常量的区别
  • %@ page import=%的用法
  • (2.2w字)前端单元测试之Jest详解篇
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • 、写入Shellcode到注册表上线
  • .net core 控制台应用程序读取配置文件app.config
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET企业级应用架构设计系列之应用服务器
  • :如何用SQL脚本保存存储过程返回的结果集
  • []我的函数库