什么是高可用?

HA(high availability)即高可用性;就是在高可用集群中发生单点故障时,能够自动转移资源并切换服务,以保证服务一直在线的机制。

LVS

LVS:(linux virtual server)即linux虚拟服务器;开源项目,主要达到负载均衡的作用。

LVS组成

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm

  1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
  2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

ipvsadm包安装

╭─root@localhost.localdomain ~
╰─➤  yum install ipvsadm -y

负载均衡比较

LVS:

  1. 抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
  2. 工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
  3. 稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
  4. 应用范围比较广,可以对所有应用做负载均衡;
  5. 不支持正则处理,不能做动静分离。
  6. 支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
  7. 配置 复杂,对网络依赖比较大,稳定性很高。

Ngnix:

  1. 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
  2. Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;
  3. Nginx安装和配置比较简单,测试起来比较方便;
  4. 也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
  5. 对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
  6. Nginx对请求的异步处理可以帮助节点服务器减轻负载;
  7. Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
  8. 不支持Session的直接保持,但能通过ip_hash来解决。、对Big request header的支持不是很好,
  9. 支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)
  10. Nginx还能做Web服务器即Cache功能。

HAProxy:

  1. 支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
  2. 能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
  3. 支持url检测后端的服务器出问题的检测会有很好的帮助。
  4. 更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
  5. 单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
  6. HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
  7. 支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
  8. 不能做Web服务器即Cache

LVS三种工作模式

  1. NAT模式
  2. 路由模式
  3. 隧道模式

NAT模式

调度器环境:

##连接外部的网卡:
192.168.31.100
255.255.255.0
192.168.31.1
##连接real_server的网卡:
172.16.100.1
255.255.255.0

real_server1环境:

172.16.100.2
255.255.255.0
172.16.100.1    #网关指向调度器

real_server2环境:

172.16.100.3
255.255.255.0
172.16.100.1   #网关指向调度器

调度器配置:

╭─root@localhost.localdomain ~
╰─➤  cat /proc/sys/net/ipv4/ip_forward
0
╭─root@localhost.localdomain ~
╰─➤  echo 1 > /proc/sys/net/ipv4/ip_forward或者vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
#调度器配置命令
ipvsadm -A -t 192.168.31.100:80 -s rr
ipvsadm -a -t 192.168.31.100:80 -r 192.168.250.2 -m
ipvsadm -a -t 192.168.31.100:80 -r 192.168.250.3 -m 

查看配置LVS内容:

╭─root@localhost.localdomain ~
╰─➤  ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.137.3:80 rr-> 172.16.100.10:80             Masq    1      0          2         -> 172.16.100.20:80             Masq    1      0          2

特点:

  • 调度器会成为性能上的瓶颈
  • 可以不同网段

路由模式

DR模式环境:direct_server:192.168.254.17real_server:192.168.254.18real_server:192.168.254.19#vip为虚拟服务ipvip:192.168.254.250
....................................................................................................................    调度器:
direct_server:ipvsadm -C    #清除配置信息#添加对外提供的服务ipipvsadm -A -t 192.168.254.250:80 -s rr    #-A为ADD   -t为tcp   -s rr为设置算法为轮叫算法#添加2台real_server主机ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.18:80 -g #-a为add   -t为tcp   -r为realserver   -g为DR路由模式ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.19:80 -g #-a为add   -t为tcp   -r为realserver   -g为DR路由模式#配置网卡的子网口为vip,ip地址为192.168.254.250ifconfig ens33:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up#添加路由(访问192.168.254.250都走ens33:0这个网卡)route add -host 192.168.254.250 dev ens33:0
........................................................................................................................
real_server端:real_server:#在回环地址的子网口上配置服务ip(vip)ifconfig lo:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up #添加静态路由指定lo:0端口route add -host 192.168.254.250 dev lo:0echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2">/proc/sys/net/ipv4/conf/lo/arp_announceecho "1">/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2">/proc/sys/net/ipv4/conf/all/arp_announceecho "0">/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0">/proc/sys/net/ipv4/conf/lo/arp_announceecho "0">/proc/sys/net/ipv4/conf/all/arp_ignoreecho "0">/proc/sys/net/ipv4/conf/all/arp_announcearp_ignore:定义接收到ARP请求时的响应级别      0:默认,只用本地配置的有响应地址都给予响应       1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应(仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)arp_announce:定义将自己的地址向外通告时的级别       0:默认,表示使用配置在任何接口的任何地址向外通告       1:尽量仅向目标网络通告与其网络匹配的地址       2:仅向与本地接口上地址匹配的网络进行通告

拓展:python 远程布置LVS路由模式代码:

import paramiko
vip = '192.168.254.250'
ds = '192.168.254.13'
rs1 = '192.168.254.11'
rs2 = '192.168.254.12'
ds_cmd = '''
ipvsadm -C;
ipvsadm -A -t {vip}:80 -s wrr;
ipvsadm -a -t {vip}:80 -r {rs1}:80 -w 1 -g;
ipvsadm -a -t {vip}:80 -r {rs2}:80 -w 2 -g;
ifconfig ens33:0 {vip} broadcast {vip} netmask 255.255.255.255 up;
route add -host {vip} dev ens33:0;
'''.format(vip=vip, rs1=rs1, rs2=rs2)rs1_cmd = '''
ifconfig lo:0 {vip} broadcast {vip} netmask 255.255.255.255 up;
route add -host {vip} dev lo:0;
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore;
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce;
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore;
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce;
service httpd restart
'''.format(vip=vip)
rs2_cmd = '''
ifconfig lo:0 {vip} broadcast {vip} netmask 255.255.255.255 up;
route add -host {vip} dev lo:0;
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore;
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce;
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore;
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce;
service httpd restart
'''.format(vip=vip)ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())def direct_server():ssh.connect('{ds}'.format(ds=ds), 22, 'root', 'root',timeout=3)stdin, stdout, stderr = ssh.exec_command(ds_cmd)print(stderr.read().decode('utf-8'))print(stdout.read().decode('utf-8'))print('dicret_server配置完成!!!')def real_server1():ssh.connect('{rs1}'.format(rs1=rs1), 22, 'root', 'root', timeout=3)stdin, stdout, stderr = ssh.exec_command(rs1_cmd)print(stderr.read().decode('utf-8'))print(stdout.read().decode('utf-8'))print('real_server1配置完成!!!')def real_server2():ssh.connect('{rs2}'.format(rs2=rs2), 22, 'root', 'root', timeout=3)stdin, stdout, stderr = ssh.exec_command(rs2_cmd)print(stderr.read().decode('utf-8'))print(stdout.read().decode('utf-8'))print('real_server2配置完成!!!')def main():direct_server()real_server1()real_server2()ssh.close()if __name__ == '__main__':main()

keepalived

vrrp协议

VRRP协议是一种主备模式的协议,通过VRRP可以在网络发生故障时透明地进行设备切换不影响主机间的数据通信,这其中涉及两个概念:物理路由器和虚拟路由器

VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,

在虚拟路由器内部,是多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由器被称之为主路由器(处于master状态角色)。它拥有对外提供的虚拟ip,提供各种网络功能,比如arp请、icmp、数据转发等,

其他物理路由器不拥有对外提供服务的虚拟ip,也不提供对外网络功能,仅仅接收master的vrrp状态通告信息,这些路由器被统称为备份路由器(处于backup角色)。

在一个虚拟路由器中,只有处于master角色的路由器会一直发送vrrp数据包,处于backup角色的路由器只接受master发过来的报文信息,用来监控master运行状态,因此,不会发生master抢占的现象,除非它的优先级更高,

当master不可用时,backup也就无法收到master发过来的报文信息,于是就认定master出现故障,接着多台backup就会进行选举,优先级最高的backup将成为新的master,这种选举并进行角色的过程非常快,因此也就保证了服务的持续可用性

keepalived结构体系

安装keepalived

╭─root@localhost.localdomain ~
╰─➤  yum install keepalived -y

keepalived主配置文件

╭─root@localhost.localdomain ~
╰─➤  vim /etc/keepalived/keepalived.conf

主配置文件分三部分:

  • 全局配置
  • VRRP配置
  • LVS配置

拓展1:基于mysql或者mariadb数据库的高可用如下配置

! Configuration File for keepalivedglobal_defs {notification_email {}
}vrrp_script chk_mysql {                  #check_mysql是为执行脚本计划起的名字script "/root/sh/check_mysql.sh"     #指定要执行脚本的路径interval 2                           #脚本执行间隔,每2s检测一次
}vrrp_instance HA_1 {state BACKUPinterface ens33virtual_router_id 151priority 100advert_int 1nopreemptauthentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.254.250/24}track_script {                    #跟踪脚本计划( chk_mysql)chk_mysql}
}

脚本文件内容:

╭─root@localhost.localdomain ~/sh
╰─➤  vim check_mysql.sh
...................................................
#!/bin/bash
service mariadb status
if [ $? -nq 0 ];thenservice keepalived stop
..................................................

拓展2:基于web网站的负载均衡高可用如下配置

keepalived:yum install keepalivedvim /etc/keepalived/keepalived.conf! Configuration File for keepalived
#全局配置
global_defs {notification_email {#收件人地址}#邮件服务器
}
VRRP配置DS1
vrrp_instance VI_1 {state MASTER                    #角色类型MASTER|BACKUPinterface ens33                    #网卡名称virtual_router_id 51            #虚拟路由id(需要与BACKUP一致)priority 100                    #优先级advert_int 1                    #没1秒检查一次#nopreempt                        #非抢占模式authentication {auth_type PASS                #认证类型  主备之间必须一样auth_pass 1111                #认证密码  主备之间必须一样}virtual_ipaddress {192.168.254.250/24                #虚拟ip(vip)}
}#LVS配置
virtual_server 192.168.254.250 80 {    delay_loop 3                    #健康检查时间间隔lb_algo rr                        #负载均衡调度算法  lb_kind DR                        #负载均衡转发规则 protocol TCP                    #协议real_server 192.168.254.18 80 {    #要监控的real_server的ip和端口号weight 1                 #权重TCP_CHECK {                    #基于tcp协议的检查connect_timeout 3          #连接时间超时retry 3                    #重连次数delay_before_retry 3    #重连间隔时间}}real_server 192.168.254.19 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}   }
}

转载于:https://www.cnblogs.com/du-z/p/11120825.html

linux 高可用----keepalived+lvs相关推荐

  1. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  2. Heartbeat+ipvsadm+ldirectord组建linux高可用集群

    Heartbeat+ipvsadm+ldirectord组建linux高可用集群 1. 系统环境: RHEL6,组建选择base--默认,developmenttools-选择所有可选包. 对外虚拟I ...

  3. Linux高可用之heartbeat

    Linux高可用之heartbeat heartbeat的概念 HA集群中的相关术语 Heartbeat的组成与原理 HeartBeat组件 heatbeat基本使用 安装heartbeat前的准备 ...

  4. Linux 高可用(HA)集群之Pacemaker详解

    大纲 说明:本来我不想写这篇博文的,因为前几篇博文都有介绍pacemaker,但是我觉得还是得写一下,试想应该会有博友需要,特别是pacemaker 1.1.8(CentOS 6.4)以后,pacem ...

  5. 解决nginx负载均衡高可用keepalived只针对物理机的问题

    在高可用keepalived软件,在默认的情况下仅仅在对方机器宕机或keepalived停掉的时候才会接管业务. 但是在实际工作过程中,例如在nginx负载均衡工作实例中,nginx服务已停止,而ke ...

  6. 14、高可用keepalived搭建及切换

    14.高可用keepalived搭建及切换 keepalived主从切换试验: 1.先搭建192.168.1.20与192.168.1.21的主主架构     192.168.1.76为VIP 2.在 ...

  7. linux高可用小知识点汇总-行云管家

    不少运维小伙伴对于linux高可用相关知识不是很了解,今天我们小编就给大家汇总了一些,希望可以加深大家的了解.仅供参考哦! linux高可用小知识点汇总-行云管家 一.Linux是什么系统? [回答] ...

  8. 云服务器搭建高可用keepalived+nginx+emqx集群

    云服务器搭建高可用keepalived+nginx+emqx集群 一.高可用emqx集群搭建 1 单机搭建emqx 2 配置认证和鉴权插件 3 搭建emqx集群 二.nginx搭建负载均衡 1 ngi ...

  9. keepalived脑裂实践、高可用keepalived补充

    1-脑裂模拟 1)开启防火墙(两台lb开启防火墙,都出现vip10.0.0.3) [root@lb01 ~]# systemctl start firewalld.service [root@lb01 ...

最新文章

  1. 数字孪生白皮书(2019)
  2. Tizen 2.0 SDK 和源码发布
  3. linux gnome 桌面,GNOME Linux桌面
  4. 优化器,SGD+Momentum;Adagrad;RMSProp;Adam
  5. Django环境配置
  6. java调用onnx模型_开源一年多的模型交换格式ONNX,已经一统框架江湖了?
  7. 新职业风口已至!人社部宣布这 10 个职业缺口近千万!
  8. 使用Node.JS,如何将JSON文件读入(服务器)内存?
  9. 2021-03-16 转自知乎专栏 https://zhuanlan.zhihu.com/p/24482664
  10. python字符串对齐.format_python字符串格式化之.format
  11. 凸优化学习笔记(五):凸优化算法、无约束优化算法、有约束优化算法
  12. linux系统用rpm安装vsftpd,linux安装vsftpd和vsftpd配置步骤
  13. Halcon教程第一讲 读取多张图片
  14. javaweb_表单设计
  15. 批量合并工作簿,包含三种合并方式,Excel技能演示
  16. Springboot Swagger2 Unable to infer base url问题解决
  17. 安卓证书库文件BKS制作
  18. Verilog之条件语句、循环语句、块语句与生成语句
  19. 视频断点续传+java视频
  20. 创建fate账户密码

热门文章

  1. wxpython实现界面跳转
  2. Nodejs正则表达式函数之match、test、exec、search、split、replace使用详解
  3. 2.2 Consumer API官网剖析(博主推荐)
  4. asp.net模态窗口返回值
  5. docker 安装 nacos/nacos-server 镜像并配置本地数据库
  6. 训练一个神经网络 能让她认得我
  7. 三大纪律七项注意(Access数据库)
  8. HIVE-分桶表的详解和创建实例
  9. python3动态加载模块的方法实现
  10. 最近新学的小东西和单词