FastDFS蛋疼的集群和负载均衡(十三)之LVS-DR环境安装

diary_report.jpg

Interesting things

安装LVS-DR环境
vip:192.168.12.100
lvs-director:192.168.12.4
nginx1:192.168.12.2
nginx2:192.168.12.3

What did you do today

  • 安装lvs的管理工具ipvsadm.

yum install ipvsadm

  • 校验是否安装成功

ipvsadm -h


image.png
  • 在192.168.12.2和192.168.12.3上安装nginx,此处略。可以查看我FastDFS系列博客。

  • 进入/usr/local/nginx/conf/目录下,创建nginx-lvs.conf

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}

在Director Server进行配置(192.16812.4)

  • 在eth0上绑定虚拟ip,此处在eth0设备上绑定了一个虚拟设备eth0:0,同时设置了一个虚拟ip是192.168.12.100,然后指定广播地址也为192.168.12.100,需要特别注意的是,虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255.

ifconfig eth0:0 192.168.12.100 broadcast 192.168.12.100 netmask 255.255.255.255 up


image.png
  • 添加路由规则。

route add -host 192.168.12.100 dev eth0:0


image.png
  • 启动系统的包转发功能。参数值为1时启用ip转发,为0时禁止ip转发。

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

  • 清除原有转发规则。

ipvsadm --clear

  • 添加虚拟ip规则, -s -rr 表示轮询策略,80表示负载转发的端口是80,-A表示添加一个新的集群服务,-t表示tcp协议。

ipvsadm -A -t 192.168.12.100:80 -s rr

  • 在虚拟ip中添加服务规则,在新加虚拟ip记录中添加两条新的Real Server记录, -g 表示指定LVS的工作模式为直接路由模式。lvs进行负载转发需要保证lvs负载的端口要和nginx服务的端口保持一致,这里都是80。-a表示添加一个新的realserver规则。

ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.2:80 -g
ipvsadm -a -t 192.168.12.100:80 -r 192.168.12.3:80 -g

  • 重启lvs

ipvsadm


image.png

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

接着我们就需要在Real Server上进行配置。(192.168.12.2、192.168.12.3)

  • 老操作,在回环设备上绑定虚拟ip地址192.168.12.4

ifconfig lo:0 192.168.12.100 broadcast 192.168.12.100 netmask 255.255.255.255 up
/sbin/route add-host 192.168.12.100 dev lo:0


image.png
  • 关闭arp解析。

arp_ignore:定义接收到arp请求时的响应级别
0 - 只要本地配置有相应的地址,就给予响应。
1 - 哪个接口上接受arp请求,就从哪个端口响应。DR模式使用

arp_announce:定义将自己地址向外通告时的通告级别
0 - 将本地任何接口上的任何地址向外通告。
1 - 试图仅向目标网络通告与其网络匹配的地址。
2 - 仅向与本地接口上地址匹配的网络进行通告。DR模式使用

sysctl -p使修改生效!

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p


image.png
  • 在Director Server(192.168.12.2、192.168.12.3) 和 Real Server(192.168.12.4)的防火墙添加端口80策略。

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT


image.png

注意事项:

  1. 测试时需要在nginx的http中设置keepalive_timeout 0; 取消使用http持久连接模式,保证每次客户端发送请求都需要向服务端简历连接,这样做是为了测试效果更加明显,每次刷新界面都要经过lvs负载转发。
    2.lvs进行负载转发需要保证lvs负载端口要和nginx服务的端口保持一致,这里是80

3.在nginx中keepalive_timeout的默认值是75s,默认使用http持久连接模式,可使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,可避免建立或重新建立连接。生产环境建议keepalive_timeout不要设置为0

  • 修改192.168.12.2和192.168.12.3下/usr/local/nginx/html/目录中index.html的内容,使其个性化。

  • 第一次请求192.168.12.100


    image.png
  • 第二次请求192.168.12.100


    image.png
  • 假设我停到nginx1


    image.png
  • 我们再次访问192.168.12.100,还是可以的!因为lvs采用轮询策略,如果其中一个nginx请求不可达,那么久请求另一个nginx!


    image.png
  • 为了方便配置启动lvs,我们可以将Director Server 和 RealServer配置过程封装到Shell脚本中。

在Director Server进行配置

  • 在/etc/init.d下创建lvsdr,内容如下:
#!/bin/sh
# 定义虚拟ip
VIP=192.168.12.100
# 定义realserver,并已空格分开,根据需求修改
RIPS="192.168.12.2 192.168.12.3"

# 定义提供服务的端口
SERVICE=80

# 调用init.d脚本的标准库
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "Start LVS of DR Mode"
        # 开启ip转发
        echo "1" > /proc/sys/net/ipv4/ip_forward
        # 绑定虚拟ip
        ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        route add -host $VIP dev eth0:0
        # 清除lvs规则
        ipvsadm -C
        # 添加一条虚拟服务器记录
    # -p指定一定的时间内将相同的客户端分配到同一台后端服务器
    # 用于解决session的问题,测试时或有别的解决方案时建议去掉
        ipvsadm -A -t $VIP:$SERVICE -s rr

        # 添加真实服务器记录
        for RIP in $RIPS
    do
        echo $RIP:$SERVICE;
                ipvsadm -a -t $VIP:$SERVICE -r $RIP:$SERVICE -g
        done
        # 设置tcp tcpfin  udp的超时连接值
        ipvsadm --set 30 120 300
        ipvsadm
        ;;

        stop)
        echo "Stop LVS DR"
        ifconfig eth0:0 down
        ipvsadm -C
        ;;
        *)
        echo "Usage:$0 {start ¦ stop}"
        exit 1
esac
  • 修改脚本权限。

chmod +x /etc/init.d/lvsdr
启动: service lvsdr start
停止: service lvsdr stop

在RealServer上进行配置

  • 在/etc/init.d/下创建lvsdr,内容如下:
#!/bin/sh
VIP=192.168.12.100
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "lo:0 port starting"
        # 为了相应lvs调度器转发过来的包,需在本地lo接口上绑定vip
        ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        # 限制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
        ;;
        stop)
        echo "lo:0 port closing"
        ifconfig lo:0 down
        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 "Usage: $0 {start ¦ stop}"
        exit 1
esac
  • 修改脚本权限。

chmod +x /etc/init.d/lvsdr
启动: service lvsdr start
停止: service lvsdr stop


Summary

明天撸LVS四层+Nginx七层负载均衡!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,552评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,666评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,519评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,180评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,205评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,344评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,781评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,449评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,635评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,467评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,515评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,217评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,775评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,851评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,084评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,637评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,204评论 2 341

推荐阅读更多精彩内容