keepalived双机热备

原创
小哥 2年前 (2023-05-18) 阅读数 42 #大杂烩

目录

keepalived双机热备基础知识

keepalived概述及安装

使用keepalived实现双机热备

主服务器的配置

备用服务器的配置

测试双机热备功能

LVS+Keepalived高可用群集

实验准备

配置主调度器

配置备调度器

配置web

测试负载均衡功能

搭建NFS服务器

测试负载均衡功能


本章将实现如何使用keepalived实现双机热备,包括针对IP地址的故障切换,以及在LVS高可用群集中的热备应用。

keepalived双机热备基础知识

keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能——判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。

keepalived概述及安装

keepalived的官方网站位于 Keepalived for Linux 。在非LVS群集环境中使用时,keepalived也可以作为热备份软件使用。

  • keepalived的热备方式

keepalived采用VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。

一主 + 多备,共用同一个IP地址,但优先级不同。

热备组内的每台路由器都可能成为主路由器,虚拟路由器的IP地址(VIP)可以在热备组内的路由器之间进行转移,所以也称为漂移IP地址。使用keepalived时,漂移地址的实现不需要手动建立虚拟接口配置文件(如 ens33:0),而是由keepalived根据配置文件自动管理。

  • keepalived的安装与服务控制

(1)安装keepalived

在安装方式中选择YUM安装,会自动安装keepalived所需的软件包,除此之外,在LVS群集环境中也会用到ipvsadm管理工具。

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

(2)控制keepalived服务

[root@localhost ~]# systemctl enable keepalived
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

使用keepalived实现双机热备

主、备服务器中都需要安装keepalived。

主服务器的配置

keepalived服务的配置目录位于/etc/keepalived/。其中,keepalived.conf是主配置文件;另外包括一个子目录samples/,提供了许多配置样例作为参考。在keepalived的配置文件中,使用“global_defs {...}”区段指定全局参数,使用“vrrp_instance 实例名称 {...}”区段指定VRRP热备参数,注释文字以“!”符号开头。

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak         //备份主配文件
[root@localhost keepalived]# vim keepalived.conf
global_defs {
......//省略部分内容
   router_id LVS_DEVEL                  //路由器(服务器)名称(建议指定不同的名称区分路由)
}
​
vrrp_instance VI_1 {                    //定义VRRP热备实例
    state MASTER                        //热备状态,MASTER表示主服务器
    interface ens33                     //承载VIP地址的物理接口
    virtual_router_id 51                //虚拟路由器的ID号,每个热备组保持一致
    priority 100                        //优先级,数值越大优先级越高
    advert_int 1                        //通告间隔秒数(心跳频率)
    authentication {                    //认证信息,每个热备组保持一致
        auth_type PASS                  //认证类型
        auth_pass 1111                  //密码字串
    }
    virtual_ipaddress {                 //指定漂移地址(VIP),可以是多个
        200.0.0.100
    }
}

确认上述配置无误,然后启动keepalived服务。实际状态为MASTER的主服务器将为ens33接口自动添加VIP地址,通过IP命令可以查看(注意:ifconfig命令看不到)。

[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# ip a show dev ens33
2: ens33:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:af:af:9d brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.1/24 brd 200.0.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 200.0.0.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::5f65:9c3d:d218:7cea/64 scope link 
       valid_lft forever preferred_lft forever

备用服务器的配置

在同一个keepalived热备组内,所有服务器的keepalived配置文件基本相同,包括虚拟路由器的ID号、认证信息、漂移地址、心跳频率等。不同之处主要在于路由器名称、热备状态、优先级。

  1. 路由器名称(router_id):建议为每个参与热备的服务器指定不同的名称。
  2. 热备状态(state):至少应有一台主服务器,将状态设为MASTER;可以有多台备用的服务器,将状态设为BACKUP。
  3. 优先级(proiority):数值越大则取得VIP控制权的优先级越高,因此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺VIP控制权时发生冲突。

配置备用服务器(可以有多台)时,可以参考主服务器的keepalived.conf配置文件内容,只要修改路由器名称、热备状态、优先级就可以了。

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vim keepalived.conf
global_defs {
......//省略部分内容
   router_id LVS_DEVEL2                 //修改备份路由名称
}
​
vrrp_instance VI_1 {
    state BACKUP                        //修改热备状态(备份)
    interface ens33                     //修改承载VIP地址的物理接口
    virtual_router_id 51
    priority 90                         //优先级,数值应低于主服务器
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        200.0.0.100                     //漂移地址
    }
}

确认配置无误,一样需要启动keepalived服务。此时主服务器仍然在线,VIP地址实际上任然由主服务器控制,其他服务器处于备份状态,因此在备份服务器中将不会为ens33接口添加VIP地址。

[root@localhost keepalived]# ip a show dev ens33
2: ens33:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:3c:d0:8b brd ff:ff:ff:ff:ff:ff
    inet 200.0.0.2/24 brd 200.0.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::595f:84d:a379:7b6e/64 scope link 
       valid_lft forever preferred_lft forever

测试双机热备功能

keepalived的日志消息保存在/var/log/messages文件中,在测试主、备故障自动切换功能时,可以跟踪此日志文件来观察热备状态的变化。

  • 连通性测试

客户机中执行"ping -t 200.0.0.10"命令,能够正常、持续ping通,根据一下操作继续观察测试结果。

  1. 停止主服务器的keepalived服务,发现ping测试只中断了1或2个包即恢复正常,说明已有其他服务器接替VIP地址,并及时响应客户机请求。
  2. 启动主服务器的keepalived服务,发现ping测试只中断了1或2个包即恢复正常,说明主服务器已回复正常,并夺回VIP地址的控制权。
  • 查看日志记录

在执行主、备服务器故障切换时的过程中,分别观察各自的/var/log/messages日志文件,可以看到MASTER、SLAVE状态的迁移记录。

通过上述测试过程,可以发现双机热备已经正常。客户机只要通过VIP地址就可以访问服务器所提供的Web等应用,其中任何一台服务器失效,另一台服务器将会立即接替服务,从而实现高可用性。实际应用中,注意主、备服务器所提供的Web服务内容要保持一致。

LVS+Keepalived高可用群集

keepalived的设计目标是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备。使用keepalived构建LVS群集更加简便易用,主要有事体现在:对LVS负载调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后在重新加入。

实验准备

根据下图配置IP,关闭防火墙,实现keepalived+LVS-DR高可用的负载均衡web群集。

配置主调度器

  • 安装ipvsadm和keepalived包。

    [root@localhost ~]# yum -y install keepalived ipvsadm [root@localhost ~]# systemctl enable keepalived Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

  • 修改内核参数文件,关闭ICMP重定向。

    [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 //设置参数立即生效 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0

  • keepalived.conf配置

    [root@localhost ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived ​ global_defs { ......//省略部分内容   router_id R1 //修改名称 }   ​ vrrp_instance VI_1 {   state MASTER //配置热备状态   interface ens33 //设置承载VIP的物理接口   virtual_router_id 51   priority 100 //主服务器优先级设为100   advert_int 1   authentication {       auth_type PASS       auth_pass 1111   }   virtual_ipaddress {       200.0.0.100 //设置群集VIP地址   } } virtual_server 200.0.0.100 80 { //配置虚拟服务器地址(VIP)、端口   delay_loop 15 //配置健康检查的间隔时间(秒)   lb_algo rr   lb_kind DR //配置直接路由模式   nat_mask 255.255.255.0   ! persistence_timeout 50 //连接保持时间(秒),若启用去掉!号   protocol TCP ​   real_server 200.0.0.3 80 { //第一个web节点的地址、端口       weight 1       TCP_CHECK { //健康检查方式               connect_port 80 //检查的目标端口           connect_timeout 3           nb_get_retry 3           delay_before_retry 3       }   }   real_server 200.0.0.4 80 { //第二个web节点的地址、端口       weight 1       TCP_CHECK {               connect_port 80           connect_timeout 3           nb_get_retry 3           delay_before_retry 3       }   } }
    [root@localhost ~]# systemctl start keepalived [root@localhost ~]# systemctl enable keepalived

配置备调度器

  • 安装ipvsadm和keepalived包。

    [root@localhost ~]# yum -y install keepalived ipvsadm [root@localhost ~]# systemctl enable keepalived Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

  • 修改内核参数文件,关闭ICMP重定向。

    [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 //设置参数立即生效 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0

  • keepalived.conf配置

备份调度器的配置和主调度器的配置基本相同,重点需要修改的有路由器名称、热备状态、优先级。

[root@localhost ~]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
​
global_defs {
......//省略部分内容
   router_id R2                     //修改名称  
}   
​
vrrp_instance VI_1 {
    state BACKUP                    //配置热备状态
    interface ens33                 //设置承载VIP的物理接口
    virtual_router_id 51
    priority 90                     //备调度器优先级设为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        200.0.0.100                 //设置群集VIP地址
    }
}   
​
virtual_server 200.0.0.100 80 {     //配置虚拟服务器地址(VIP)、端口
    delay_loop 15                   //配置健康检查的间隔时间(秒)
    lb_algo rr
    lb_kind DR                      //配置直接路由模式
    nat_mask 255.255.255.0
   ! persistence_timeout 50         //连接保持时间(秒),若启用去掉!号
    protocol TCP
    
    real_server 200.0.0.3 80 {      //第一个web节点的地址、端口
        weight 1
        TCP_CHECK {                 //健康检查方式
                connect_port 80     //检查的目标端口
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    }       
    real_server 200.0.0.4 80 {      //第二个web节点的地址、端口
        weight 1
        TCP_CHECK {
                connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# systemctl enable keepalived

配置web

  • 配置ifcfg-lo:0群集IP。

    [root@localhost ~]# 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 IPADDR=200.0.0.100 NETMASK=255.255.255.255 ONBOOT=yes [root@localhost network-scripts]# ifup lo:0 [root@localhost network-scripts]# ifconfig lo:0 lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536       inet 200.0.0.100 netmask 255.255.255.255       loop txqueuelen 1 (Local Loopback)

  • 修改内核文件,关闭ARP应答。

    [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 ~]# sysctl -p

  • 添加一条VIP本地访问路由。

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

  • 启动httpd服务,创建测试网页。

    [root@localhost ~]# yum -y install httpd [root@localhost ~]# echo 1111111 > /var/www/html/index.html [root@localhost ~]# systemctl start httpd [root@localhost ~]# systemctl enable httpd

web2配置和web1相同,重复操作即可,测试网页可以改成222222用来区分web1和2。

测试负载均衡功能

客户机访问200.0.0.100,断开主调度器的网卡,再次访问查看是否正常

搭建NFS服务器

在nfs主机配置共享存储服务器,提供给两台web服务器的后台网页存储。详情参考LVS。 LVS负载均衡群集_大虾好吃吗的博客-CSDN博客 LVS(Linux Virtual Server,Linux虚拟服务器) https://blog.csdn.net/qq_61116007/article/details/125894261

  • 启动nfs-utils、rpcbind软件包

    [root@localhost ~]# systemctl enable nfs Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service. [root@localhost ~]# systemctl enable rpcbind

  • 设置共享目录

    [root@localhost ~]# mkdir -p /opt/wwwroot [root@localhost ~]# vim /etc/exports /opt/wwwroot   200.0.0.0/24(rw,sync,no_root_squash)

  • 启动服务并查看本机发布的NFS共享目录。

    [root@localhost ~]# systemctl restart rpcbind [root@localhost ~]# systemctl restart nfs [root@localhost ~]# showmount -e Export list for localhost.localdomain: /opt/wwwroot 200.0.0.0/24 [root@localhost ~]# echo 666 > /opt/wwwroot/index.html

  • 两台web挂载共享目录

    [root@localhost ~]# systemctl enable rpcbind [root@localhost ~]# systemctl restart rpcbind [root@localhost ~]# mount 200.0.0.5:/opt/wwwroot /var/www/html

测试负载均衡功能

客户机访问200.0.0.100,查看网页是否为共享内容。

关闭主调度器和web1的网卡,访问网页是否依然为共享内容,访问成功,实验完成。

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门