环境

  • VMware 16
  • CentOS8

相关软件

  • keepalived
  • ipvsadm
  • httpd

准备工作

准备四个节点,如上图,Node01 ~ Node04, 本文默认你会在VMWare上安装Linux并配置相关信息,如果这块内容不清楚,可以参考Linux学习笔记

实验效果

我们会在Node01和Node02上配置LVS,且Node01和Node02是主备关系,Node01是主,Node02是备,Node01挂了,Node02可以自动顶上。Node01和Node02是接收请求的入口,接下来,会将请求以负载均衡的方式请求后端的Node04和Node05服务。

示例图

操作步骤

准备Node03和Node04的服务

在Node03和Node04上分别执行如下命令:

yum install -y httpd

安装好httpd以后,在Node03上的如下位置

/var/www/html

新建一个名为index.html页面,并且在index.html中输入如下内容:

<h>from node03</h>

在Node04同样的位置,也建立一个index.html文件,且文件内容为:

<h>from node04</h>

可以通过如下方式快速将Node03的index.html复制到Node04, 在Node03的

var/www/html

目录下,执行

scp index.html root@192.168.98.139:`pwd`

其中

root@192.168.98.139

是对应你的node03的信息,然后就可以把node03的index.html复制到node04的对应位置了。

然后改一下Node04的index.html信息即可。

准备好index.html页面后,因为httpd服务的默认端口是80,所以我们需要打开Node03和Node04上的80端口的访问权限,在Node03和Node04上分别执行如下的两条命令:

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

我们可以启动Node04和Node03上的httpd服务,在Node03和Node04上分别执行:

systemctl start httpd

验证是否启动成功

配置Node03和Node04内核参数

arp_ignore和arp_announce两个内核参数的配置说明如下:

arp_ignore

定义接收到ARP请求时的响应级别

  • 0:只要本地配置的有相应地址,就给予响应;
  • 1:仅在请求的目标(MAC)地址配置请求到达的接口上的时候,才给予响应;

arp_announce

定义将自己地址向外通告时的通告级别

  • 0:将本地任何接口上的任何地址向外通告;
  • 1:试图仅向目标网络通告与其网络匹配的地址;
  • 2:仅向与本地接口上地址匹配的网络进行通告;

由于,Node03和Node04上要实现对IP的对外隐藏和对内可见,所以我们需要在Node03和Node04上配置如下参数:

echo 1  >  /proc/sys/net/ipv4/conf/ens33/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

PS:CentOS8的默认网卡名称是 ens33

可以通过ifconfig命令查看到

配置Node03和Node04的环路接口

要实现IP的对内可见,对外隐藏,还需要在Node03和Node04上配置环路接口, 在Node04和Node03上分别执行

ifconfig lo:3 192.168.98.100 netmask 255.255.255.255

然后在Node03和Node04分别执行

ifconfig

查看是否添加成功

自此,Node03和Node04上的所有东西都配置好了。

接下来开始配置Node01和Node02。

安装ipvsadm

在Node01和Node02上执行如下命令

yum install -y ipvsadm

安装keepalived

在CentOS8下,我尝试用yum安装keepalived,配置完毕后,启动了keepalived,但是客户端始终无法请求过来。

无奈,尝试编译安装keepalived,问题解决。

步骤如下,在Node01和Node02上分别执行, 安装一些前置工具

yum install curl gcc openssl-devel libnl3-devel net-snmp-devel make tar ipvsadm -y

然后下载最新的keepalived源码

curl --progress https://www.keepalived.org/software/keepalived-2.2.2.tar.gz | tar xz
cd keepalived-2.2.2
./configure --prefix=/usr/local/keepalived-2.2.2
make
make install

修改keepalived配置

在Node01上,先备份默认的keepalived配置,执行如下命令

cd /usr/local/keepalived-2.2.2/etc/keepalived
cp keepalived.conf keepalived.conf.bak

然后开始编辑keepalived.conf文件, 将其配置成如下信息

Node01上:

! Configuration File for keepalived

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
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
} 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 {
192.168.98.100/24 dev ens33 label ens33:3
}
} virtual_server 192.168.98.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP real_server 192.168.98.138 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.98.139 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}

Node02上

! Configuration File for keepalived

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
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
} vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.98.100/24 dev ens33 label ens33:3
}
} virtual_server 192.168.98.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP real_server 192.168.98.138 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.98.139 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}

指定keepalived配置文件,在Node01和Node02上分别执行:

cd /usr/local/keepalived-2.2.2/etc/sysconfig

修改keepalived文件

# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp -P Only run with VRRP subsystem.
# --check -C Only run with Health-checker subsystem.
# --dont-release-vrrp -V Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs -I Dont remove IPVS topology on daemon stop.
# --dump-conf -d Dump the configuration data.
# --log-detail -D Detailed log messages.
# --log-facility -S 0-7 Set local syslog facility (default=LOG_DAEMON)
# KEEPALIVED_OPTIONS="-D -f /usr/local/keepalived-2.2.2/etc/keepalived/keepalived.conf"

在KEEPALIVED_OPTIONS中增加了-f选项,指定了keepalived.conf的位置

然后打开Node01和Node02的80端口访问权限,分别在Node01和Node02上执行如下命令

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

启动keepalived

在Node01上执行

systemctl start keepalived

验证:通过浏览器访问:http://192.168.98.100

并且时不时刷新以下页面,可以显示如下结果:

在Node01上执行

ipvsadm -lnc

可以看到

在Node02上执行

systemctl start keepalived

然后在Node02上执行

ipvsadm -lnc

内容是空的,说明Node02是备用节点

此时,我们停掉Node01,在Node01上,执行

systemctl stop keepalived

继续访问浏览器,服务依旧可以访问

验证了主节点(Node01)挂了,备用节点(Node02)顶上这个情况

此时,在Node02上执行

ipvsadm -lnc

可以看到连接情况

说明备机正常提供了服务。

此时,再把主节点(Node01)启动起来,在Node01上执行:

systemctl restart keepalived

服务正常

在主节点(Node01)上执行

ipvsadm -lnc

显示出了连接

说明主节点已经恢复正常。

参考资料

[]

使用KeepAlived来实现高可用的DR模型的更多相关文章

  1. RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡

    原文地址:http://www.cnblogs.com/mchina/archive/2012/05/23/2514728.html 一.简介 LVS是Linux Virtual Server的简写, ...

  2. RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡(转)

    一.简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. ...

  3. LVS+Keepalived搭建MyCAT高可用负载均衡集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  4. MariaDB+Keepalived双主高可用配置MySQL-HA

    利用keepalived构建高可用MySQL-HA,保证两台MySQL数据的一致性,然后用keepalived实现虚拟VIP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换. ...

  5. CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...

  6. 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...

  7. CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡【转】

    CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡   一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2 ...

  8. 实现基于Haproxy+Keepalived负载均衡高可用架构

    1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...

  9. 项目实战3—实现基于Keepalived+LVS的高可用集群网站架构

    实现基于Keepalived高可用集群网站架构 环境:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展,后端 ...

随机推荐

  1. Error: Cannot find module 'koa-router'

    Error: Cannot find module 'koa-router' koa-router !== koa-route # install OK $ yarn add koa-router h ...

  2. node.js 中间件

    node.js 中间件 node.js middleware Express middleware body-parser cookie-parser cookie-session cors csur ...

  3. js inheritance all in one

    js inheritance all in one prototype & proto constructor Object.definepropety Object.create() js ...

  4. NGK算力生态建设者狂欢!SPC之后又有VAST!

    想致富,先挖矿.这句话已经成为了币圈的一句名言.挖矿一词始终贯穿着区块链以及数字加密领域. 据小道消息透露,NGK官最近将会推出两款挖矿产品---SPC星空币以及其子币VAST维萨币. 下面笔者就来一 ...

  5. 你真的知道typeof null的结果为什么是‘object‘吗?

    到目前为止,ECMAScript 标准中定义了8种数据类型,它们分别是Undefined.Null.Number.Boolean.String.Symbol.BigInt.Object. 为了判断变量 ...

  6. 系统错误,MSVCP100D.dll找不到或丢失!

    文章首发 | 公众号:lunvey 今日研究c++,找了一些示例程序,发现无法打开.弹出如下的报错提示: 作为新时代人类,遇见问题第一件事情就是问度娘.然而眼花缭乱的检索数据,大家众说纷纭,不知道如何 ...

  7. react小白笔记

    diff算法主要是同级比较,生成数组,进行数组替换 reducer可以接收state,但是绝不能修改state 纯函数指的是:给固定收入,就一定有固定的输出,而且不会有任何副作用[不能例如:new d ...

  8. Centos8.2安装Mongodb4.4.2(社区版)

    1:下载 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.4.2.tgz 官网地址: 2:解压 tar -zxv ...

  9. deepin 340 USB转console线驱动安装及使用

    刚换DEEPIN系统, 有个路由器要做调整,的确是没windows友好,查了网上资料,归总一下. zhaodong@zhaodong-PC:sudo find / -name serial 进入 zh ...

  10. Svelte 码半功倍

    你未注意到的最重要的指标. 注意:原文发表于2019-04-20,随着框架不断演进,部分内容可能已不适用. 所有代码都有 BUG,你写的越多,BUG 越多,这很合情合理. 同时,写的越多,费时越多,留 ...