• 项目实战02:LVS 实现负载均衡


    负载均衡集群企业级应用实战-LVS

    实现基于LVS负载均衡集群的电商网站架构

      背景:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法承载更多的用户访问,此时需要用负载均衡技术,对网站容量进行扩充,来解决承载的问题。scale out? scale up?  

    总项目流程图,详见http://www.cnblogs.com/along21/p/7435612.html

      

    实现基于LVS负载均衡集群的电商网站架构

    前景:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法承载更多的用户访问,此时需要用负载均衡技术,对网站容量进行扩充,来解决承载的问题。scale out? scale up?

     

    实验前准备:

    1、ipvsadm

    yum install ipvsadm -y #在LVS-server安装lvs管理软件

    程序包:ipvsadm(LVS管理工具)

    Unit File: ipvsadm.service

    主程序:/usr/sbin/ipvsadm

    规则保存工具:/usr/sbin/ipvsadm-save

    规则重载工具:/usr/sbin/ipvsadm-restore

    配置文件:/etc/sysconfig/ipvsadm-config

    2、grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64 查看内核是否支持IPVS

    3、iptables -F && setenforing 清空防火墙策略,关闭selinux

     

    实战一:LVS的NAT模式实现负载均衡

    实战架构图:

    1、环境准备:

    机器名称

    IP配置

    服务角色

    备注

    lvs-server

    VIP:172.17.1.6

    DIP:192.168.30.106

    负载均衡器

    开启路由功能

    (VIP桥接、DIP仅主机)

    rs01

    RIP:192.168.30.107

    后端服务器

    网关指向DIP(仅主机)

    rs02

    RIP:192.168.30.7

    后端服务器

    网关指向DIP(仅主机)

    注意:确保rs 在一个网段,且只有一个网段

     

    2、在directory 负载均衡器上

    yum -y install ipvsadm

    ① 开启一个基于80端口的虚拟服务vip,调度方式为wrr

    ipvsadm -A -t 172.17.1.6:80 -s wrr

    ② 配置web服务后端real server  为nat工作方式  权重为1

    ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.107:80 -m -w 1

    ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.7:80 -m -w 1

    ③ 修改内核配置,开启路由转发

    vim /etc/sysctl.conf 该一行

    net.ipv4.ip_forward = 1

     

    sysctl -p 读一些,使其生效

     

    3、在两台real server 上设置

    ① 开启实现准备好的web网页服务

    systemctl start nginx

    systemctl start php-mysql

    systemctl start mariadb

     

    ② 把网关指向directory

    route add default gw 192.168.30.106

     

    4、自己的windows 做客户端,通过vip 172.17.1.6访问web服务,调度成功

     

     

    实战二:LVS的DR 模式实现负载均衡

    实战架构图:

    1、环境准备

    机器名称

    IP配置

    服务角色

    lvs-server

    VIP:172.17.100.100

    负载均衡器

    rs01

    RIP:172.17.1.7

    后端服务器

    rs02

    RIP:172.17.22.22

    后端服务器

    注意:lvs-server 和rs 要在一个网段,rs只有一个网段

     

    2、在lvs-server 上设置

    ① 配置VIP到本地网卡别名,广播只自己响应

    ifconfig eth0:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up

    route add -host 172.17.100.100 dev eth0:0 给网卡别名指向网关

     

    ② ipvsadm 策略配置

    开启一个基于80端口的虚拟服务,调度方式为wrr

    ipvsadm -A -t 172.17.100.100:80 -s wrr

    配置web服务后端real server  为DR工作方式  权重为1

    ipvsadm -a -t 172.17.100.100:80 -r 172.17.22.22:80 -g -w 1

    ipvsadm -a -t 172.17.100.100:80 -r 172.17.1.6:80 -g -w 1

     

    3、real server 上配置

    ① 配置VIP到本地回环网卡lo上,并只广播自己

    ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up

    配置本地回环网卡路由

    route add -host 172.17.100.100 lo:0

     

    ② 使RS "闭嘴"

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

    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce

    忽略ARP广播

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

    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

    注意:关闭arp应答

    1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

    2:必须避免将接口信息向非本网络进行通告

     

    ③ 想永久生效,可以写到配置文件中

    vim /etc/sysctl.conf

    net.ipv4.conf.lo.arp_ignore = 1

    net.ipv4.conf.lo.arp_announce = 2

    net.ipv4.conf.all.arp_ignore = 1

    net.ipv4.conf.all.arp_announce = 2

     

    sysctl -p 读一下,使其生效

     

    4、开启实现准备好的web网页服务

    systemctl start nginx

    systemctl start php-mysql

    systemctl start mariadb

     

    5、效果验证

    ① 可分别在rs1和rs2建立2个不同内容,统一路径的test.html测试文件,测试负载均衡功能

    在RS01 上vim ../test.html

    real server 1

    在RS01 上vim ../test.html

    real server 1

    ② 打开http://172.17.1.6/ ,并在director上用ipvsadm -L -n观察访问连接

    ③ 用另外一台测试机,用ab压力测试工具,测试经过负载均衡后的服务器容量

     

     

    实战三:实现80、443端口都可访问服务,且LVS实现持久连接

    1、环境准备

    机器名称

    IP配置

    服务角色

    lvs-server

    VIP:172.17.100.100

    负载均衡器

    rs01

    RIP:172.17.1.7

    后端服务器

    rs02

    RIP:172.17.22.22

    后端服务器

     

    2、在vs 上设置:

    ① 在iptables 打上标记,把80端口标记为99

    iptables -t mangle -A PREROUTING -d 172.17.100.100 -p tcp --dport 80 -j MARK --set-mark 99

    在iptables打上标记,把443端口标记为99

    iptables -t mangle -A PREROUTING -d 172.17.100.100-p tcp --dport 443 -j MARK --set-mark 99

     

    ② 在lvs上建立基于99号标记的虚拟服务

    ipvsadm -A -f 99 -s rr -p

    设置后端服务地址,用DR模式

    ipvsadm -a -f 99 -r 172.17.1.7 -g

    ipvsadm -a -f 99 -r 172.17.22.22 -g

    解析:-p 就是持久连接

     

    3、在rs 准备好了的web服务,开启80、443端口

    关于ssl 443加密的代码,具体实现下实验四

     

    4、测试,自己windows 做客户端,访问 http://172.17.1.6/

    访问 http://172.17.1.6/

      

    实验四:实现ssl 加密

    (1)一个物理服务器设置一个https

    1、创建存放证书的目录

    mkdir /etc/nginx/ssl

     

    2、自签名证书

    cd /etc/pki/tls/certs/

    make nginx.crt

    openssl rsa -in nginx.key -out nginx2.key 因为刚私钥被加密了,为了后边方便,解密

     

    3、把证书和私钥cp 到nginx存放证书目录

    cp nginx.crt nginx2.key /etc/nginx/ssl/

    cd /etc/nginx/ssl/

    mv nginx2.key nginx.key 把名字改回来

     

     

    4、修改配置文件,加一段server

    server {

    listen 443 ssl;

    server_name www.along.com;

    ssl on;

    ssl_certificate /etc/nginx/ssl/nginx.crt;

    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    ssl_session_cache shared:sslcache:20m;

    ssl_session_timeout 10m;

    }

     

    5、测试,网页打开 https://192.168.30.7/

    windows 信任证书

     

    (2)因为nginx 强大,可以实现多个虚拟主机基于不同的FQDN 实现ssl加密,httpd不能实现

    一个物理服务器设置多个https

    1、生成3个证书和私钥

    make nginx.crt

    make nginx2.crt

    make nginx3.crt

     

    2、把证书和私钥cp 到nginx存放证书目录,并解开私钥的加密

    cp nginx{1,2,3}* /etc/nginx/ssl/

    openssl rsa -in nginx.key -out nginx.key

    openssl rsa -in nginx2.key -out nginx2.key

    openssl rsa -in nginx3.key -out nginx3.key

     

    3、创建各自对应的访问网页

    mkdir /app/website{1,2,3}

    echo website1 > /app/website1/index.html

    echo website1 > /app/website2/index.html

    echo website1 > /app/website3/index.html

     

    4、测试访问,成功

     

  • 相关阅读:
    Mysql日期函数,时间函数使用的总结
    java与.net比较学习系列(7) 属性
    java与.net比较学习系列(6) 数组
    java与.net比较学习系列(5) 流程控制语句
    java与.net比较学习系列(4) 运算符和表达式
    java与.net比较学习系列(3) 基本数据类型和类型转换
    java与.net比较学习系列(2) 基础语言要素
    java与.net比较学习系列(1) 开发环境和常用调试技巧
    一个简单的数字处理
    SQLSERVER分页存储过程
  • 原文地址:https://www.cnblogs.com/haiyabtx/p/7843443.html
Copyright © 2020-2023  润新知