欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LVS+Keepalived高可用集群详细部署过程

程序员文章站 2022-03-30 11:47:49
...

一、理解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实现的群集结构中,至少包括两台热备的负载调度器,三台以上的节点服务器
  • 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

LVS+Keepalived高可用集群详细部署过程
——————————————DR调度服务器——————————————————
【1】
[aaa@qq.com ~]# iptables -F
[aaa@qq.com ~]# setenforce 0

[aaa@qq.com ~]# yum install keepalived ipvsadm -y

[aaa@qq.com ~]# 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
[aaa@qq.com ~]# sysctl -p ###即时生效

[aaa@qq.com ~]# cd /etc/sysconfig/network-scripts/
[aaa@qq.com network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0

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

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

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

配置LVS-DR模式

[aaa@qq.com network-scripts]# cd /etc/init.d

[aaa@qq.com 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

[aaa@qq.com init.d]# chmod +x dr.sh

[aaa@qq.com init.d]# service network restart
[aaa@qq.com init.d]# ifconfig ###有ens33和ens33:0

[aaa@qq.com init.d]# systemctl stop firewalld
[aaa@qq.com init.d]# setenforce 0

[aaa@qq.com init.d]# service dr.sh start

【3】
[aaa@qq.com ~]# yum install keepalived ipvsadm -y

[aaa@qq.com ~]# 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

[aaa@qq.com ~]# sysctl -p
[aaa@qq.com ~]# cd /etc/sysconfig/network-scripts/
[aaa@qq.com network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0 ###ens33本地IP地址,ens33:0 VIP

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

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

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

配置LVS-DR模式

[aaa@qq.com network-scripts]# cd /etc/init.d

[aaa@qq.com 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

[aaa@qq.com init.d]# chmod +x dr.sh

[aaa@qq.com init.d]# service network restart

[aaa@qq.com init.d]# ifconfig 
ens33: 192.168.100.33 
ens33:0: 192.168.100.10 

[aaa@qq.com init.d]# service dr.sh start

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

【5】
[aaa@qq.com ~]# cd /etc/sysconfig/network-scripts/
[aaa@qq.com network-scripts]# cp -p ifcfg-lo ifcfg-lo:0


[aaa@qq.com network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0


[aaa@qq.com 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
[aaa@qq.com network-scripts]# cd /etc/yum.repos.d/
[aaa@qq.com yum.repos.d]# mkdir bak
[aaa@qq.com yum.repos.d]# mv CentOS-* bak/
[aaa@qq.com yum.repos.d]# vim abc.repo
[abc]
name=test
baseurl=file:///mnt
enabled=1
gpgcheck=0

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


[aaa@qq.com yum.repos.d]# cd /etc/init.d/
[aaa@qq.com 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

[aaa@qq.com init.d]# chmod +x web.sh 

[aaa@qq.com init.d]# systemctl stop firewalld
[aaa@qq.com init.d]# setenforce 0

[aaa@qq.com init.d]# service network restart
[aaa@qq.com init.d]# ifconfig     ###有ens33和lo:0

[aaa@qq.com init.d]# service web.sh start

[aaa@qq.com init.d]# systemctl  start httpd

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




【6】
[aaa@qq.com ~]# yum install httpd -y

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


[aaa@qq.com ~]# cd /etc/sysconfig/network-scripts/
[aaa@qq.com network-scripts]# cp -p ifcfg-lo ifcfg-lo:0


[aaa@qq.com network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0


[aaa@qq.com network-scripts]# vim ifcfg-ens33 
IPADDR=192.168.100.66
NETMASK=255.255.255.0
GATEWAY=192.168.100.1


[aaa@qq.com yum.repos.d]# cd /etc/init.d/
[aaa@qq.com 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

[aaa@qq.com init.d]# service network restart

[aaa@qq.com init.d]# ifconfig 

[aaa@qq.com init.d]# systemctl start httpd.service 

[aaa@qq.com init.d]# systemctl stop firewalld.service 
[aaa@qq.com init.d]# setenforce 0


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

[aaa@qq.com init.d]# cd /etc/keepalived/     ###进入keepalived配置文件站点目录
[aaa@qq.com 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全部删除

[aaa@qq.com keepalived]# systemctl start keepalived.service 

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


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

[aaa@qq.com keepalived]# systemctl start keepalived.service 

####验证结果
###Win10 设为仅主机模式,网络ip改为100网段:192.168.100.20

LVS+Keepalived高可用集群详细部署过程

网页搜索192.168.100.10
LVS+Keepalived高可用集群详细部署过程
刷新
LVS+Keepalived高可用集群详细部署过程

相关标签: 负载均衡