Keepalived高可用、Keepalived+LVS高可用调度器

Stella981
• 阅读 1024

Keepalived高可用

环境准备:

准备三台RHEL7虚拟机,2台做Web服务器(部署Keepalived实现Web服务器的高可用),Web服务器的浮动VIP地址为192.168.4.80,1台作为客户端(proxy)。

配置主机名、IP和yum源:

  1. proxy (eth0:192.168.4.5)
  2. web1 (eth0:192.168.4.100)
  3. web2 (eth0:192.1.68.4.200)

web1和web2部署默认网页页面

(以web1为例)

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

[root@web1 ~]# echo "192.168.4.100" > /var/www/html/index.html //注:web2写入不同的页面内容“192.168.4.200”

[root@web1 ~]# systemctl restart httpd

[root@web1 ~]# systemctl enable httpd

web1和web2安装Keepalived

[root@web1 ~]# yum -y install keepalived

[root@web2 ~]# yum -y install keepalived

配置文件/etc/keepalived/keepalived.conf 部分内容解析:

//全局配置

global_defs {

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_DEVEL      //设置id,用于标识主机

vrrp_skip_check_adv_addr

vrrp_strict

vrrp_garp_interval 0

vrrp_gna_interval 0

}

//浮动IP配置

vrrp_instance VI_1 {

state MASTER           //状态。MASTER或BACKUP。仅决定初始的状态,实际状态由优先级决定

interface eth0             //网络接口名称

virtual_router_id 51    //组。号码一样为同一组。主备服务器组号必须一致(在同一组内比较优先级)

priority 100                 //服务器优先级,优先级高优先获取VIP

advert_int 1                //每1秒比较优先级

authentication {          //添加密码认证(避免攻击者设置相同组号,设置高优先级从而成为主服务器 

auth_type PASS

auth_pass 1111         //主备服务器密码必须一致

}

virtual_ipaddress {      //谁是主服务器谁获得该VIP

192.168.200.16 

192.168.200.17

192.168.200.18

}

}

 ......

web1和web2修改keepalived配置文件

注意:本实验中,32行之后的集群相关配置全删掉 

[root@web1 ~]# vim /etc/keepalived/keepalived.conf

...... 

router_id web1 

......

virtual_ipaddress {

192.168.4.80     //浮动IP

}

[root@web2 ~]# vim /etc/keepalived/keepalived.conf

......

router_id web2

......

state BACKUP     //web2为备份服务器 

......

priority 50           //设置优先级小于web1的优先级(100)

......

virtual_ipaddress {

192.168.4.80

}

重启keepalived服务

[root@web1 ~]# systemctl restart keepalived

[root@web2 ~]# systemctl restart keepalived

检查VIP:

[root@web1 ~]# ip a s eth0 //使用ip addr show命令查看VIP。ifconfig命令查不到VIP

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 52:54:00:20:21:7b brd ff:ff:ff:ff:ff:ff

inet 192.168.4.100/24 brd 192.168.4.255 scope global eth0

valid_lft forever preferred_lft forever

inet 192.168.4.80/32 scope global eth0 //浮动IP在web1主机上

valid_lft forever preferred_lft forever

inet6 fe80::34ae:6e89:a7f:f845/64 scope link

valid_lft forever preferred_lft forever

[root@web2 ~]# ip a s eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 52:54:00:4e:86:ab brd ff:ff:ff:ff:ff:ff

inet 192.168.4.200/24 brd 192.168.4.255 scope global eth0

valid_lft forever preferred_lft forever

inet6 fe80::1142:46d2:cc3b:ea58/64 scope link 

valid_lft forever preferred_lft forever

配置防火墙和SELinux

注意:每次启动keepalived会自动添加一个drop的防火墙规则,需要清空!

[root@web1 ~]# iptables -F

[root@web1 ~]# setenforce 0

[root@web2 ~]# iptables -F

[root@web2 ~]# setenforce 0 

[root@proxy ~]# ping 192.168.4.80 //VIP可ping通

测试

模拟web1故障:

[root@web1 ~]# poweroff //将web1关机

[root@web2 ~]# ip a s eth0

 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 52:54:00:4e:86:ab brd ff:ff:ff:ff:ff:ff

inet 192.168.4.200/24 brd 192.168.4.255 scope global eth0 

valid_lft forever preferred_lft forever 

inet 192.168.4.80/32 scope global eth0 //浮动IP自动飘到了web2主机上 

valid_lft forever preferred_lft forever 

inet6 fe80::1142:46d2:cc3b:ea58/64 scope link  

valid_lft forever preferred_lft forever

模拟web1故障排除:

[root@room9pc01 ~]# virsh start web1 //再将web1开机,模拟故障排除 

[root@web1 ~]# ip a s eth0 

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 

link/ether 52:54:00:20:21:7b brd ff:ff:ff:ff:ff:ff 

inet 192.168.4.100/24 brd 192.168.4.255 scope global eth0 

valid_lft forever preferred_lft forever 

inet6 fe80::34ae:6e89:a7f:f845/64 scope link  

valid_lft forever preferred_lft forever 

[root@web1 ~]# systemctl start keepalived.service //再启动keepalived服务

[root@web1 ~]# iptables -F 

[root@web1 ~]# ip a s eth0 

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 52:54:00:20:21:7b brd ff:ff:ff:ff:ff:ff

inet 192.168.4.100/24 brd 192.168.4.255 scope global eth0 

valid_lft forever preferred_lft forever 

inet 192.168.4.80/32 scope global eth0 //浮动IP飘回到web1主机

valid_lft forever preferred_lft forever

inet6 fe80::34ae:6e89:a7f:f845/64 scope link  

valid_lft forever preferred_lft forever 

Keepalived+LVS调度器高可用

使用Keepalived为LVS调度器提供高可用,防止LVS调度器单点故障: 

  • LVS1调度器(proxy1)IP为192.168.4.5
  • LVS2调度器(proxy2)IP为192.168.4.6
  • 虚拟服务器VIP为192.168.4.15
  • 真实Web服务器IP为192.168.4.100、192.168.4.200
  • 使用加权轮询调度算法,真实web服务器权重不同

  

环境准备 

使用5台RHEL虚拟机,都配置好yum,1台作为客户端、2台作为LVS调度器、2台作为Real Server (web服务器),拓扑如下:

 Keepalived高可用、Keepalived+LVS高可用调度器

配置好如下IP:

主机名

IP

client

eth0:192.168.4.10/24

proxy1

eth0:192.168.4.5/24

proxy2

eth0:192.168.4.6/24

web1

eth0:192.168.4.100/24

web2

eth0:192.168.4.200/24

即:在前面实验基础上再新增一台proxy2(192.168.4.6),关闭web1和web2的keepalived服务。

[root@web1 ~]# systemctl stop keepalived 

[root@web2 ~]# systemctl stop keepalived 

[root@proxy ~]# hostnamectl set-hostname proxy1 

[root@room9pc01 ~]# virsh start --console proxy2 

[root@localhost ~]# hostnamectl set-hostname proxy2

[root@localhost ~]# nmcli con modify eth0 ipv4.method manual ipv4.addresses 192.168.4.6/24 connection.autoconnect yes

[root@localhost ~]# nmcli con up eth0

[root@proxy2 ~]# scp 192.168.4.5:/etc/yum.repos.d/my.repo /etc/yum.repos.d/

[root@proxy2 ~]# yum repolist  

web1和web2配置VIP并防止IP冲突 

(注:proxy1和proxy2不手动配置VIP,而是由keepalived自动配置) 

web1配置:(web2同样操作) 

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

[root@web1 network-scripts]# cp ifcfg-lo{,:0} 

注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样。

[root@web1 network-scripts]# vim ifcfg-lo:0

DEVICE=lo:0

IPADDR=192.168.4.15

NETMASK=255.255.255.255

NETWORK=192.168.4.15 

BROADCAST=192.168.4.15

ONBOOT=yes

NAME=lo:0 

注意:这里因为web1也配置与调度器一样的VIP地址,默认肯定会出现地址冲突。写入这四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应。

[root@web1 ~]# vim /etc/sysctl.conf

 末尾添加4行:

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.lo.arp_ignore = 1 

net.ipv4.conf.lo.arp_announce = 2 

net.ipv4.conf.all.arp_announce = 2 

#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应。本机不要向外宣告自己的lo回环地址是192.168.4.15

重启网络服务,设置防火墙与SELinux

[root@web1 ~]# systemctl restart network

[root@web1 ~]# systemctl stop firewalld

[root@web1 ~]# setenforce 0

两台LVS调度器安装Keepalived、ipvsadm

注:两台LVS调度器相同操作

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

[root@proxy1 ~]# systemctl enable keepalived //开机自启keepalived 

[root@proxy1 ~]# ipvsadm -C //清除所有规则 

[root@proxy1 ~]# ipvsadm -Ln //查看规则

配置Keepalived实现LVS(DR模式)调度器高可用

LVS1调度器(proxy1)配置Keepalived:

[root@proxy1 ~]# vim /etc/keepalived/keepalived.conf

......

router_id LVS1

......

virtual_ipaddress {

192.168.4.15 

}

//设置ipvsadm的VIP规则

virtual_server 192.168.4.15 80 {

delay_loop 6

lb_algo wrr     //LVS调度算法:wrr 加权轮询调度

lb_kind DR     //LVS模式:DR 直接路由模式

#persistence_timeout 50        //此行的作用是保持连接,即客户端在一定时间内始终访问相同服务器。为实验效果所以此处注释。

protocol TCP

//设置后端web1服务器RIP

real_server 192.168.4.100 80 {

weight 1   //权重 

TCP_CHECK {   //健康检查

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

//设置后端web2服务器RIP

real_server 192.168.4.200 80 {

weight 2

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

LVS2调度器(proxy2)配置Keepalived:

[root@proxy1 ~]# scp /etc/keepalived/keepalived.conf 192.168.4.6:/etc/keepalived/keepalived.conf

[root@proxy2 ~]# vim /etc/keepalived/keepalived.conf

 ......

router_id LVS2

......

state BACKUP

......

priority 50 

......

启动proxy1和proxy2的keepalived

[root@proxy1 ~]# systemctl restart keepalived 

[root@proxy1 ~]# iptables -F

[root@proxy2 ~]# systemctl restart keepalived

[root@proxy2 ~]# iptables -F

测试

//已实现加权轮询调度:

[root@client ~]# curl 192.168.4.15

192.168.4.100

[root@client ~]# curl 192.168.4.15

192.168.4.200

[root@client ~]# curl 192.168.4.15

192.168.4.200

[root@client ~]# curl 192.168.4.15 

192.168.4.100 

[root@client ~]# curl 192.168.4.15

192.168.4.200

[root@client ~]# curl 192.168.4.15

192.168.4.200

//已实现LVS调度器高可用:

[root@proxy2 ~]# ip a s eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 52:54:00:af:04:25 brd ff:ff:ff:ff:ff:ff

inet 192.168.4.6/24 brd 192.168.4.255 scope global eth0

valid_lft forever preferred_lft forever 

inet6 fe80::dd7a:452c:ef80:98b3/64 scope link  

valid_lft forever preferred_lft forever

[root@proxy1 ~]# poweroff       //proxy1关机

[root@proxy2 ~]# ip a s eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 52:54:00:af:04:25 brd ff:ff:ff:ff:ff:ff

inet 192.168.4.6/24 brd 192.168.4.255 scope global eth0

valid_lft forever preferred_lft forever

inet 192.168.4.15/32 scope global eth0 //VIP自动到了proxy2上

valid_lft forever preferred_lft forever

inet6 fe80::dd7a:452c:ef80:98b3/64 scope link

valid_lft forever preferred_lft forever 

//客户端依然可正常访问

[root@client ~]# curl 192.168.4.15

192.168.4.100 

[root@client ~]# curl 192.168.4.15 

192.168.4.200

[root@client ~]# curl 192.168.4.15

192.168.4.200

[root@client ~]# curl 192.168.4.15

192.168.4.100 

[root@client ~]# curl 192.168.4.15 

192.168.4.200

[root@client ~]# curl 192.168.4.15

192.168.4.200

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Keepalived & LVS 搭建高可用的Web服务
!(https://oayrssjpa.qnssl.com/15362160228382.jpg)\TOC\在本文中,我将会讲述如何在Centos7下基于Keepalived和LVS技术,实现Web服务的高可用和负载均衡,我们的目标拓扑结构如下图所示!未命名文件(https://oayrssjpa.qnssl.com/%E6%9C%
Stella981 Stella981
3年前
Redis低成本高可用方案设计
关于Redis高可用方案,看到较多的是keepalived、zookeeper方案。keepalived是主备模式,意味着总有一台浪费着。zookeeper工作量成本偏高。本文主要介绍下使用官方sentinel做redis高可用方案的设计。阅读目录:1.RedisSentinel2.故障转移消息接收的3种方式3.整体流程
Stella981 Stella981
3年前
Nginx+Keepalived实现站点高可用
公司内部OA系统要做线上高可用,避免单点故障,所以计划使用2台虚拟机通过Keepalived工具来实现nginx的高可用(HighAvaiability),达到一台nginx入口服务器宕机,另一台备机自动接管服务的效果。(nginx做反向代理,实现后端应用服务器的负载均衡)快速搭建请直接跳至第2节。1\.Keepalived介绍
Stella981 Stella981
3年前
Keepalived+LVS
LVS架构中,不管是NAT模式还是DR模式,当后端的RS宕掉后,调度器依然会把请求转发到宕掉的RS上,这样的结果并不是我们想要的。其实,keepalived就可以解决问题,它不仅仅有高可用的功能,还有负载均衡。也就是说keepalived已经嵌入了LVS功能,完整的keepalivedLVS架构需要有两台调度器实现高可用,提供调度器的只需要一台,另外一台作
Stella981 Stella981
3年前
Keepalived 工作原理及简要安装
keepalived介绍     keepalived是Linux下一个轻量级的高可用解决方案     keepalived主要通过虚拟路由冗余(VRRP)来实现高可用功能      优点:部署及使用简单,只需一个配置文件即可完成     功能:1.服务器状态检测和故障
可莉 可莉
3年前
18、7 Keepalived LVS
完整的架构需要两台服务器(角色为dir),分别安装Keepalived工具,目的是实现高可用,但Keepalived本身也有负载均衡功能,所以本次使用可以只安装一台Keepalived。Keepalived内置了ipvsadm的功能,所以不需要安装ipvsadm包,也不用编写和执行lvs\_dr脚本。准备工作三台机器:调度器director:
Wesley13 Wesley13
3年前
Ubuntu10.04.4 Server下基于LVS DR模式+Keepalived的负载均衡高可用
Ubuntu10.04.4 Server下基于LVS DR模式Keepalived的负载均衡高可用集群LVSKeepalived 介绍2LVS2Keepalvied2ubuntu系统环境准备工作2更换Ubuntu软件源2架构拓扑图2服务安装3安装LVS3安装Keepalived3服务配置4
天翼云高可用虚拟IP(HAVIP)实践
(一)产品概述天翼云高可用虚拟IP(HighAvailabilityVirtualIPAddress,简称HAVIP)是一种可用独立创建和删除的私有网络IP地址资源。通过在VIPCIDR中申请一个私有网络IP地址,然后与高可用软件(如高可用软件Keepalived)配合使用,可用在VPC中搭建高可用的主备集群服务,提高VPC中服务的可用性。限制和说明