小阿轩yx-LVS+Keepalived群集

小阿轩yx-LVS+Keepalived群集

Keepalived 双机热备份基础知识

  • 起初是专门针对 LVS 设计的一款强大的辅助工具
  • 主要用来提供故障切换(Failover)和健康检査(HealthChecking)功能---判断LVS 负载调度器、节点服务器的可用性
  • 当 master 主机出现故障及时切换到backup 节点保证业务正常
  • 当master 故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点

Keepalived 概述及安装

官方网站 http://www.keepalived.org/

  • 非 LVS 群集环境中使用时,Keepalived 也可以作为热备软件使用
Keepalived 的热备方式
  • 采用 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。
  • VRRP是针对路由器的一种备份解决方案---由多台路由器组成一个热备组,通过共用的虚拟 IP地址对外提供服务;
  • 每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态。
  • 若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务
  • 热备组内的每台路由器都可能成为主路由器,虚拟路由器的IP地址(VIP)可以在热备组内的路由器之间进行转移,别称:漂移 IP地址。
  • 使用 Keepalived 时,漂移地址的实现不需要手动建立虚接口配置文件(如 ens33:0),而是由Keepalived 根据配置文件自动管理。
Keepalived 的安装与服务控制

安装 Keepalived

首先关闭防火墙、内核机制,还要再关闭网络软件包

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

安装 Keepalived ipvsadm 所需软件包

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

安装之后设置开机启动

[root@localhost ~]# systemctl enable keepalived

使用 Keepalived 实现双机热备

  • 基于 VRRP的热备方式,Keepalived可以用作服务器的故障切换
  • 每个热备组可以有多台服务器---最常用的就是双机热备。
  • 双机热备方案中,故障切换主要针对虚拟 IP地址的漂移来实现,因此能够适用于各种应用服务器(不管是 Web、FTP、Mail,还是 SSH、DNS......)。
  • 主、备服务器中都需要安装Keepalived,使用 YUM 方式安装 httpd 提供 Web 服务。
主服务器的配置
  • Keepalived 服务的配置目录位于/etc/keepalived/。
  • keepalived.conf 是主配置文件。
  • 另外包括一个子目录 samples/
  • 在 Keepalived 的配置文件中,使用"global defs {...}"区段指定全局参数,使用vrrp_instance 实例名称{...}"区段指定 VRRP 热备参数,注释文字以"!"符号开头。

关闭防火墙

[root@localhost ~]# systemctl stop firewalld

进入keepalived文件

[root@localhost ~]# cd /etc/keepalived/

复制keepalived文件

[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak

全局定义又包括两个子配置

[root@localhost keepalived]# vim keepalived.conf
//全局定义
global_defs {
     //本路由器(服务器)的名称
     router_id HA_TEST_R1
     notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_01
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

//定义 VRRP 热备实例
vrrp_instance VI_1 {
    //热备状态,MASTER 表示主服务器
    state MASTER
    //承载 VIP 地址的物理接口
    interface ens33
    //虚拟路由器的ID号,每个热备组保持一致
    virtual_router_id 1
    //优先级,数值越大优先级越高
    priority 100
    //通告间隔秒数(心跳频率)
    advert_int 1
    //认证信息,每个热备组保持一致
    authentication {
        //认证类型
        auth_type PASS
        //密码字串
        auth_pass 1111
    }
    //指定漂移地址(VIP),可以有多个
    virtual_ipaddress {
        192.168.10.172
    }
}

vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播,如果配置了此参数,vip可以漂移到这台服务器,但是ping vip不通,因此需要将此参数去掉

notification_email: 表示keepalived在发生诸如切换操作时需要发送email通知以及email发送给哪些邮件地址邮件地址可以多个每行一个

notification_email_from admin@example.com: 表示发送通知邮件时邮件源地址是谁

smtp_server 127.0.0.1: 表示发送email时使用的smtp服务器地址这里可以用本地的sendmail来实现

smtp_connect_timeout 30: 连接smtp连接超时时间

router_id node1: 机器标识,fa

启动 Keepalived 服务

[root@localhost keepalived]# systemctl start keepalived

用 ip 命令查看自动添加 VIP 地址

[root@localhost keepalived]# ip a
2: ns33: <BROADCAST,MULTICAST,UP, LOWER UP>mtu 1500 qdisc pfifo fast state UP qlen1000
    link/ether 00:0c:29:93 :80:fb brd ff:ff:ff:ff:ff:ff
    inet 172.16.16.173/24 brd 172.16.16.255 scope global ens33
        valid lft forever preferred lft forever
    //自动设置的 VIP 地址
    inet 172.16.16.172/32 scope global ens33
        valid lft forever preferred lft forever
    inet6 fe80::56be:f27:2b9b:823e/64 scope link
        valid lft forever preferred lft forever
备用服务器的配置

同一个 Keepalived 热备组中,所有服务器 Keepalived 配置文件基本相同,包括虚拟路由器

  • ID 号
  • 认证信息
  • 漂移地址
  • 心跳频率

不同之处主要在于

  • 路由器名称
  • 热备状态
  • 优先级

路由器名称

  • 建议为每个参与热备的服务器指定不同的名称

热备状态

  • 至少应有一台主服务器,将状态设为MASTER;可以有多台备用的服务器,将状态设为 BACKUP

优先级

  • 数值越大则取得 VIP 控制权的优先级越高,因此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺 VIP 控制权时发生冲突

配置备用服务器(可以有多台)时,可以参考主服务器的keepalived.conf 配置文件内容

只需修改

  • 路由器名称
  • 热备状态
  • 优先级

关闭防火墙、内核机制,还要再关闭网络软件包

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

进入 keepalived

[root@localhost ~]# cd /etc/keepalived/

复制 keepalived 文件

[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak

修改 keepalived 文件

[root@localhost keepalived]# vi keepalived.conf
global_defs {
     //本路由器(服务器)的名称
     router_id HA_TEST_R2
}
     notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   #vrrp_strict
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_02
}

vrrp_instance VI_1 {
    //热备状态,BACKUP表示备用服务器
    state BACKUP
    interface ens33
    virtual_router_id 1
    //优先级,数值应低于主服务器
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.172
    }
}

启动 Keepalived 服务

[root@localhost ~]# systemctl start keepalived

使用 ip 命令查看地址

[root@localhost keepalived]# ip a
2: ns33: <BROADCAST,MULTICAST,UP, LOWER UP>mtu 1500 qdisc pfifo fast state UP qlen1000
    link/ether 00:0c:29:93 :80:fb brd ff:ff:ff:ff:ff:ff
    inet 172.16.16.174/24 brd 172.16.16.255 scope global ens33
        valid lft forever preferred lft forever
    inet6 fe80::56be:f27:2b9b:823e/64 scope link
        valid lft forever preferred lft forever

使用 curl 命令测试虚拟 ip 连通性

[root@localhost ~]# curl 192.168.10.172
测试双机热备功能

Keepalived 的日志消息保存在/var/log/messages 文件中,在测试主、备故障自动切换功能时,可以跟踪此日志文件来观察热备状态的变化。以针对连通性和 Web 服务的测试为例

连通性测试

  • 在客户机中执行"ping-t 172.16.16.172"命令,能够正常、持续 ping通,根据以下操作继续观察测试结果。
  • 停止启用主服务器的 Keepalived 服务,发现 ping 测试只中断了1或2个包即恢复正常,说明己有其他服务器接替 VIP地址,并及时响应客户机请求。
  • 重新启用主服务器的 Keepalived 服务,发现 ping 测试再次中断1或2个包即恢复正常,说明主服务器已恢复正常,并夺回 VIP 地址的控制权。

web访问测试

  • 客户机中访问 http://172.16.16.172/,将看到由主服务器 172.16.16.173 提供的网页文档
  • 停止启用主服务器的Keepalived 服务,再次访问上述 Web 服务,将看到由备用服务器 172.16.16.174 提供的网页文档,说明 VIP 地址已切换至备用服务器
  • 重新启用主服务器的 Keepalived 服务,再次访问上述 Web 服务,将看到重新由主服务器 172.16.16.173 提供的网页文档,说明主服务器已重新夺取 VIP 地址

查看日志记录

  • 在执行主、备服务器故障切换的过程中,分别观察各自的/var/log/messages 日志文件,可以看到 MASTER、SLAVE 状态的迁移记录。
  • 主服务器中,Keepalived 服务状态先变为"stop",移除 VIP 地址,恢复后重新变为 MASTER
  • 备用服务器中,状态先切换为 MASTER,待主服务器恢复后再交回控制权

LVS+Keepalived 高可用群集

  • Keepalived 的设计目标是构建高可用的 LVS 负载均衡群集
  • 可以调用 ipvsadm 工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备。
  • 使用Keepalived 构建 LVS 群集更加简便易用

主要优势体现

  • 对LVS负载调度器实现热备切换,提高可用性;
  • 对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。
  • 使用 Keepalived 构建 LVS 群集时,也需要用到 ipvsadm 管理工具
  • 但大部分工作会由 Keepalived 自动完成

配置主调度器

全局配置、热备配置

关闭防火墙、内核机制,还要关闭网络软件包

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

安装 Keepalived ipvsadm 软件包

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

启动 Keepalived 服务

[root@localhost ~]# systemctl start keepalived

进入 Keepalived 目录并复制 Keepalived 文件

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

主服务器 Keepalived 配置

[root@localhost keepalived]# vim keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   //注释掉
   #vrrp_strict
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   //主调度器的名称
   router_id LVS_01
}

vrrp_instance VI_1 {
    //主调度器的热备状态
    state MASTER
    interface ens33
    virtual_router_id 51
    //主调度器的优先级
    priority 100
    advert_int 1
    authentication {
        //主、从热备认证信息
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        //指定群集 VIP 地址
        192.168.10.172
    }
}

virtual_server 192.168.10.172 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
!    persistence_timeout 50
    protocol TCP

    real_server 192.168.10.103 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.10.104 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

persistence_timeout 50:这个参数的意义是保持客户端的请求在这个时间段内全部发到同一个真实服务器

主服务器内核参数配置

[root@localhost ~]# vim /etc/sysctl.conf
//在末尾添加
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

重载

[root@localhost ~]# sysctl -p

重启 Keepalived 服务

[root@localhost keepalived]# systemctl restart keepalived

[root@localhost keepalived]# ip add show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ae:7f:64 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.101/24 brd 172.16.16.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.172/32 scope global ens33
       valid_lft forever preferred_lft forever

配置从调度器

与主调度器基本相同,也包括

  • 全局配置
  • 热备配置
  • 服务器池配置

只需调整下面参数

  • router_id
  • state
  • priority

关闭防火墙、内核机制,还要关闭 NetworkManager

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

安装 Keepalived 服务

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

启动服务

[[root@localhost ~]# systemctl start keepalived

进入 Keepalived 目录

[root@localhost ~]# cd /etc/keepalived/

复制 Keepalived 文件

[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak

修改 Keepalived 文件

[root@localhost keepalived]# vim keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   #vrrp_strict
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   //从调度器名称
   router_id LVS_02
}

vrrp_instance VI_1 {
    //从调度器热备状态
    state BACKUP
    interface ens33
    virtual_router_id 51
    //从调度器优先级
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.172
    }
}

virtual_server 192.168.10.172 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
!    persistence_timeout 50
    protocol TCP

    real_server 192.168.10.101 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.10.102 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

从调度器内核参数的配置

[root@localhost ~]# vim /etc/sysctl.conf
//在末尾添加
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

重载

[root@localhost ~]# sysctl -p

重启 Keepalived 服务

[root@localhost keepalived]# systemctl restart keepalived
服务器池配置

web01 服务器配置

关闭防火墙

[root@localhost ~]# systemctl stop firewalld

安装 httpd 服务

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

进入网络目录

[root@localhost ~]# cd /etc/sysconfig/network-scripts/

复制 lo 文件

[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0

修改 lo:0 文件

[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.10.172
NETMASK=255.255.255.255
ONBOOT=yes

添加配置文件

[root@localhost network-scripts]# vim /etc/rc.local
/sbin/route add -host 192.168.10.172 dev lo:0

添加路由

[root@localhost network-scripts]# route add -host 192.168.10.172 dev lo:0

内核参数设置

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

添加测试页面

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

重启网络服务

[root@localhost network-scripts]# systemctl restrt network

web02 服务配置

关闭防火墙

[root@localhost ~]# systemctl stop firewalld

安装 httpd 服务

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

进入 network 目录

[root@localhost ~]# cd /etc/sysconfig/network-scripts/

复制 lo 文件

[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0

修改 lo:0 文件

[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.10.172
NETMASK=255.255.255.255
ONBOOT=yes

添加配置文件

[root@localhost network-scripts]# vim /etc/rc.local
/sbin/route add -host 192.168.10.172 dev lo:0

内核参数设置

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

添加测试页面

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

添加路由

[root@localhost network-scripts]# route add -host 192.168.10.172 dev lo:0

重启服务

[root@localhost network-scripts]# systemctl restrt network
测试LVS+Keepalived高可用性

客户端访问网站

[root@localhost ~]# curl 192.168.10.172

刷新页面并观察网页的变化

客户端使用脚本测试

[root@localhost ~]# for i in $(seq 10);do curl http://192.168.10.172;done

生产环境中可以使用NFS服务器保证网站代码的一致性,在测试环境中为了观察效果,web服务器池中的网站代码可以不一样,更加便于观察实验效果。

测试计算机不要使用master调度器,在master调度器上访问VIP时,调度器不会将访问的请求调度到web服务器,而是自己尝试解析;在web服务器上测试时只能访问到自己的网页,无法实现调度。所以客户端一定要使用独立的测试计算机,或者使用处于BACKUP状态的调度器。

小阿轩yx-LVS+Keepalived群集

相关推荐
Jackey_Song_Odd39 分钟前
解决Ubuntu下无法装载 Windows D盘的问题
linux·ubuntu
乔巴不是狸猫1 小时前
第11周作业
linux
Bessssss2 小时前
centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!
linux·运维·centos
silver6873 小时前
Linux 下的 GPT 和 MBR 分区表详解
linux
R-sz3 小时前
14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误“
linux·python·centos
code_abc3 小时前
Shell 脚本编程基础:变量
linux
星如雨落4 小时前
Linux shell脚本对常见图片格式批量转换为PDF文件
linux·shell
冰红茶兑滴水4 小时前
云备份项目--工具类编写
linux·c++
董健正4 小时前
centos制作离线安装包
linux·运维·centos
猫猫的小茶馆4 小时前
【数据结构】数据结构整体大纲
linux·数据结构·算法·ubuntu·嵌入式软件