LVS + Keepalived + Nginx安装及配置

时间:2023-02-22 20:48:59

1、概述

上篇文章《架构设计:负载均衡层设计方案(6)——Nginx + Keepalived构建高可用的负载层》(http://blog.csdn.net/yinwenjie/article/details/47130609) 我们讲解了Nginx的故障切换,并且承诺各位读者会尽快讲解 LVS + Keepalived + Nginx的安装和配置。在中间由于工作的原因,我又插写了三篇关于zookeeper的原理使用的文章。今天这边文章我们回归主题,为各位读者讲解 LVS + Keepalived + Nginx的安装及配置。

2、安装计划和准备工作

下图,我们表示了本篇文章要搭建的整个集成架构的抽象结构:

LVS + Keepalived + Nginx安装及配置

我们采用两个LVS节点(141和142),但是一个时间工作的只有一个LVS节点,另一个始终处于热备standby状态,由keepalived监控这两个节点的工作状态并完成切换。

在LVS节点下,我们采用LVS-DR工作模式挂载了两个Nginx节点(131、132)。并最终将外网请求交由这两个节点进行处理。注意:在实际工作中,Nginx下面一般就是访问静态资源、动态资源的配置了。

2-1、准备两个keepalived节点

首先我们在将要安装LVS的两个节点上,先安装keepalived,并保证这两个keepalived节点能够正常工作(监控批次的状态)。当然,您也可以先准备LVS,在准备keepalived。

我想准备keepalived节点,大家应该轻车熟路了吧,在《架构设计:负载均衡层设计方案(6)——Nginx + Keepalived构建高可用的负载层》这篇文章中详细介绍了keepalived的最简配置方式。为了大家阅读方便,我们在这里再进行依次简要说明。准备keepalived的整个过程包括:

  1. 安装必要的支撑组件,源码安装keepalived
  2. 将keepalived注册成节点的服务,以便保证keepalived在节点启动时就开始工作
  3. 更改keepalived的配置文件,让其可以正常工作
  4. 验证准备工作

=============安装keepalived

[root@lvs1 ~]# yum install -y zlib zlib-devel gcc gcc-c++ openssl openssl-devel openssh
[root@lvs1 ~]# tar -zxvf keepalived-1.2.17.tar.gz
[root@lvs1 ~]# cd keepalived-1.2.17
[root@lvs1 ~]# ./configure --perfix=/usr/keepalived-1.2.17
[root@lvs1 ~]# make & make install

=============将keepalived注册成服务(如果您使用的默认路径安装,就不需要cp命令了)

[root@lvs1 ~]# cp /usr/keepalived-1.2.17/etc/sysconfig/keepalived  /etc/sysconfig/keepalived
[root@lvs1 ~]# cp /usr/keepalived-1.2.17/sbin/keepalived /usr/sbin/keepalived
[root@lvs1 ~]# cp /usr/keepalived-1.2.17/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
[root@lvs1 ~]# mkdir /etc/keepalived
[root@lvs1 ~]# cp /usr/keepalived-1.2.17/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
[root@lvs1 ~]# 可以做成服务了(不要拷贝,没用的)
[root@lvs1 ~]# chkconfig keepalived on

这里我们先设置浮动ip

设置VIP的信息

 ifconfig eth0:0 192.168.220.140 broadcast 192.168.220.140 netmask 255.255.255.255 up
route add -host 192.168.220.140 dev eth0:0     

做成服务后,先不要急着启动,因为配置文件还没有改好。
========配置keepalived(配置文件在:/etc/keepalived/keepalived.conf)

! 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_instance VI_1 {
#141节点设置为MASTER,142或者还有其他的节点设置为BACKUP
#还记得我们前面文章讲到的无抢占设置吗?这里也可以用哦。
state MASTER
#网络适配器名称
interface eth0
virtual_router_id 51
#所有的SLAVE节点的优先级都要比这个设置值低
priority 120
advert_int 1
#真实ip,142要改成相应的lvs节点真实ip
mcast_src_ip=192.168.220.141
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟/浮动IP
virtual_ipaddress {
192.168.220.140
}
}

以上配置还是最简单的keepalived配置,因为我们还没有加上配合LVS使用的虚拟ip监测设置和下层真实ip监测的设置。最简配置主要是为了保证keepalived节点是工作正常的。

将以上的配置分别对应到LVS的两个节点(注意要改动的地方哦)

==========进行keepalived工作状态的检查:

[root@lvs1 ~]# /etc/init.d/keepalived start

现在设置为MASTER的keepalived节点(或者在非抢占模式下,优先级最高的那个节点),已经绑定了140这个虚拟ip了:

[root@lvs2 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:39:75:9f brd ff:ff:ff:ff:ff:ff
inet 192.168.220.141/24 brd 192.168.220.255 scope global eth0
inet 192.168.220.140/32 scope global eth0
inet6 fe80::20c:29ff:fe39:759f/64 scope link
valid_lft forever preferred_lft forever

当然您也可以通过 /var/log/message的日志进行keepalived是否正常工作的验证。

2-2、继续两个keepalived节点上准备LVS

准备lvs的工作就太简单了,因为centos6.4、6.5、6.6都已经集成了LVS的核心,我们只需要安装LVS的管理工具就行了:

(1)如果要源码安装的话:

这里源码安装ipvsadm(http://www.linuxidc.com/Linux/2016-03/129232.htm)
yum install kernel-devel -y
yum -y install popt popt-devel libnl libnl-devel popt-static(我尝试过要是不安装的话就会报错)
ln -s /usr/src/kernels/2.6.32-642.4.2.el6.x86_64/ /usr/src/linux
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
tar xf ipvsadm-1.25.tar.gz
cd ipvsadm-1.25
make && make install
然后我们检测一下
ipvsadm   是否有内容输出
(2)如果yum安装的话

两个LVS节点都执行:

yum -y install ipvsadm

还记得lvs管理工具怎么使用吗?请参见我介绍LVS单节点安装的博文:《架构设计:负载均衡层设计方案(5)——LVS单节点安装》。这里为了方便阅读,给出主要参数的含义列表:

-A –add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
-E –edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D –delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C –clear 清除内核虚拟服务器表中的所有记录。
-R –restore 恢复虚拟服务器规则
-S –save 保存虚拟服务器规则,输出为-R 选项可读的格式
-a –add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-e –edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录
-d –delete-server 删除一条虚拟服务器记录中的某条真实服务器记录
-L –list 显示内核虚拟服务器表
-Z –zero 虚拟服务表计数器清零(清空当前的连接数量等)
–set tcp tcpfin udp 设置连接超时值
–start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的VRRP 功能。
–stop-daemon 停止同步守护进程
-t –tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]
-u –udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]
-f –fwmark-service fwmark 说明是经过iptables 标记过的服务类型。
-s –scheduler scheduler 使用的调度算法,选项:rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, 默认的调度算法是: wlc.
-p –persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-M –netmask netmask persistent granularity mask
-r –real-server server-address 真实的服务器[Real-Server:port]
-g –gatewaying 指定LVS 的工作模式为直接路由模式DR模式(也是LVS默认的模式)
-i –ipip 指定LVS 的工作模式为隧道模式
-m –masquerading 指定LVS 的工作模式为NAT 模式
-w –weight weight 真实服务器的权值
–mcast-interface interface 指定组播的同步接口
–connection 显示LVS 目前的连接 如:ipvsadm -L -c
–timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L –timeout
–daemon 显示同步守护进程状态
–stats 显示统计信息
–rate 显示速率信息
–sort 对虚拟服务器和真实服务器排序输出
–numeric -n 输出IP 地址和端口的数字形式

到后面正式启动LVS的时候,就不要问我参数含义咯。^_^

2-3、准备两个Nginx节点并保证可用

在《架构设计:负载均衡层设计方案(5)——LVS单节点安装》(http://blog.csdn.net/yinwenjie/article/details/47010569) 这篇文章中,我们详细讲解了Nginx节点的准备工作,但是为了方便各位读者阅读,这里我们大致再讲一下。

Nginx节点的准备工作主要由以下步骤构成(这个不是本文的重点,点到即可):

  1. 安装Nginx(当然,正式系统中,还涉及到Nginx的参数调优,可以参见《架构设计:负载均衡层设计方案(2)——Nginx安装》这篇文章
  2. 打开Nginx所在服务器的“路由”功能、关闭“ARP查询”功能
  3. 将VIP:192.168.220.140 设置成Nginx所在节点的回环IP

=============安装Nginx

[root@vm1 ~]# yum -y install make zlib zlib-devel gcc gcc-c++ ssh libtool pcre*
[root@vm1 ~]# 下载nginx(别拷贝,不能执行的)
[root@vm1 ~]# 解压nginx(别拷贝,不能执行的)
[root@vm1 ~]# ./configure –prefix=/usr/nginx-1.8.0
[root@vm1 ~]# make && make install
[root@vm1 ~]# 设置环境变量(别拷贝,不能执行的)
[root@vm1 ~]# 启动nginx

=============打开Nginx所在服务器的“路由”功能、关闭“ARP查询”功能

[root@vm1 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@vm1 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@vm1 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@vm1 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

=============设置回环IP

[root@vm1 ~]# ifconfig lo:0 192.168.220.140 broadcast 192.168.220.140 netmask 255.255.255.255 up
[root@vm1 ~]# route add -host 192.168.220.140 dev lo:0

两台Nginx的节点都按照这样的方法去设置。然后使用浏览器,看看这两个节点的Nginx是否工作正常:

我这里在做实验的时候忘了把防火墙和selinux关了,所以浏览器访问不了。不要忘了关哦

我们可以把nginx的首页改一下以便分辨区别

LVS + Keepalived + Nginx安装及配置

=====

LVS + Keepalived + Nginx安装及配置

2-4、其他说明

keepalived和LVS是天生配合完美的一对,LVS负责进行请求转发不负责任何节点的健康监测;keepalived负责监控整个环境中,包括虚拟ip,真实ip对应的下层节点的健康状态监测

3、开始配置:LVS-DR工作模式

3-1、keepalived的更改——健康监测

首先我们要更改之前配置的“最简keepalived”配置,让keepalived能够对结构中所有节点和虚拟ip的健康状态进行监测。更改配置和含义如下:

! 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_instance VI_1 {
#141节点设置为MASTER,142或者还有其他的节点设置为BACKUP
#还记得我们前面文章讲到的无抢占设置吗?这里也可以用哦。
state MASTER
#网络适配器名称
interface eth0
virtual_router_id 51
#所有的SLAVE节点的优先级都要比这个设置值低
priority 120
advert_int 1
#真实ip,142要改成相应的lvs节点真实ip
mcast_src_ip=192.168.220.141
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟/浮动IP
virtual_ipaddress {
192.168.220.140
}
} virtual_server 192.168.220.140 80 {
#健康时间检查,单位秒
delay_loop 6
#负载均衡调度算法wlc|rr,和您将使用的LVS的调度算法保持原则一致
lb_algo rr
#负载均衡转发规则 DR NAT TUN。和您将启动的LVS的工作模式设置一致
lb_kind DR
#虚拟地址的子网掩码
nat_mask 255.255.255.0
#会话保持时间,因为我们经常使用的是无状态的集群架构,所以这个设置可有可无
#persistence_timeout 50
#转发协议,当然是TCP
protocol TCP #真实的下层Nginx节点的健康监测
real_server 192.168.220.131 80 {
#节点权重,
weight 10
#设置检查方式,可以设置HTTP_GET | SSL_GET
HTTP_GET {
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
#超时时间,秒。如果在这个时间内没有返回,则说明一次监测失败
connect_timeout 3
#设置多少次监测失败,就认为这个真实节点死掉了
nb_get_retry 3
#重试间隔
delay_before_retry 3
}
} real_server 192.168.220.132 80 {
weight 10
HTTP_GET {
url {
path /
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

这样一来,keepalived就可以检查整个架构中的所有节点状态了。另外要说明的是,这个检查过程并不是必须的,您使用keepalived的最简配置也是可以的,不过您就需要自己写监测脚本了(道理是一样的)

3-2、启动两个LVS节点

启动LVS的过程就太简单了(两个节点都是一样的启动方式):

[root@lvs2 ~]# ipvsadm -C
[root@lvs2 ~]# ipvsadm -At 192.168.220.140:80 -s rr
[root@lvs2 ~]# ipvsadm -at 192.168.220.140:80 -r 192.168.220.131 -g
[root@lvs2 ~]# ipvsadm -at 192.168.220.140:80 -r 192.168.220.132 -g
[root@lvs2 ~]# 然后我们可以使用ipvsadm 监控目前LVS的状态
[root@lvs2 ~]# ipvsadm

注意:处于standby的lvs1节点也要这样进行设置。
还有,以上的LVS的设置,和real server上的设置,在重启后都会消失,所以一定要做成脚本哦。

4、验证工作

这样LVS + Keepalived + Nginx方式的配置就做完了。现在我们进行搭建效果的监测:

4-1、验证Master-LVS节点的工作

我们使用两个不同的浏览器,验证Master-LVS节点的工作:

=========浏览器1:
LVS + Keepalived + Nginx安装及配置

=========浏览器2:
LVS + Keepalived + Nginx安装及配置

看来140这个VIP下的LVS工作是正常的。

4-2、验证Master-LVS节点停止后的效果

下面我们停止Master-LVS1:

[root@lvs2 ~]# service keepalived stop

在经历了一些访问停顿后,浏览器1显示的效果如下(这就是为什么keepalived最好设置为非抢占模式):

LVS + Keepalived + Nginx安装及配置

5、后文介绍

好了,到这里负载均衡层所使用的几个标准工具就介绍完了。下一篇文章我们将进行总结,然后进入架构设计:业务层设计方案 的系列文章。在下一个系列文章中,我们将介绍至少两套SOA的实现、至少两套系统间通信使用的消息队列。哦,应我朋友的要求,我会专门写几篇文章,介绍Java中线程的基础知识和进阶知识。

文章转自:http://blog.csdn.net/yinwenjie/article/details/47211551

多谢原作者的分享

 
 

LVS + Keepalived + Nginx安装及配置的更多相关文章

  1. LVS&plus;Nginx&lpar;LVS &plus; Keepalived &plus; Nginx安装及配置&rpar;

    (也可以每个nginx都挂在上所有的应用服务器)  nginx大家都在用,估计也很熟悉了,在做负载均衡时很好用,安装简单.配置简单.相关材料也特别多. lvs是国内的章文嵩博士的大作,比nginx被广 ...

  2. 架构设计:负载均衡层设计方案(7)——LVS &plus; Keepalived &plus; Nginx安装及配置

    1.概述 上篇文章<架构设计:负载均衡层设计方案(6)——Nginx + Keepalived构建高可用的负载层>(http://blog.csdn.net/yinwenjie/artic ...

  3. lvs&plus;keepalived&plus;nginx实现高性能负载均衡集群【转】

    转自 lvs+keepalived+nginx实现高性能负载均衡集群 - 青衫lys - 博客园http://www.cnblogs.com/liuyisai/p/5990645.html 一.为什么 ...

  4. keepalived nginx 主备配置

    keepalived  nginx 主备配置(多主多备同理) 1.Nginx服务安装 nginx 不区分主备,在两台服务上安装两个即可. 安装参考:https://www.cnblogs.com/zw ...

  5. 【Nginx】&lpar;主从热备&rpar;LVS&plus;Keepalived&plus;Nginx实现高性能负载均衡集群

    一.LVS 1.1 概述 1.2 Nginx与LVS区别什么 二.Keepalived 2.1 概述 2.2 keepalived和其工作原理 三.LVS+Keepalived+Nginx 搭建双机主 ...

  6. LVS&plus;KeepAlived&plus;Nginx高可用实现方案

    文章目录概念LVSKeepAlived为什么要使用准备软件安装KeepAlived 安装源码安装yum安装服务启动.重启.关闭安装ipvsadmnginx安装防火墙(iptables)防火墙配置(方式 ...

  7. 阿里云服务器Linux CentOS安装配置(八)nginx安装、配置、域名绑定

    阿里云服务器Linux CentOS安装配置(八)nginx安装.配置.域名绑定 1.安装nginx yum -y install nginx 2.启动nginx service nginx star ...

  8. ubuntu server nginx 安装与配置

    ubuntu server nginx 安装与配置 一:关于nginx http://wiki.ubuntu.org.cn/Nginx http://nginx.org/cn http://wiki. ...

  9. Nginx安装及配置详解【转】

    nginx概述 nginx是一款*的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

随机推荐

  1. Chrome console命令整理

    console.dir (这个方法是我经常使用的 可不知道比for in方便了多少) 直接将该DOM结点以DOM树的结构进行输出,可以详细查对象的方法发展等等 在页面右击选择 审查元素 ,然后在弹出来 ...

  2. Djunit工作记录

    1.下载djunit 解压后放置到eclipse的plugins目录下即可 2.测试程序必须继承DjunitTestCase 3.测试程序完run as DJunitTest 运行 4.在djunit ...

  3. python 学习笔记十七 django深入学习二 form,models

    表单 GET 和 POST 处理表单时候只会用到GET 和 POST 方法. Django 的登录表单使用POST 方法,在这个方法中浏览器组合表单数据.对它们进行编码以用于传输.将它们发送到服务器然 ...

  4. SignalR &plus; KnockoutJS &plus; ASP&period;NET MVC4 实现井字游戏

    1.1.1 摘要 今天,我们将使用SignalR + KnockoutJS + ASP.NET MVC实现一个实时HTML5的井字棋游戏. 首先,网络游戏平台一定要让用户登陆进来,所以需要一个登陆模块 ...

  5. java机器学习工具包

    下面是25个Java机器学习的工具&&库列表: 1. Weka 是一个数据挖掘任务机器学习算法的集合.这些算法可以直接应用于数据集或者在你自己的Java代码中调用.Weka 包含 数据 ...

  6. 浏览器中页面的visibility状态及变化监听

    需求 在浏览器中播放视频,当用户进行页面切换操作时.需要根据视频播放页是否处于可见状态,来控制视频的暂停及重新播放. 相关文档 参考MDN中,关于页面的可见性相关的API说明.https://deve ...

  7. HttpWebRequest的Timeout和ReadWriteTimeout

    HttpWebRequest.Timeout在发起请求开始,如果未从远程请求的URL得到任何数据的情况下,超过Timeout后,触发超时异常 HttpWebRequest.ReadWriteTimeo ...

  8. NSArray NSMutableArray

    NSArray 或者 NSMUtableArray 去除重复的数据: 原来集合操作可以通过valueForKeyPath来实现的,去重可以一行代码实现: [array valueForKeyPath: ...

  9. python&lowbar;递归实现汉诺塔 (string类型的指针出错 未解决)

    在递归的时候,和数学的归纳法一致. void func( mode) { if(endCondition) { constExpression //基本项 } else { accumrateExpr ...

  10. Python 封装

    # 封装: # 1. 对属性的封装 # 2. 对功能的封装 # 3. 模块 # 4. 包 class Student: def __init__(self, num, name, clazz): se ...