LVS负载均衡之--Keepalived模式(超详细)

news/2024/7/9 23:43:00 标签: lvs, 负载均衡, 服务器

一.Keepalived概述

  • Keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能-----判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集中
  • Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器
     

1.1Keepalived的工作原理

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
 

1.2Keepalived体系主要模块及其作用

   keepalived体系架构中主要有三个模块,分别是core、check和vrrp。

  • core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
  • vrrp模块:是来实现VRRP协议的。
  • check模块:负责健康检查,常见的方式有端口检查及URL检查。

1.3 VRRP (虚拟路由冗余协议)

vrrp会把多台路由器组成一个虚拟路由组vrid,VRRP会生成一个虚拟路由(包含虚拟IP和虚拟MAC,局域网内用户不关心哪个是主哪个是备,他们只用虚拟路由器的的虚拟IP作为他们的网关)实际上虚拟IP是承载再master路由器,也就是说实际的数据通过master进行转发,backup是通过优先级来决定哪个是master路由,优先级最大的那台就是master,backup只是用来监听master定时发来的vrrp报文,如果超时未收到master发来的vrrp报文 backup就会抢占master 虚拟IP也就会一漂移到backup上
 

二、LVS负载均衡之--Keepalived模式实例部署

部署准备

服务器:192.168.50.22     虚拟VIP:192.168.50.23

服务器:192.168.50.41

Web服务器1:192.168.50.56

Web服务器2:192.168.50.57

 部署主服务器配置(192.168.50.22)

必须执行操作

1.#关闭防火墙

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0

[root@localhost keepalived]# modprobe ip_vs
[root@localhost keepalived]# cat /proc/net/ip_vs

2.#安装Keepalived服务

[root@localhost ~]# yum -y install ipvsadm keepalived

3.#备份keeplived.conf文件

[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# ls

4.#修改配置keeplived.conf文件

[root@localhost keepalived]# vim keepalived.conf

--10行--修改,邮件服务指向本地
  smtp_server 127.0.0.1

--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02

  router_id LVS_01

--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接

   #vrrp_strict

vrrp_instance VI_1 {                #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state MASTER
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致    
    virtual_router_id 10
    #nopreempt        #如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    priority 100
    advert_int 1                    #通告间隔秒数(心跳频率)
    authentication {                #定义认证信息,每个热备组保持一致
        auth_type PASS                #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass 123
    }
    virtual_ipaddress {                #指定群集vip地址
        192.168.50.23
    }
}

--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.50.23 80 {
    delay_loop 6                    #健康检查的间隔时间(秒)
    lb_algo rr                        #指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 0            #连接保持时间(秒)
    protocol TCP                    #应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.50.56 80 {
        weight 1                    #节点的权重
--45行--删除,添加以下健康检查方式        
        TCP_CHECK {
            connect_port 80            #添加检查的目标端口
            connect_timeout 3        #添加连接超时(秒)
            nb_get_retry 3            #添加重试次数
            delay_before_retry 3    #添加重试间隔
        }
    }

    real_server 192.168.50.57 80 {        #添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
##删除后面多余的配置##
}

5.#刷新服务并查看虚拟网卡的IP

[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip addr show dev ens33 

6.#调整响应参数

[root@localhost keepalived]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

 #刷新一下

 [root@localhost keepalived]# sysctl -p

7.#配置策略并且启动服务

 [root@localhost keepalived]# ipvsadm-save >/etc/sysconfig/ipvsadm
 [root@localhost keepalived]# systemctl start ipvsadm

8.#清空ipvsadm,并做策略

 [root@localhost keepalived]# ipvsadm -C
[root@localhost keepalived]# ipvsadm -A -t 192.168.50.23:80 -s rr
[root@localhost keepalived]#  ipvsadm -a -t 192.168.50:23:80 -r 192.168.50.56:80 -g
illegal virtual server address[:port] specified
[root@localhost keepalived]#  ipvsadm -a -t 192.168.50.23:80 -r 192.168.50.56:80 -g
[root@localhost keepalived]#  ipvsadm -a -t 192.168.50.23:80 -r 192.168.50.57:80 -g
[root@localhost keepalived]# ipvsadm 

[root@localhost keepalived]# ipvsadm -ln

 [root@localhost keepalived]# ipvsadm-save >/etc/sysconfig/ipvsadm

部署备服务器配置(192.168.50.41)

注:所有部署参照上方部署主服务器配置

部署节点服务器

Web服务器1:192.168.50.56

Web服务器2:192.168.50.57

Web服务器2:192.168.50.56

1.#关闭防火墙

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

2.#安装并开启httpd服务

[root@localhost ~]#yum -y install httpd

[root@localhost ~]#systemctl start httpd

3.#配置站点文件

[root@localhost ~]# vim /var/www/html/index.html

 4.#配置虚拟IP

[root@localhost ~]#  /etc/sysconfig/network-scripts/ifcfg-lo:0
[root@localhost opt]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0

DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.50.23
NETMASK=255.255.255.255

5.#重启服务并配置虚拟网卡
[root@localhost network-scripts]# systemctl restart network

[root@localhost ~]# ifup lo:0
[root@localhost ~]# ifconfig lo:0

6.#设置路由

[root@localhost ~]# route add -host 192.168.50.23 dev lo:0
[root@localhost ~]# route -n

7. #调整响应参数并查看

[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

 [root@localhost ~]# sysctl -p            

注:Web服务器2:192.168.50.57 同Web服务器2配置

浏览器验证 

 过一会刷新


http://www.niftyadmin.cn/n/4953693.html

相关文章

抖音火山引擎推出免费域名DNS和公共DNS服务

抖音旗下的云计算服务火山引擎最近推出了"TrafficRoute DNS 套件"服务,其中包括两款产品,对软希网来说非常有用。 1.域名DNS: 这是一个用于网站域名的DNS服务,可以加速域名解析速度,从而提升网站的速度。如…

2023年,IT人都在追寻什么样的科技和技术?

摘要: 随着科技的不断发展,IT领域也在以惊人的速度发展。每年都会有新的技术和趋势出现,成为IT人士关注和追逐的对象。那么,在2023年,IT人都在追寻什么样的科技和技术呢?本文将探索2023年IT 人士最热衷的科…

【LeetCode】2235.两整数相加

题目 给你两个整数 num1 和 num2,返回这两个整数的和。 示例 1: 输入:num1 12, num2 5 输出:17 解释:num1 是 12,num2 是 5 ,它们的和是 12 5 17 ,因此返回 17 。示例 2&…

【C#学习笔记】C#特性的继承,封装,多态

文章目录 封装访问修饰符静态类和静态方法静态构造函数 继承继承原则sealed修饰符里氏替换原则继承中的构造函数 多态接口接口的实例化 抽象类和抽象方法抽象类和接口的异同 虚方法同名方法new覆盖的父类方法继承的同名方法 运行时的多态性编译时的多态性 照理继承封装多态应该…

Java程序设计——拼图游戏

建立四个类 LeftjPanel、LoginPintu、MainJFranme、RightJPanel 在准备一个图片 LeftjPane类 import java.awt.Image; import java.net.MalformedURLException; import java.net.URL;import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel;…

五、修改官方FreeRTOS例程(STM32F1)

1、官方源码下载 (1)进入FreeRTOS官网:FreeRTOS官网 (2)下载FreeRTOS。(选择带示例的下载) 2、删减目录 (1)下载后解压的FreeRTOS文件如下图所示。 (2)删除下图中红框勾选的文件。 FreeRTOS-Plus,FreeRTOS的生态文件,非必需的。tools&…

双线程利用wait、notifyAll实现交替打印输出

wait与notify wait与notify以及notifyAll都是Object类中的方法,不是Thread类中的方法。三个方法都必须写在同步代码块中。方法的调用者必须是 synchronized 用的锁对象。wait方法调用 表示让当前线程进入一个等待状态,同时释放synchronized 的锁&#x…