企业架构实战篇

一、简介

企业中常用的web架构主要的目的是实现高可用及其容灾备份,说白了就是让用户有更好的用提体验,一个架构的可用性只有在经历过上线后接受用户的使用才能体现出其稳定性及其不足之处。利用周末的时间出于无聊,所以想总结以前所学的知识,本文主要介绍lvs,keepalived,nginx-proxy,等常用服务的搭建及其原理。

    

    二、lvs概述及NAT、DR原理

    专题一:

    lvs-nat(Linux virtual system)是根据请求报文的目标ip和目标端口进行调度转发至后端某主机。在实际生产中常用的模型有NAT(Network Address Translation)和DR(Direct Routing),下面我们从这两开始展开叙述。

    NAT模型拓扑图:


    原理:客服端发起请求,请求到达lvs前端调度器,通过将请求报文中的目标IP地址和目标端口修改为后端真实服务器的IP地址和端口实现转发,后端真实主机处理请求后又将响应报文以相同的原理经过调度器响应给用户。如图所示,开始时源地址为CIP目标地址为VIP,经过LVS发生目标地址转换,将VIP转换为RIP,则源地址为CIP目标地址为RIP,real server发现目标地址为自己地址时开始拆报文并给出响应。

实战部署:

VIP1:10.1.10.65

DIP1:192.168.184.128

RIP1:192.168.184.129

RIP2:192.168.184.130

要求:两台real server网关要指向DIP.VIP和DIP需在同一个网段,且为内网地址

Real server1:
    route add default gw 192.168.184.128 
Real server2:
    route add default gw 192.168.184.128 
Virutal server:
ipvsadm -A -t 10.1.10.65:80 -s rr 
ipvsadm -a -t 10.1.10.65:80 -r 192.168.184.129 -m -w 1 
ipvsadm -a -t 10.1.10.65:80 -r 192.168.184.130 -m -w 2 
echo 1>/proc/sys/net/ipv4/ip_forward #开启ip_forward转发功能

示例图:


两台real server网关必须指向directory routing.

添加ipvsadm规则,使用默认权重为1,进行测试,实验结果为轮询。

修改默认权重为1:2,及其静态调度算法为加权轮询,测试结果为1:2加权轮询。

    总结:lvs-nat重要的注意点为路由需指向直连路由,需开启转发功能,常用的静态和动态轮询算法有:rr,wrr,SH,DH,LC,WLC.SED,NQ,LBLC,LBLCR等

    专题二: 

     lvs-dr(lvs director routing)是通过将请求报文重新封装其MAC地址进行转发,源MAC地址为DIP所在接口的IP地址,而目标MAC地址为从后端挑选出来的real server的MAC地址IP首部不发生变换 。  

 DR模型拓扑图:   

原理:lvs-dr模型中,请求报文的目标地址和源地址为发生改变,而在dr上重新封装了MAC地址,最大的改变是后端的real server和dr都配备了VIP地址,而real server响应用户请求时不经由dr进行转发,直接将报文发送给客服端主机。在每个real server和dr上配有VIP地址,因此为了达到real sever不直接响应dr,需修改内核参数,将VIP绑定在lo回环接口的别名上,两参数分别为:arp_ignore,arp_announce。

    实战部署:

VIP1:10.1.10.88

DIP1:10.1.10.65

RIP1:10.1.10.66

VIP1:10.1.10.88

RIP2:10.1.10.67

VIP1:10.1.10.88

   要求:需调整内核参数,为每一个需要VIP地址的主机天界VIP地址 

real server01:
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
ifconfig lo:0 10.1.10.66 netmask 255.255.255.255 broadcast 10.1.10.66 
route add -host 10.1.10.66 dev lo:0   
real server02
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
ifconfig lo:0 10.1.10.67 netmask 255.255.255.255 broadcast 10.1.10.67
route add -host 10.1.10.67dev lo:0
virtual server
ifconfig eno16777736:0 10.1.10.66 netmask 255.255.255.255 broadcast 10.1.10.65
ipvsadm -A -t 10.1.10.88:80 -s rr 
ipvsadm -a -t 10.1.10.88:80 -r 10.1.10.66 -g -w 1 
ipvsadm -a -t 10.1.10.88:80 -r 10.1.10.67 -g -w 2

    上诉均可使用脚本实现如下:

#!/bin/bash
#
vip=‘10.1.10.99‘
iface=‘eno16777736:0‘
mask=‘255.255.255.255‘
port=‘80‘
rs1=‘10.1.10.66‘
rs2=‘10.1.10.67‘
scheduler=‘wrr‘
type=‘-g‘
case $1 in
start)
  ifconfig $iface $vip netmask $mask broadcast $vip up
  iptables -F
  ipvsadm -A -t ${vip}:${port} -s $scheduler
  ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
  ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 2
  ;;
stop)
  ipvsadm -C
  ifconfig $iface down
  ;;
*)
  echo "Usage $(basename $0) start|stop"
  exit 1
  ;;
esac

     示例图:

设置为加权轮询权重比为1:2,及其添加ipvs规则

实验结果如下图,实现1:2说明实验成功 ,可修改其调度算法再次验证其结果的真实性。

 总结:lvs-dr重点在于给dr及其real server配置VIP地址,并且向real server设置内核参数,是的real server中的lo:0上的VIP地址不直接响应dr,而是由real server直接响应客服端请求。上诉实验中有个缺点,当real server主机服务提供服务时,用户请求页面很不友好,需给出相应的应急页面。

 

    三、实战keepalived高可用集群解决方案

    专题三:

keepalived是vrrp协议的实现,原生设计目的是为了高可用ipvs服务,keepalived能够配置文件中的定义生成ipvs规则,并能够对各RS的健康状态进行检测;通过共用的虚拟IP地址对外提供服务;在主备模式下,每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器宕机,其虚拟IP地址将会被其他服务器接替(优先级决定接替顺序),实现高可用为后端主机提供服务。主/备,备/主双主模式下,两台调度器均处于提供服务的状态,当其中一台服务器宕机或出现故障时,VIP将会“漂移”至另一台服务器。

 keepalived拓扑图:

    原理:keepalived的实现主要是由vrrp协议,自定义vrrp_instance,vrrp_server和一些检测脚本一起共同合作,实现自动分配VIP,和ipvs规则,少去了手动配置ipvs的麻烦,同时还能够配置应急服务器、用简单脚本能在恢复模式下进行系统修复等,比起lvs优越性更高。

  实战部署:

DIP1:10.1.10.65

VIP1:10.1.10.88

VIP2:10.1.10.99

DIP2:10.1.10.68

VIP1:10.1.10.88

VIP2:10.1.10.99

RIP1:10.1.10.66

VIP1:10.1.10.88

VIP2:10.1.10.99

RIP2:10.1.10.67

VIP1:10.1.10.88

VIP2:10.1.10.99

    要求:配置过程中,主的优先级要高于备,同时将主备的state状态互调。 

编辑/etc/keepalived/keepalived.conf,将此配置文件拷贝至另一台keepalived主机修改相应部分即可。
! Configuration File for keepalived
global_defs {
   notification_email {
[email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id centos7s
   vrrp_mcast_group4 224.0.4.18
}
vrrp_instance VI_1 {
    state MASTER #实例状态信息
    interface eno16777736
    virtual_router_id 51
    priority 100 #优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass frSAmesXYSSFmw
    }
    virtual_ipaddress {
        10.1.10.88 dev eno16777736 labeleno16777736:0
    }
    notify_master "/etc/keepalived/notify.sh master" #此处调用脚本实现发邮件给管理员
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_instance VI_2 {
    state BACKUP
    interface eno16777736
    virtual_router_id 52
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass frSAresXYSSFmw
    }
    virtual_ipaddress {
        10.1.10.99 dev eno16777736 labeleno16777736:1
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}
virtual_server 10.1.10.88 80 {
    delay_loop 6 
    lb_algo rr #调度算法
    lb_kind DR #负载均衡模型
    protocol TCP
    sorry_server 127.0.0.1 80 #应急服务器
    real_server 10.1.10.66 80 {
        weight 1
        HTTP_GET {
            url {
              path /
status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 10.1.10.67 80 {
        weight 2
        HTTP_GET {
            url {
              path /
status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
virtual_server 10.1.10.99 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 10.1.10.66 80 {
        weight 1
        HTTP_GET {
            url {
              path /
status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 10.1.10.67 80 {
        weight 2
        HTTP_GET {
            url {
              path /
status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}


    示例图:

    配置完成后启动keepalived会自动生成ipvs规则

   测试结果为设定的轮询算法,同时模拟后端某服务器故障,查看相应的服务器是否能符合正常需求 

    测试结果为设定的轮询算法,同时模拟后端服务器故障,查看相应的ipvs规则是否自动生成


    测试结果为设定的轮询算法,同时模拟后端某服务器故障,查看相应的应急页面是否能符合正常需求

  总结:在keepalived中需注意的事项为,配置vrrp_instance实例时需注意主备的状态及其优先级,比起lvs来说keepalived总体配置简单,且ipvs规则自动生成省去了“人工智能”。

四、nginx前端调度高可用实战

专题四:

对于一个大型网站来说,负载均衡是永恒的话题。随着硬件技术的迅猛发展,越来越多的负载均衡硬件设备涌现出来,如F5 BIG-IP、Citrix NetScaler、Radware等等,虽然可以解决问题,但其高昂的价格却往往令人望而却步,因此负载均衡软件仍然是大部分公司的不二之选。nginx作为webserver的后起之秀,其优秀的反向代理功能和灵活的负载均衡策略受到了业界广泛的关注。  

    nginx高可用拓扑图:


原理:nginx是高度模块化的应用程序,其中nginx_proxy模块即可实现负载均衡,将前端的用户请求通过调度算法分摊在后端的真实主机,达到均衡的效果。nginx_proxy也依赖于vrrp协议来实现VIP的自动分配和漂移,和keepalived不同的是nginx将不会生成ipvs规则,而是使用upstream模块将前端请求转发至后端。

    实战部署:

VIP1:10.1.10.88

VIP2:10.1.10.99

RIP1:10.1.10.66

RIP2:10.1.10.67

   要求:在配置过程中开启nginx的upstream模块,并代理到后端主机

! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id centos7s
vrrp_mcast_group4 224.0.120.18
}
vrrp_script chk_down { #在恢复模式下实现将机器更新,或更换服务器
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 1
weight -5
}
vrrp_script chk_nginx { #健康状态检测,检测nginx是否存活
script "killall -0 nginx && exit 0 || exit 1"
interval 1
weight -5
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 53
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 9818sss1
}
virtual_ipaddress {
10.1.10.88/16 dev eno16777736
}
track_script {
chk_down
chk_nginx
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_instance VI_2 {
state BACKUP
interface eno16777736
virtual_router_id 54
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 9818rss1
}
virtual_ipaddress {
10.1.10.99/16 dev eno16777736
}
track_script {
chk_down
chk_nginx
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
http {
upstream websrvs {
    server 10.1.10.66:80 weight=1;#设置其权重为1,默认为1
    server 10.1.10.67:80 weight=1;#设置其权重为1,默认为1
    server 127.0.0.1:8080 backup;#设置其应急响应服务器
}
...
server{
location / {
        #root   /usr/share/nginx/html;
        index   index.php index.html index.htm;
        proxy_pass http://websrvs;    #代理至后端主机
    }
}
...
}

示例图示:

    配置vrrp实例后将遵循自动生成VIP地址及其自动实现地址漂移

 模拟将后端一台服务器故障和全体故障的测试结果

实例中内嵌检测nginx健康状态检测脚本当nginx宕机时,则会自动将权重减去5,VIP地址漂移至优先级高的主机

    总结:在所有的负载均衡调度中nginx配置最为简单而且高效,同时很灵活,所以可根据自己业务需求将选择合适自己企业的解决方案。

时间: 2024-10-06 21:07:21

企业架构实战篇的相关文章

企业级电商项目P2P金融项目实战,企业架构师培训视频课程

15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat. Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.性能调优.高并发.

大数据企业架构师精品课程(大数据篇)

视频课程包含: 大数据企业架构师精品课程(大数据篇)包含01.hadoop100集全.02.大数据_HBase视频教程.03.大数据_Hive视频教程.04.大数据_Spark_视频教程.05.大数据_zookeeper视频教程.06.R语言速成实战.07.python等等! 2017最火的可能就数大数据了,这里给大家按照一定思路整理了全套大数据视频教程,涵盖大数据全部知识点. 本视频属于作者原创搜集整理!下载方式:翻阅到文章底部 总目录 01.hadoop100集全 02.大数据_HBase视

企业中MySQL主流高可用架构实战三部曲之MHA

老张最近两天有些忙,一些老铁一直问,啥时更新博文,我可能做不到天天更新啊,但保证以后一有空就写一些干货知识分享给大家. 我们如果想要做好技术这项工作,一定要做到理论与实践先结合.我一个曾经被数据库虐得体无完肤的过来人给大家一些建议:就是只看书,背理论真的行不通,到时遇到棘手的问题,你还是一样抓瞎.一定要在理论理清的基础上多做实验. 给自己定个目标,3个月做够100-500个实验.然后整理在做实验过程中的各种报错,认真解读分析报错原理,做好笔记.最后再拿起书,重新阅读之前有些可能理解不了的理论知识

企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群:

(转)企业Shell实战-MySQL分库分表备份脚本

本文来自http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.html 企业Shell实战-MySQL分库分表备份 今天是2015年的最后一天,大家都开心的跨年,而我还在苦逼的呵呵-省略 此处内容来自老男孩教育oldboy以及老男孩26期王续精彩分享整理而来  为表示感谢,特整理此篇博文分享给大家! 项目联系笔者QQ:572891887   也可以加入架构师交流群:

基于大数据技术之电视收视率企业项目实战(hadoop+Spark)张长志(项目实战)

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

基于Dubbo的分布式系统架构实战视频课程

课程介绍:Dubbo是阿里巴巴开源的分布式服务化治理框架(微服务框架),久经阿里巴巴电商平台的大规模复杂业务的高并发考验,到目前为止Dubbo仍然是开源界中体系最完善的服务化治理框架,因此Dubbo被国内大量的的互联网公司和专统企业使用,国内使用Dubbo的企业有:阿里巴巴.京东.当当.携程.去哪儿.搜狐.南方航空.中软国际.软通动力.各大电信运营商等 京东.当当.去哪儿等企业还组建了自己的中间件团队按自己的业务需求对Dubbo进行框架定制,目前当当网已开源了自己的Dubbo定制版Dubbox

中台架构50篇资料精选,阿里/腾讯/京东...中台建设实践汇集

中台架构50篇资料精选,阿里/腾讯/京东...中台建设实践汇集 内容包括7大类:阿里专家谈中台.行业专家解读中台.大厂中台架构实践.数据中台.技术中台.组织中台.中台建设方法论. 01 阿里架构专家,谈中台架构 1.阿里技术专家玄难:小前台大中台是什么? 2.阿里云架构总监谢纯良:企业盲目跟风做中台会不会死 3.阿里技术专家玄难:从平台到中台的演进 4.阿里架构师古谦:未来最核心的竞争壁垒在数据技术 5.阿里搜索中台:开发运维一体化实践 6.阿里技术中台:研发管理难题如何应对? 7.阿里架构总监

2天驾驭DIV+CSS (实战篇)(转)

这是去年看到的一片文章,感觉在我的学习中,有不少的影响.于是把它分享给想很快了解css的兄弟们.本文是实战篇. 基础篇[知识一] “DIV+CSS” 的叫法是不准确的[知识二] “DIV+CSS” 将你引入两大误区[知识三] 什么是W3C标准?[基础一] CSS如何控制页面[基础二] CSS选择器[基础三] CSS选择器命名及常用命名[基础四] 盒子模型[基础五] 块状元素和内联元素 实战篇[第一课] 实战小热身[第二课] 浮动[第三课] 清除浮动[第四课] 导航条(上) | 导航条(下)[大练