这个帖子讲得很细致,基本依照这个方案实践。

只是IP是按我自己虚拟机的IP来测试的。

http://www.cnblogs.com/arjenlee/p/9262737.html

======================================

搭建环境:

vip:192.168.1.100

lvs-director:192.168.1.111

nginx1:192.168.1.112

nginx2:192.168.1.113

-------------------------------------------------------------------

已下操作,在LVS服务器上操作

-------------------------------------------------------------------

一,先在LVS服务器上确认也安装好LVS。

这里要注意的是modbprobe -l这个命令已不灵了。

使用如下替代 。

find /lib/modules/$(uname -r)/ -iname "**.ko*" | cut -d/ -f5-|grep ip_vs

  有输出Ip_vs说明内核已加载模块。如果没有加载,按其它教程加载哈。

二,安装ipvsadm工具,很简单

yum install ipvs

  

三,在网卡上绑定VIP(虚拟IP, 注意在centos 7上,我这里的网卡不是eth0,而是enp0s3)

ifconfig enp0s3:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up

  

四,增加一条路由规则。

route add -host 192.168.1.100 dev enp0s3:0

  

五,启用系统的包转发功能。

echo "1" >/proc/sys/net/ipv4/ip_forward

  

六,先清空系统之前的所有ipvsadm规则

ipvsadm -C
ipvsadm --clear

  

七,增加虚拟IP规则(-s rr表示轮询规则)

ipvsadm -A -t 192.168.1.100:80 -s rr

  

八,在虚拟IP中增加服务规则(-g表示工作模式为直接路由)

ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.112:80 -g
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.113:80 -g

  lvs进行负载转发需要保证lvs负载的端口要和nginx服务的端口的一致,这里都为80。

九,使用ifconfig, ipvsadm -ln,route命令,查看的输出如下,表示设置完成。

enp0s3:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.255  broadcast 192.168.1.100
        ether 08:00:27:47:b2:29  txqueuelen 1000  (Ethernet)

  

IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.100:80 rr
  -> 192.168.1.112:80             Route   1      0          0
  -> 192.168.1.113:80             Route   1      0          0

  

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 enp0s3
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
192.168.1.100   0.0.0.0         255.255.255.255 UH    0      0        0 enp0s3

  

-------------------------------------------------------------------

已下操作,在各个NGINX服务器上操作

-------------------------------------------------------------------

在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director Server,因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。

一,安装nginx。

二,设置nginx.conf的keepalive_timeout  0。

三,在lo端口绑定VIP。

ifconfig lo:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up

  

四,增加一条路由。

route add -host 192.168.1.100 dev lo:0

  

五,关闭ARP。

arp_announce :定义不同级别:当ARP请求通过某个端口进来是否利用这个接口来回应。

0 -利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;

1 - 避免使用另外一个接口上的mac地址去响应ARP请求;

2 - 尽可能使用能够匹配到ARP请求的最佳地址。

arp_ignore:当ARP请求发过来后发现自己正是请求的地址是否响应;

0 - 利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;

1 - 哪个接口上接受ARP请求,就从哪个端口上回应。

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

  

六,使用ifconfig, route -n命令,查看的输出如下,表示设置完成。

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.1.100  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)

  

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 enp0s3
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
192.168.1.100   0.0.0.0         255.255.255.255 UH    0      0        0 lo

  

=======================================

以下为访问Http://192.168.1.100的输出

=======================================

实战--使用lvs实现四层负载均衡,转发到后端nginx的更多相关文章

  1. LVS实现四层负载均衡

    LVS详解(思维导图) 1. 集群概述 1.1 Linux Cluster Linux Cluster的类型 LB(Load Balance) HA(High Available) HP(High P ...

  2. Nginx负载均衡反向代理 后端Nginx获取客户端真实IP

    Nginx 反向代理后,后端Nginx服务器无法正常获取客户端的真实IP nginx通过http_realip_module模块来实现的这需要重新编译,如果提前编译好了就无需重新编译了1,重新编译ng ...

  3. LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)

    参考文档:http://blog.csdn.net/ioy84737634/article/details/44916241 目录 lvs的调度算法 lvs的四种模式 四层均衡负载和七层的区别 1.l ...

  4. 【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

    一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务 ...

  5. 借助LVS+Keepalived实现负载均衡(转)

    原文:http://www.cnblogs.com/edisonchou/p/4281978.html 一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务 ...

  6. 借助 LVS + Keepalived 实现负载均衡

    虽然现在云手段很高明了.但是这个lvs + keepalive 还是需要了解下的. 今天就整理了下lvs和keepalive的东西.做下总结留作以后怀念 在实际应用中,在Web服务器集群之前总会有一台 ...

  7. 借助LVS+Keepalived实现负载均衡

    原文地址:http://www.cnblogs.com/edisonchou/p/4281978.html 一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了 ...

  8. 借助LVS+Keepalived实现负载均衡(转)

    出处:http://www.cnblogs.com/edisonchou/p/4281978.html 一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务 ...

  9. 【转】借助LVS+Keepalived实现负载均衡

    一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务 ...

随机推荐

  1. 题解-Atcoder_agc005D ~K Perm Counting

    Problem AtCoder-agc005D 题意概要:给出\(n,k\),求合法的排列个数,其中合法定义为任何数字所在位置与自身值差的绝对值不为\(k\)(即求排列\(\{A_i\}\),使得\( ...

  2. IOT相关协议

    MQTT协议的入门 入门教程; 发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递; 这意味着发布者和订阅者之间并不需要直接建立联系; 消息类型 MQTT拥有14种不同的消息类型: CONNE ...

  3. 阿里云服务器上通过Docker部署redmine

    背景:在日常工作的过程中会遇到各种各样的问题,每个问题来了之后需要花时间解决.这里就面临两个问题. 1:问题责任不明确,有时候会遇到数据库或者物理服务器的问题,这时候就需要把相应问题指派给相应的人,传 ...

  4. php OpenSSL 加解密

    2018-1-6 17:10:19 星期六 $data = '123456'; $openssl_method = 'AES-256-CBC'; $openssl_iv_length = openss ...

  5. Golang 优化之路——bitset

    写在前面 开发过程中会经常处理集合这种数据结构,简单点的处理方法都是使用内置的map实现.但是如果要应对大量数据,例如,存放大量电话号码,使用map占用内存大的问题就会凸显出来.内存占用高又会带来一些 ...

  6. hbase搭建

    0. 软件版本下载 http://mirror.bit.edu.cn/apache/hbase/   1. 集群环境 Master 172.16.11.97 Slave1 172.16.11.98 S ...

  7. 在v-html中,js 正则表达式清除字符串里的style属性

    项目中遇到这样的需求,后端返回的是字符串,在vue用v-html显示,里面有style样式,要去除style 在v-html中使用filters,和平时的不一样,推荐项目的方法,定义一个全局的过滤方法 ...

  8. swift 学习- 27 -- 访问控制

    // 访问控制 可以限定其源文件 或模块中的代码对你的代码的访问级别, 这个特性可以让我们隐藏代码的一些实现细节, 并且可以为其他人可以访问和使用的代码提供接口 // 你可以明确地给某个类型 (类, ...

  9. 巧用&&和|| 让逻辑代码更简洁,逼格看起来更高一点(玩笑脸)

    通常当我们有一个需求 需要用到很多if else 进行条件筛选,例如: let level = 0; if(score > 12){ level = 4; } else if(score > ...

  10. 如何在cmd中安装python第三方模块

    打开 cmd终端 1 输入pip  install   模块名. 2 等待安装完成即可.