LVS+Keepalived高可用集群

一、理解Keepalived实现原理

1.1 Keepalived使用场景

  • 企业应用中,单台服务器承担应用存在单点故障的危险
  • 单点故障一旦发生,企业服务将发生中断,造成极大的危害

1.2 Keepalived工具介绍

专为LVS和HA设计的一款健康检查工具
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
官方网站:http://www.keepalived.org

1.3 Keepalived实现原理剖析

  • Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
  • VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
    • 由多台路由器组成一个热备组,通过公用的虚拟IP地址对外提供服务
    • 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
    • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

二、Keepalived的部署

2.1 Keepalived案例讲解

  • Keepalived可实现多机热备,每个热备组可有多台服务器
  • 双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
  • 实现基于Web服务的双机热备
    • 漂移地址:192.168.100.10(VIP)
    • 主、备服务器:192.168.100.11、192.168.100.55
    • 提供的应用服务:Web

2.2 Keepalived安装与启动

  • 在LVS群集环境中应用时,也需用到ipvsadm管理工具
  • YUM安装Keepalived
  • 启用Keepalived服务

2.3 配置Keepalived master服务器

  • Keepalived配置目录位于/etc/keepalived/

  • keepalived.conf是主配置文件

    • global_defs{…}区段指定全局参数
    • vrrp_instance实例名称{…}区段指定VRRP热备参数
    • 注释文字以"!"符号开头
    • 目录samples,提供了许多配置样例作为参考
  • 常用配置选项

    • router_id HA_TEST_R1:本路由器(服务器)的名称
    • vrrp_instance V1_1:定义VRRP热备实例
    • state MASTER:热备状态,MASTER表示主服务器
    • interface ens33:承载VIP地址的物理接口(之前的版本是eth0,一定要修改
    • virtual_router_id 1:虚拟路由器的ID号,每个热备组保持一致
  • 常用配置选项

    • priority 100:优先级,数值越大优先级越高(0-100)
    • adver_int 1:通告间隔秒数(心跳频率
    • auth_type PASS:认证类型
    • auth_pass 123456:密码字串
    • virtual_ipaddress{vip}:指定漂移地址(VIP),可以有多个
  • Keepalived备份服务器的配置与master的配置有三个选项不同

    • router_id:设为自有名称
    • state:设为BACKUP (大写
    • priority:值低于主服务器
  • 其他选项与master相同

2.4 Keepalived双机热备效果测试

  • 测试双机热备的效果
    • 主、备均启用Web服务,设置不同内容
    • 先后禁用、启用主服务器的网卡
  • 执行的测试
    • 测试1:使用ping检测14.0.0.11的
    • 测试2:访问http://14.0.0.11,确认可用性及内容变化
    • 测试3:查看日志文件/var/log/messages中的变化

三、LVS+Keepalived高可用群集部署

3.1 案例:负载均衡+高可用群集

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

3.2 案例拓扑

  • 在基于LVS+Keepalived实现的群集结构中,至少包括两台热备的负载调度器,三台以上的节点服务器
    在这里插入图片描述

配置主调度器

【1】全局配置、热备配置

  • 应为主、从调度器实现热备功能,漂移地址使用LVS群集的VIP地址

【2】Web服务器池配置

  • 在Keepalived的热备配置基础上,添加“virtual_server VIP 端口 {…}” 区段来配置虚拟服务器
  • 包括对负载调度算法、群集工作模式、健康检查间隔、真实服务器地址等参数的设置
    【3】重启Keepalived服务

配置从调度器

【1】从调度器的配置与主调度器基本相同

  • 包括全局配置、热备配置、服务器池配置
    【2】只需要调整router_id、state、priority参数
    【3】配置完成后重启Keepalived服务

配置Web节点服务器

  • 在DR模式的LVS集群中,除了需要调整/proc系统的ARP响应参数以外,还需要为虚拟接口lo:0配置VIP地址,并添加一条到VIP的本地路由

测试群集

  • 客户机浏览器中,能够通过群集的VIP地址(14.0.0.11)正常访问Web页面内容
  • 当主、从调度器任何一个失效时,Web站点仍然可以访问
  • 只要服务器池有两台及以上的真实服务器可用,就可以实现访问量的负载均衡
  • 通过主、从调度器 的/var/log/messages日志文件,可以跟踪故障切换流程
  • 可执行“ipvsadm -ln”、“ipvasdm -lnc”操作命令查看负分配情况

四、实操

【1】DR调度服务器 192.168.100.11 keepalived ipvsadm
【3】DR调度服务器 192.168.100.33 keepalived ipvsadm
【5】节点服务器 192.168.100.55 httpd
【6】节点服务器 192.168.100.66 httpd
【2】win 10客户端 192.168.100.20
漂移地址:192.168.100.10

在这里插入图片描述

——————————————DR调度服务器——————————————————
【1】
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0

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

[root@localhost ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
####proc响应关闭重定向功能
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      ###即时生效

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

[root@localhost network-scripts]# vim ifcfg-ens33:0     ###修改VIP地址
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0

[root@localhost network-scripts]# vim ifcfg-ens33     ###修改本地网卡地址
IPADDR=192.168.100.11
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

##########本地的虚拟机改为仅主机模式

#### 配置LVS-DR模式
[root@localhost network-scripts]# cd /etc/init.d

[root@localhost init.d]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10
RIP1=192.168.100.55
RIP2=192.168.100.66
case "$1" in
start)
  /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
  systemctl start ipvsadm
  /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
  /sbin/route add -host $VIP dev ens33:0
  /sbin/ipvsadm -A -t $VIP:80 -s rr
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
  echo "ipvsadm starting -----------------[ok]"
  ;;
  stop)
  /sbin/ipvsadm -C
  systemctl stop ipvsadm
  ifconfig ens33:0 down
  route del $VIP
  echo "ipvsadm stoped -------------------[ok]"
  ;;
  status)
  if [ ! -e /var/lock/subsys/ipvsadm ];then
  echo "ipvsadm stoped---------------"
  exit
        else
        echo "ipvsadm Runnig --------[ok]"
  fi
  ;;
  *)
  echo "Usage: $0 [start|stop|status]"
  exit 1
  esac
  exit 0

[root@localhost init.d]# chmod +x dr.sh

[root@localhost init.d]# service network restart
[root@localhost init.d]# ifconfig     ###有ens33和ens33:0

[root@localhost init.d]# systemctl stop firewalld
[root@localhost init.d]# setenforce 0

[root@localhost init.d]# service dr.sh start


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

[root@localhost ~]# 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 ~]# sysctl -p
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0     ###ens33本地IP地址,ens33:0 VIP

[root@localhost network-scripts]# vim ifcfg-ens33:0     ###修改VIP地址
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0

[root@localhost network-scripts]# vim ifcfg-ens33     ###修改本地网卡地址
IPADDR=192.168.100.33
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

##########本地的虚拟机改为仅主机模式

#### 配置LVS-DR模式
[root@localhost network-scripts]# cd /etc/init.d

[root@localhost init.d]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10
RIP1=192.168.100.55
RIP2=192.168.100.66
case "$1" in
start)
  /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
  systemctl start ipvsadm
  /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
  /sbin/route add -host $VIP dev ens33:0
  /sbin/ipvsadm -A -t $VIP:80 -s rr
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
  echo "ipvsadm starting -----------------[ok]"
  ;;
  stop)
  /sbin/ipvsadm -C
  systemctl stop ipvsadm
  ifconfig ens33:0 down
  route del $VIP
  echo "ipvsadm stoped -------------------[ok]"
  ;;
  status)
  if [ ! -e /var/lock/subsys/ipvsadm ];then
  echo "ipvsadm stoped---------------"
  exit
        else
        echo "ipvsadm Runnig --------[ok]"
  fi
  ;;
  *)
  echo "Usage: $0 [start|stop|status]"
  exit 1
  esac
  exit 0

[root@localhost init.d]# chmod +x dr.sh

[root@localhost init.d]# service network restart

[root@localhost init.d]# ifconfig 
ens33: 192.168.100.33 
ens33:0: 192.168.100.10 

[root@localhost init.d]# service dr.sh start

[root@localhost init.d]# setenforce 0
[root@localhost init.d]# systemctl stop firewalld.service
———————————节点服务器——————————————
###先把两个节点网卡改为仅主机模式

【5】
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-lo ifcfg-lo:0


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


[root@localhost network-scripts]# vim ifcfg-ens33 
IPADDR=192.168.100.55
NETMASK=255.255.255.0
GATEWAY=192.168.100.1


———本地yum源安装httpd-----也可以直接NAT模式yum install httpd -y
[root@localhost network-scripts]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv CentOS-* bak/
[root@localhost yum.repos.d]# vim abc.repo
[abc]
name=test
baseurl=file:///mnt
enabled=1
gpgcheck=0

[root@localhost yum.repos.d]# mount /dev/sr0 /mnt
[root@localhost yum.repos.d]# df -Th
[root@localhost yum.repos.d]# yum install httpd -y
———————————————————————————


[root@localhost yum.repos.d]# cd /etc/init.d/
[root@localhost init.d]# vim web.sh
#!/bin/bash
VIP=192.168.100.10
  case "$1" in
  start)
        ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
        /sbin/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
        sysctl -p >/dev/null 2>&1
        echo "RealServer Start OK"
        ;;
        stop)
                ifconfig lo:0 down
                route del $VIP /dev/null 2>&1
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
                echo "RealServer Stopd"
                ;;
        *)

                echo "Usage:$0 {start|stop}”
                exit 1
        esac
        exit 0

[root@localhost init.d]# chmod +x web.sh 

[root@localhost init.d]# systemctl stop firewalld
[root@localhost init.d]# setenforce 0

[root@localhost init.d]# service network restart
[root@localhost init.d]# ifconfig     ###有ens33和lo:0

[root@localhost init.d]# service web.sh start

[root@localhost init.d]# systemctl  start httpd

[root@localhost init.d]# cd /var/www/html
[root@localhost html]# vim index.html
<h1>this is aaa web</h1>




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

###先把两个节点网卡改为仅主机模式


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


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


[root@localhost network-scripts]# vim ifcfg-ens33 
IPADDR=192.168.100.66
NETMASK=255.255.255.0
GATEWAY=192.168.100.1


[root@localhost yum.repos.d]# cd /etc/init.d/
[root@localhost init.d]# vim web.sh
#!/bin/bash
VIP=192.168.100.10
  case "$1" in
  start)
        ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
        /sbin/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
        sysctl -p >/dev/null 2>&1
        echo "RealServer Start OK"
        ;;
        stop)
                ifconfig lo:0 down
                route del $VIP /dev/null 2>&1
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
                echo "RealServer Stopd"
                ;;
        *)

                echo "Usage:$0 {start|stop}”
                exit 1
        esac
        exit 0

[root@localhost init.d]# service network restart

[root@localhost init.d]# ifconfig 

[root@localhost init.d]# systemctl start httpd.service 

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


[root@localhost init.d]# cd /var/www/html/
[root@localhost html]# vim index.html
<h1>this is bbb web</h1>
#####keepalived部署(在调度服务器上设置)

[root@localhost init.d]# cd /etc/keepalived/     ###进入keepalived配置文件站点目录
[root@localhost keepalived]# vim keepalived.conf 

 10    smtp_server 127.0.0.1                ###邮件服务指向本地
...
 12    router_id LVS_01                ###指定名称,备份服务器不同名称
...
 20     state MASTER             ###备份服务器是BACKUP
 21     interface ens33
 22     virtual_router_id 51       ###组号相同
 23     priority 100              ###优先级备份小于主
...
 29     virtual_ipaddress {
 30         192.168.100.10
 31     }   
...
 34 virtual_server 192.168.100.10 80 {
...
 37     lb_kind DR               ###LVS模式
...
 41     real_server 192.168.100.55 80 {
 42         weight 1
 43         TCP_CHECK {
 44             connect_port 80             ###添加端口
 45             connect_timeout 3
 46             nb_get_retry 3
 47             delay_before_retry 3
 48         }
 49     }
 50     real_server 192.168.100.66 80 {              ###9yy ,p粘贴
 51         weight 1
 52         TCP_CHECK {
 53             connect_port 80
 54             connect_timeout 3
 55             nb_get_retry 3
 56             delay_before_retry 3
 57         }
 58     }
 59 }
###下面的virtual_server全部删除

[root@localhost keepalived]# systemctl start keepalived.service 

###把本地的配置文件复制到第二台服务器
[root@localhost keepalived]# scp keepalived.conf root@192.168.100.33:/etc/keepalived/


【3】
[root@localhost init.d]# vim /etc/keepalived/keepalived.conf 
   router_id LVS_02        ###router_id不相同02,角色身份为BACKUP,优先级90   
    state BACKUP
    priority 90

[root@localhost keepalived]# systemctl start keepalived.service 

####验证结果
###Win10 设为仅主机模式,网络ip改为100网段:192.168.100.20
在这里插入图片描述
网页搜索192.168.100.10
在这里插入图片描述
刷新
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值