内容概要

  • 高可用
  • 七层负载均衡 和 四层负载均衡

内容详细

一、高可用

1、什么是高可用

一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用户是无感知的。

比如公司的网络是通过网关进行上网的,那么如果该路由器故障了,网关无法转发报文了,此时所有人都无法上网了,怎么办?

通常做法是给路由器增加一台备节点,但是问题是,如果我们的主网关master故障了,用户是需要手动指向backup的,如果用户过多修改起来会非常麻烦。

问题一:假设用户将指向都修改为backup路由器,那么master路由器修好了怎么办?
问题二:假设Master网关故障,我们将backup网关配置为master网关的ip是否可以? 其实是不行的,因为PC第一次通过ARP广播寻找到Master网关的MAC地址与IP地址后,会将信息写到ARP的缓存表中,那么PC之后连接都是通过那个缓存表的信息去连接,然后进行数据包的转发,即使我们修改了IP但是Mac地址是唯一的,pc的数据包依然会发送给master。(除非是PC的ARP缓存表过期,再次发起ARP广播的时候才能获取新的backup对应的Mac地址与IP地址) 如何才能做到出现故障自动转移,此时VRRP就出现了,我们的VRRP其实是通过软件或者硬件的形式在Master和Backup外面增加一个虚拟的MAC地址(VMAC)与虚拟IP地址(VIP),那么在这种情况下,PC请求VIP的时候,无论是Master处理还是Backup处理,PC仅会在ARP缓存表中记录VMAC与VIP的信息。

高可用应用在上图所示架构的负载均衡中:

2、实现高可用常用的工具

1.硬件通常使用 F5
2.软件通常使用 keepalived
安装在两台 负载均衡服务器 中,可以虚拟出一个公用的 IP地址 ,用户访问公用IP,可以访问到主代理服务器(master),主代理服务器宕机后,回自动使用户访问的是备用代理服务器(backup),这样用户就不会感觉到访问异常

3、VRRP 协议

VRRP协议会在一个局域网中进行广播,
VRRP是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。

简化网络管理。在具有多播或广播能力的局域网(如以太网)中,借助VRRP能在某台设备出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息,也无需修改主机的默认网关配置。

4、部署 Keepalived 配置

安装

高可用作用在负载均衡上,也就是反代理服务器中,所以在 lb01 和 lb02 两台负载均衡服务器上都安装 keepalived 

[root@lb01 ~]# yum install keepalived -y

修改 Keepalived 配置文件

keepalived 配置文件目录 : /etc/keepalived/keepalived.conf

! Configuration File for keepalived

# 全局配置
global_defs {
# 当前keepalived的唯一标识
router_id lb01
} # 检测脚本
vrrp_script check_nginx {
# 指定脚本路径
script "/etc/keepalived/checkNG.sh"
# 执行间隔时间
interval 5
} # 配置VRRP协议
vrrp_instance VI_1 {
# 状态,MASTER和BACKUP
state MASTER
# 绑定网卡
interface eth0
# 虚拟路由标示,可以理解为分组
virtual_router_id 50
# 优先级
priority 100
# 监测心跳间隔时间
advert_int 1
# 配置认证
authentication {
# 认证类型
auth_type PASS
# 认证的密码
auth_pass 1111
}
# 设置VIP
virtual_ipaddress {
# 虚拟的VIP地址
192.168.15.3
}
# 调用检查
track_script {
check_nginx
}
}

启动 Keepalived

[root@lb01 ~]# systemctl enable --now keepalived

这个时候查看 IP 地址会发现多出来了一个公用地址,也就是 VIP 地址:

测试

通过VIP地址 192.168.15.3 仍然能访问到代理服务器 192.168.15.5

5、解决 keepalived 的脑裂问题

脑裂问题 : 两台高可用服务器在指定时间内,无法互相检查到对方的心跳而各自启动故障转移功能。

两台高可用服务器在指定时间内,无法互相检查到对方的心跳而各自启动故障转移功能。

1、如果Nginx宕机怎么办?
想办法告诉keepalived,Nginx的情况。 2、局域网之内,keepalived无法相互广播,怎么办?
判断VIP是否可以ping的通

补充:

$?  : 上一条命令执行的结果。

解决Nginx宕机问题

1、如果Nginx宕机怎么办?
想办法告诉keepalived,Nginx的情况。 1、创建执行脚本文件checkNG.sh
[root@lb01 ~]# vim checkNG.sh
#!/bin/bash ps -ef | grep -q [n]ginx if [ $? -ne 0 ];then
# 代表Nginx未正常启动
systemctl start nginx &>/dev/null
sleep 2
ps -ef | grep -q [n]ginx
if [ $? -ne 0 ];then
systemctl stop keepalived
fi
fi 2、 把脚本文件移动到 /etc/keepalived/ 目录下,并给 脚本文件添加可执行权限
[root@lb01 keepalived]# chmod +x checkNG.sh 3、 在 keepalived 的配置文件 keepalived.conf 中导入执行文件,keepalived 功能 : vrrp_script
# 检测脚本
vrrp_script check_nginx {
# 指定脚本路径
script "/etc/keepalived/checkNG.sh"
# 执行间隔时间
interval 5
} 4、在vrrp协议模块中启动检查脚本
# 调用检查
track_script {
check_nginx
}

6、keepalived 的非抢占式

实现非抢占式。
1、状态全部都有设置成backup
2、增加 nopreempt
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
router_id lb02
} # 检测脚本
vrrp_script check_nginx {
# 指定脚本路径
script "/etc/keepalived/checkNG.sh"
# 执行间隔
interval 5
} # 配置VRRP协议
vrrp_instance VI_1 {
#状态,MASTER和BACKUP
state BACKUP
# 开启非抢占式 <-- (增加 nopreempt)
nopreempt
#绑定网卡
interface eth0
#虚拟路由标示,可以理解为分组
virtual_router_id 50
#优先级
priority 90
#监测心跳间隔时间
advert_int 1
#配置认证
authentication {
#认证类型
auth_type PASS
#认证的密码
auth_pass 1111
}
#设置VIP
virtual_ipaddress {
#虚拟的VIP地址
192.168.15.3
}
# 调用检查
track_script {
check_nginx
}
}

7、四层负载均衡

# 假设有三台MySQL数据库,请问怎样负载均衡?

在非HTTP协议的情况下,采用的四层负载均衡的方式负载服务。

注意:四层负载均衡中不支持域名。
案例 :数据库
1、在 /etc/nginx/ 目录下新建一个 stream 文件夹,用于存放新的配置文件
[root@lb01 nginx]# mkdir stream [root@lb01 stream]# vim mysql.conf [root@lb01 stream]# cat mysql.conf
server {
# 指定mysql的连接端口
listen 3306;
# 分配流量至数据库服务器
proxy_pass 172.16.1.61:3306;
}
2、在 nginx.conf 配置文件中添加 stream 模块,用于配置不支持HTTP协议的服务器的连接
stream {
include /etc/nginx/stream/*.conf;
} 案例:使用四层负载均衡实现SSH的代理,端口为1122
[root@lb01 stream]# cat ssh.conf
server {
listen 1122;
proxy_pass 172.16.1.5:22;
}

8、部署项目

https://gitee.com/lylinux/DjangoBlog?_from=gitee_search

高可用 & 七层负载均衡与四层负载均衡的更多相关文章

  1. 网络OSI七层架构与TCP四层架构的应用与区别

    1.OSI七层网络模型介绍 OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了 ...

  2. 七层负载(Application Gateway)+四层负载(LB)

    上次有个电商客户需要搭建如架构. 192.168.1.100/url1(请求url)——>Node1:10.0.0.4.10.0.0.5(服务器IP) 192.168.1.100/url2(请求 ...

  3. OSI七层与tcp/ip四层

    1)OSI七层模型 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层 数据格式化,代 ...

  4. 计算机网络中七层,五层,四层协议;IP 地址子网划分

    七层协议: 7 应用层(http) 6 表示层(上层用户可以相互识别的数据:jpg) 5 会话层(不同主机不同线程间的通信) 4 运输层(tcp/ip:传输层提供端到端的透明数据服务)/差错控制和流量 ...

  5. OSI七层和TCP/IP四层的关系、TCP与UDP、HTTP、Socket

    HTTP(应用层协议):超文本传输协议,HTTP协议是建立在TCP协议之上的一种应用. HTTP协议详细解释 2Http详解 TCP(面向连接的传输层协议):transmission control ...

  6. OSI七层与TCP/IP四层(小结)

    OSI 七层模型 我们一般使用的网络数据传输由下而上共有七层,分别为物理层.数据链路层.网络层.传输层.会话层.表示层.应用层,也被依次称为 OSI 第一层.第二层.⋯⋯. 第七层. 各层功能简介 1 ...

  7. 温故知新--计算机网络 iso/osi七层模型 tcp/ip四层模型

    ISO七层模型由下至上为1至7层,分别为: 应用层(Application layer) 表示层(Presentation layer) 会话层(Session layer) 传输层(Transpor ...

  8. 计算机网络分层(OSI七层、 TCP/IP四层)

  9. 高可用4层lvs——keepalived

    搭建方式: node01: ipvsadm -C ifconfig eth0:2 down --------------------------------- node01,node04安装keepa ...

随机推荐

  1. java list 类型删除其中的某些元素的正确方法

    List<Object> list= new ArrayList<>();//记录需要删除的元素List<Object> li = new ArrayList< ...

  2. 使用 try-catch

    ECMA-262 第 3 版引入了 try-catch 语旬,当 try-catch 语句中发生错误时, 浏览器会认为错误已经被处理了 ,因而不会报告错误.对于那些不要求用户懂技术,也不需要用户理解错 ...

  3. vue 自动生成菜单

    import constant from './const' export function getRouters (files) { let filenames = files.keys() let ...

  4. Enumy:一款功能强大的Linux后渗透提权枚举工具

    Enumy是一款功能强大的Linux后渗透提权枚举工具,该工具是一个速度非常快的可移植可执行文件,广大研究人员可以在针对Linux设备的渗透测试以及CTF的后渗透阶段利用该工具实现权限提升,而Enum ...

  5. gopher协议在SSRF漏洞中的作用

    1.什么是gopher协议?2.如何使用gopher协议反弹shell?3.在SSRF中如何使用gopher协议反弹shell? 一.什么是gopher协议?定义:Gopher是Internet上一个 ...

  6. 安装MySQL到Ubuntu 20.04

    本文的内容主要来自对How To Install MySQL on Ubuntu 20.04的翻译.在根据该文的指导下,我在自己的Ubuntu 20.04.3 LTS版本中安装了MySQL 8. St ...

  7. Solon Web 开发,五、数据访问、事务与缓存应用

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  8. python pip无法安装到2.7

    问题 pip默认指向python3.6,没有pip2,pip2.7 解决办法 加上应用路径 加上系统环境变量 参考 https://www.cnblogs.com/fanyuchen/p/712768 ...

  9. blender建模常用建模快捷键

    编辑物体 M2选取 M2+SHIFT选取多个 A全选 B+M1矩阵选择 C+M1笔刷选择 CTRL+M1套索选择 CTRL+SHIFT+M1取消套索选择 ALT+M2选择边循环,面 CTRL+ALT+ ...

  10. golang中的map

    1. 声明与初始化 // map的声明与初始化 userInfo := map[string]string{"name": "马亚南", "age&q ...