lvs负载均衡—高可用集群(keepalived)

基本概念:

什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,那说到keepalived时不得不说的一个协议就是VRRP协议,可以说这个协议就是keepalived实现的基础。

VRRP( Virtual Router Redundancy Protocol )协议:
虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,Keepalived就是巧用VRRP协议来实现高可用性(HA)的。
1.用于实现路由器冗余的协议
2.解决静态路由单点故障问题
3.通过一种竞选(election)协议来实现虚拟路由器的功能

LVS提供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性! 采用这样的架构以后,很容易对现有系统进行扩展,只要在后端添加或者减少realserver,更改lvs的配置文件,就能实现无缝配置变更!

实验搭建:

server1:lvs调度服务器DS1:192.168.13.111
server2:后端服务器RS1:192.168.13.112
server3:后端服务器RS2:192.168.13.113
server4:lvs调度服务器DS2:192.168.13.114
VIP:192.168.13.100

1 . 在server1与server4上分别解压keepalived并编译安装:

tar zxf keepalived-2.0.6.tar.gz        # 解压
yum install gcc openssl-devel -y   # 解决依赖
cd keepalived-2.0.6     
./configure --prefix=/usr/local/keepalived --with-init=systemd      # 编译
make &&make install     # 安装 

在这里插入图片描述
装好之后会有这个keepalived目录,
其实不用两边都这么装,麻烦,一边装好之后直接scp传过去就好了。

2 . 配置启动配置文件 调度器(server1和server4)都进行相同操作:

ln -s /usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig ##配置文件,脚本都做成软链接
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

3 . 配置keepalived:

编写主节点server1的配置文件

cd /etc/keepalived
vim keepalived.conf
global_defs {notification_email {root@localhost #节点宕机了将会接收到异常邮件的主机}notification_email_from keepalived@localohost #邮件发送人smtp_server 127.0.0.1  #发送的服务器smtp_connect_timeout 30 #指定连接超时时间router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTER  #主节点表示interface ens33      # 网卡名virtual_router_id 13priority 100  #权重advert_int 1  #检查的间隔1sauthentication {auth_type PASS  #认证方式auth_pass 1111  #认证的密码}virtual_ipaddress {192.168.13.100}
}
virtual_server 192.168.13.100 80 {delay_loop 6 #连接失败六次之后,发送邮件lb_algo rr  #lvs调度算法lb_kind DR  #lvs该工作方式protocol TCP  # 端口real_server 192.168.13.112 80 {TCP_CHECK {weight 1connect_port 80connect_timeout 3}}real_server 192.168.13.113 80 {TCP_CHECK {weight 1connect_port 80connect_timeout 3}}
}

编好之后
systemctl start keepalived
systemctl enable keepalived

再给server4 scp 过去

scp keepalived.conf root@192.168.13.114:/etc/keepalived/

在server4端只需要

state BACKUP
priority 50		##修改这两个选项

改好之后
systemctl start keepalived
systemctl enable keepalived

3 . 真实服务器设置

1). 安装httpd 启动设置访问页面

注意:该处为了验证负载均衡的效果,后端真实服务器设置不同的访问内容,明显标示内容来自不同的后端服务器。

2). 添加VIP到各自的物理网卡中

ip addr add 192.168.13.100/24 dev ens33    # 临时添加ip到eth0网卡

3). 设置arptable策略,解决将用户所有针对VIP的请求发送到DS 而不是RS

yum install arptables -y # 安装管理工具
arptables -A INPUT -d 192.168.13.100 -j DROP
arptables -A OUTPUT -s 192.168.13.100 -j mangle --mangle-ip-s 192.168.13.112

在另一端RS修改记着ip

4 . 测试:

1). 设置完成真实服务器之后,在两个调度器上查看ipvsadm 全部自动生成负载均衡策略:
在这里插入图片描述
2). 使用客户端主机测试:
负载均衡正常

在这里插入图片描述
3 ). 关闭真实服务器172.25.13.140的http的服务。模拟该服务器故障,测试该真实服务器被踢除出列表,当服务正常的时候会自动添加到列表中

在这里插入图片描述
在这里插入图片描述
当打开服务时,恢复正常
在这里插入图片描述
在这里插入图片描述
4 ) . 目前负载均衡服务器工作在主服务器,主服务器上会添加vip,关闭主服务器的keepalived,模拟负载均衡主服务器异常,这时候会切换到由服务器提供负载均衡服务,并且vip会主动漂移到副服务器。

主服务器

在这里插入图片描述
在这里插入图片描述
负载均衡主服务器异常,将会由副服务器提供服务,vip会自动漂移到副服务器:

在这里插入图片描述
客户端测试服务正常:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

定期定量采购_企业常见的六种采购策略

注册职业采购经理CPPM考试网​www.apscppm.com对不起,我是采购合同生效的条件是什么?怎样制定谈判方案?如何在采购时让供应商听你的指挥!没做预算不能采购,应该作为企业采购管理的基本原则。编制现金预算就是要解决收入…

stringreader_Java StringReader markSupported()方法与示例

stringreaderStringReader类markSupported()方法 (StringReader Class markSupported() method) markSupported() method is available in java.io package. markSupported()方法在java.io包中可用。 markSupported() method is used to check whether this StringReader strea…

pacemaker+corosync实现集群管理

前言: 高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术。简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点。 …

分页导航的实现方法

这个导航是阅读了精通css这本书后做的demo&#xff0c;感觉以前写的真的是弱爆了 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style type"text/css">ol.n…

更换mysql_这些被你忽视的MySQL细节,可能会让你丢饭碗!

我们在 MySQL 入门篇主要介绍了基本的 SQL 命令、数据类型和函数&#xff0c;在具备以上知识后&#xff0c;你就可以进行 MySQL 的开发工作了&#xff0c;但是如果要成为一个合格的开发人员&#xff0c;你还要具备一些更高级的技能&#xff0c;下面我们就来探讨一下 MySQL 都需…

Java RandomAccessFile skipBytes()方法与示例

RandomAccessFile类skipBytes()方法 (RandomAccessFile Class skipBytes() method) skipBytes() method is available in java.io package. skipBytes()方法在java.io包中可用。 skipBytes() method is used to skip the given number of bytes in this file and possibly set …

rhcs集群套件—红帽6的高可用

含义及理解&#xff1a; RHCS是Red Hat Cluster Suite的缩写&#xff0c;也就是红帽子集群套件&#xff0c;RHCS是一个能够提供高可用性、高可靠性、负载均衡、存储共享且经济廉价的集群工具集合&#xff0c;&#xff0c;它将集群系统中三大集群架构&#xff08;高可用性集群、…

MapReduce二次排序

2019独角兽企业重金招聘Python工程师标准>>> 默认情况下&#xff0c;Map输出的结果会对Key进行默认的排序&#xff0c;但是有时候需要对Key排序的同时还需要对Value进行排序&#xff0c;这时候就要用到二次排序了。下面我们来说说二次排序 1、二次排序原理 我们把二…

数据有序_详解数据库插入性能优化:合并+事务+有序数据进行INSERT操作

概述对于一些数据量较大的系统&#xff0c;数据库面临的问题除了查询效率低下&#xff0c;还有就是数据入库时间长。特别像报表系统&#xff0c;每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此&#xff0c;优化数据库插入性能是很有意义的。其实最有效的…

Java ProcessBuilder environment()方法与示例

ProcessBuilder类的environment()方法 (ProcessBuilder Class environment() method) environment() method is available in java.lang package. environment()方法在java.lang包中可用。 environment() method is used to return Map interfaces of this process builder env…

容器内应用日志收集方案

容器化应用日志收集挑战 应用日志的收集、分析和监控是日常运维工作重要的部分&#xff0c;妥善地处理应用日志收集往往是应用容器化重要的一个课题。 Docker处理日志的方法是通过docker engine捕捉每一个容器进程的STDOUT和STDERR&#xff0c;通过为contrainer制定不同log dri…

python统计行号_利用Python进行数据分析(第三篇上)

上一篇文章我记录了自己在入门 Python 学习的一些基础内容以及实际操作代码时所碰到的一些问题。这篇我将会记录我在学习和运用 Python 进行数据分析的过程&#xff1a;介绍 Numpy 和 Pandas 两个包运用 Numpy 和 Pandas 分析一维、二维数据数据分析的基本过程实战项目【用 Pyt…

lnmp架构搭建—源码编译(nginx、mysql、php)

含义及理解&#xff1a; LNMP LinuxNginxMysqlPHP&#xff1a;LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux&#xff0c;N指Nginx&#xff0c;M一般指MySQL&#xff0c;也可以指MariaDB&#xff0c;P一般指PHP&#xff0c;也可以指P…

Java PipedInputStream available()方法与示例

PipedInputStream类的available()方法 (PipedInputStream Class available() method) available() method is available in java.io package. available()方法在java.io包中可用。 available() method is used to return the number of available bytes left that can be read …

解析xml_Mybatis中mapper的xml解析详解

上一篇文章分析了mapper注解关键类MapperAnnotationBuilder&#xff0c;今天来看mapper的项目了解析关键类XMLMapperBuilder。基础介绍回顾下之前是在分析configuration的初始化过程&#xff0c;已经进行到了最后一步mapperElement(root.evalNode("mappers"))&#x…

lnmp—MemCache的作用

含义及理解&#xff1a; 1 . memcache是一个高性能的分布式的内存对象缓存系统&#xff0c;用于动态web应用以减轻数据库负担。通过在内存里维护一个统一的巨大的hash表&#xff0c;来存储经常被读写的一些数组与文件&#xff0c;从而极大的提高网站的运行效率。 memcache是一…

Java ListResourceBundle getKeys()方法与示例

ListResourceBundle类的getContents()方法 (ListResourceBundle Class getContents() method) getContents() method is available in java.util package. getContents()方法在java.util包中可用。 getContents() method is used to return an enumeration of all the keys tha…

orale用户密码过期处理

使用具有管理权限的用户登录1、查看用户的proifle是哪个&#xff0c;一般是default&#xff1a;SELECT username,PROFILE FROM dba_users;2、查看指定概要文件&#xff08;如default&#xff09;的密码有效期设置&#xff1a;sql>SELECT * FROM dba_profiles s WHERE s.prof…

python字典怎么设置_在python中设置字典中的属性

在python中设置字典中的属性是否可以在python中从字典创建一个对象&#xff0c;使每个键都是该对象的属性&#xff1f;像这样的东西&#xff1a;d { name: Oscar, lastName: Reyes, age:32 }e Employee(d)print e.name # Oscarprint e.age 10 # 42我认为这几乎与这个问题相反…

Java ObjectInputStream readByte()方法与示例

ObjectInputStream类readByte()方法 (ObjectInputStream Class readByte() method) readByte() method is available in java.io package. readByte()方法在java.io包中可用。 readByte() method is used to read a byte (i.e. 8 bit) of data from this ObjectInputStream. re…