Nginx、HAProxy、LVS三者的优缺点

一、Nginx优点: 1、工作在网络7层之上,可针对http应用做一些分流的策略,如针对域名、目录结构,它的正规规则比HAProxy更为强大和灵活,所以,目前为止广泛流行。 2、Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能。 3、Nginx安装与配置比较简单,测试也比较方便,基本能把错误日志打印出来。 4、可以承担高负载压力且稳定,硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS小。 5、Nginx可以通过端口检测到服务器内部的故障,如根据服务器处理网页返回的状态码、超时等,并会把返回错误的请求重新提交到另一个节点。 6、不仅仅是优秀的负载均衡器/反向代理软件,同时也是强大的Web应用服务器。LNMP也是近些年非常流行的Web架构,在高流量环境中稳定性也很好。 7、可作为中层反向代理使用。 8、可作为静态网页和图片服务器。 9、Nginx社区活跃,第三方模块非常多,相关的资料在网上比比皆是。 Nginx常规的和HTTP请求和相应流程图: Nginx缺点: 1、适应范围较小,仅能支持http、https、Email协议。 2、对后端服务器的健康检查,只支持通过端口检测,不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。   二、LVS优点: 1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。 2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。 3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived。 4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。 5、应用范围比较广,因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、在线聊天室等等。 LVS DR(Direct Routing)模式的网络流程图: LVS的缺点: 1、软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。 2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了,特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。   三、HAProxy优点: 1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段) 2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。 3、HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。 4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。 5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种 ① roundrobin 表示简单的轮询,每个服务器根据权重轮流使用,在服务器的处理时间平均分配的情况下这是最流畅和公平的算法。该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。最大支持4095个后端主机; ② leastconn 连接数最少的服务器优先接收连接。leastconn建议用于长会话服务,例如LDAP、SQL、TSE等,而不适合短会话协议。如HTTP.该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。 ③ static-rr 每个服务器根据权重轮流使用,类似roundrobin,但它是静态的,意味着运行时修改权限是无效的。另外,它对服务器的数量没有限制。该算法一般不用; ④ source 对请求源IP地址进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。只要服务器正常,同一个客户端IP地址总是访问同一个服务器。如果哈希的结果随可用服务器数量而变化,那么客户端会定向到不同的服务器;该算法一般用于不能插入cookie的Tcp模式。它还可以用于广域网上为拒绝使用会话cookie的客户端提供最有效的粘连;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。 ⑤ uri 表示根据请求的URI左端(问号之前)进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。只要服务器正常,同一个URI地址总是访问同一个服务器。一般用于代理缓存和反病毒代理,以最大限度的提高缓存的命中率。该算法只能用于HTTP后端;该算法一般用于后端是缓存服务器;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。 ⑥ url_param 在HTTP GET请求的查询串中查找<param>中指定的URL参数,基本上可以锁定使用特制的URL到特定的负载均衡器节点的要求;该算法一般用于将同一个用户的信息发送到同一个后端服务器;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。 ⑦ hdr(name) 在每个HTTP请求中查找HTTP头<name>,HTTP头<name>将被看作在每个HTTP请求,并针对特定的节点;如果缺少头或者头没有任何值,则用roundrobin代替;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。 ⑧ rdp-cookie(name) 为每个进来的TCP请求查询并哈希RDP cookie<name>;该机制用于退化的持久模式,可以使同一个用户或者同一个会话ID总是发送给同一台服务器。如果没有cookie,则使用roundrobin算法代替;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。 haproxy的工作模型图: HAPorxy缺点: 1. 不支持POP/SMTP协议 2. 不支持SPDY协议 3. 不支持HTTP cache功能。现在不少开源的lb项目,都或多或少具备HTTP cache功能。 4. 重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好。 5. 多进程模式支持不够好 ——————— 作者:qi_li_juan 来源:CSDN 原文:https://blog.csdn.net/qlj324513/article/details/81541282 版权声明:本文为博主原创文章,转载请附上博文链接!

nginx实现请求的负载均衡 + keepalived实现nginx的高可用

前言 使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力。通过负载均衡调度服务器,将来自浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈。 摘自《大型网站技术架构_核心原理与案例分析》 另外,大家可以看我的这两篇博客:LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡 和 主从热备+负载均衡(LVS + keepalived),对比下这三篇博客,其中区别及各自的优缺点需要大家好好体会。 环境准备 192.168.0.221:nginx + keepalived   master 192.168.0.222:nginx + keepalived   backup 192.168.0.223:tomcat 192.168.0.224:tomcat 虚拟ip(VIP):192.168.0.200,对外提供服务的ip,也可称作浮动ip 各个组件之间的关系图如下: tomcat做应用服务器 tomcat的安装不在本博客范围之内,具体可参考virtualBox安装centos,并搭建tomcat,tomcat的webapps下记得放自己的应用,我的是myWeb,如果大家也用我的myWeb,那么index.jsp中的ip需要换成自己的 将192.168.0.223、192.168.0.224上的tomcat启动起来,tomcat的路径可能和我的不一致,需要写成自己的 # cd /usr/local/tomcat7/bin # ./startup.sh 访问myWeb如下 nginx做负载均衡 nginx的安装,本文就不讲述了,具体可参考LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡 nginx.conf内容如下

主从nginx的配置文件完全一样,nginx.conf配置可复杂可简单,大家根据自己的情况自行配置,照搬上述配置也是可以的。 配置好后,启动nginx,路径要写自己的 # cd /usr/local/nginx/sbin # ./nginx 访问nginx,效果如下: 两台nginx服务器服务正常,此时是没有主从之分的,两者级别一样高,当配置keepalived之后就有了主从之分了。 keepalived实现nginx高可用(HA) keepalived的安装本文就不讲述了,具体可参考主从热备+负载均衡(LVS + keepalived) keepalived作用其实在第一张图中已经有所体现,主要起到两个作用:实现VIP到本地ip的映射; 以及检测nginx状态。 master上的keepalived.conf内容如下:

backup上的keepalived.conf内容如下:

nginx检测脚本check_nginx_pid.sh内容如下:

启动keepalived # service keepalived start 访问VIP,效果如下: 我们来看下keepalived的日志信息 master(192.168.0.221): backup(192.168.0.222): 当我们把master上的keepalived停掉(模拟宕机),再来看下keepalived日志 原master(192.168.0.221): 原backup(192.168.0.222): 通过VIP可以正常访问服务,前端请求感受不到后端nginx的切换;重新唤醒原master(192.168.0.221)的测试这里就不进行了,大家自行测试 注意点 1、执行脚本时报错:/bin/sh^M: bad interpreter: 没有那个文件或目录 因为操作系统是windows,我在windows下编辑的脚本,所以有可能有不可见字符。脚本文件是DOS格式的, 即每一行的行尾以回车符和换行符来标识, 其ASCII码分别是0x0D, 0x0A。可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的 解决方法: vim filename :set ff? #可以看到dos或unix的字样. 如果的确是dos格式的。 :set ff=unix #把它强制为unix格式的, 然后存盘退出。 再次运行脚本。 从windows编辑文件再拷贝到linux时要特别注意,另外,脚本需要赋予可执行权限才能执行,可执行文件的一种直观表现就是文件本身呈绿色。 2、负载均衡最好进行多浏览器测试,有些浏览器会缓存,会产生没有负载均衡的效果,例如我这次测试中谷歌浏览器就出现了类似的情况(还没搞清楚是否是缓存的原因),火狐,360、IE浏览器都是正常的负载均衡效果。 3、请求走向 访问虚拟IP(VIP),keepalived将请求映射到本地nginx,nginx将请求转发至tomcat,例如:http://192.168.0.200/myWeb/,被映射成http://192.168.0.221/myWeb/,端口是80,而221上nginx的端口正好是80;映射到nginx上后,nginx再进行请求的转发。 keepalived服务器的ip情况 VIP总会在keepalived服务器中的某一台上,也只会在其中的某一台上;VIP绑定的服务器上的nginx就是master,当VIP所在的服务器宕机了,keepalived会将VIP转移到backup上,并将backup提升为master。 4、VIP也称浮动ip,是公网ip,与域名进行映射,对外提供服务; 其他ip一般而言都是内网ip, 外部是直接访问不了的 参考 《大型网站技术架构_核心原理与案例分析》 keepalived+nginx双机热备+负载均衡 浮动IP(FLOAT IP)   from: https://www.cnblogs.com/youzhibing/p/7327342.html

keepalived实现双机热备

keepalived的作用是检测后端TCP服务的状态,如果有一台提供TCP服务的后端节点死机,或者工作出现故障,keepalived会及时检测到,并将有故障的节点从系统中剔除,当提供TCP服务的节点恢复并且正常提供服务后keepalived会自动将TCP服务的节点加入到集群中。这些工作都是keepalived自动完成,不需要人工干涉,需要人工做的只是修复发生故障的服务器,以下通过示例来演示。 前提:为了测试能顺利进行,需先关闭selinux和firewalld。 测试环境如下: 1 2 3 4 5 keepalived主机: 10.0.0.20 keepalived备机: 10.0.0.21 http服务器1:   10.0.0.22 http服务器2:   10.0.0.23 VIP :       10.0.0.100   一、两台http服务器的安装 1、  两台机均安装httpd 1 $ sudo yum install -y httpd   2、  添加首页 1 2 3 4 5 6 7 $ sudo -i #http服务器1设置 # echo “10.0.0.22” >/var/www/html/index.html #http服务器2设置 # echo “10.0.0.23” >/var/www/html/index.html   3、  启动并设置开机启动httpd 1 2 $ sudo systemctl start httpd $ sudo systemctl enable httpd   二、两台keepalived主机的设置 1、  两台机均安装keepalived 1 2 3 #安装依赖文件与keepalive $ sudo yum install -y openssl openssl-devel keepalived   2、  keepalived主机配置   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 $ sudo vim /etc/keepalived/keepalived.conf   vrrp_instance VI_1 {     #指定该节点为主节点,备用节点设置为BACKUP     state MASTER     #绑定虚拟IP的网络接口     interface eno16777736     #VRRP组名,两个节点设置一样,以指明各个节点同属一VRRP组     virtual_router_id 51     #主节点的优先级,数值在1~254,注意从节点必须比主节点的优先级别低     priority 50     ##组播信息发送间隔,两个节点需一致     advert_int 1     #设置验证信息,两个节点需一致     authentication{       auth_type PASS       auth_pass 1111     }     #指定虚拟IP,两个节点需设置一样     virtual_ipaddress{       10.0.0.100     }  } #虚拟IP服务 virtual_server 10.0.0.100 80 {     #设定检查间隔     delay_loop 6    #指定LVS算法     lb_algo rr    #指定LVS模式     lb_kind NAT     nat_mask 255.255.255.0    #持久连接设置,会话保持时间    persistence_timeout 50    #转发协议为TCP    protocol TCP   #后端实际TCP服务配置   real_server 10.0.0.22 80 {      weight 1   }   real_server 10.0.0.23 80 {      weight 1   } }   3、   keepalived备机的keepalived.conf的配置,不同之处如下: 1 2 3 4 state BACKUP priority 30 #其它配置跟keepalived主机相同   /etc/keepalived/keepalived.conf为keepalived的主配置文件。以上配置state表示主节点为10.0.0.20,副节点为10.0.0.21。虚拟为IP10.0.0.100。后端的真实服务器为10.0.0.22和10.0.0.23,当通过10.0.0.100访问web服务器时,自动转到后端真实服务器,后端节点的权重相同,类似轮询的模式。   三、keepalived的启动与测试 1、  启动keepalived 1 2 $ sudo systemctl start keepalived $ sudo systemctl enable keepalived   2、  查看keepalived主机的IP 1 $ ip addr show   四、测试结果 1、  测试前查看keepalived主机和备机的IP,结果如图:   2、  重启keepalived主机后,查看keepalived备机的IP显示   以上测试结果说明,当keepalived备机在keepalived主机宕机的情况会自动接管了资源。但待keepalived主机恢复正常的时候,主机会重新接管资源。   from: https://www.cnblogs.com/jefflee168/p/7442127.html

详解keepalived配置和使用

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lanlian.blog.51cto.com/6790106/1303195 一、keepalived简介: keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。   工作原理 Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下: Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。 Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。 Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。   二、实验步骤: 1.创建管理节点在node1上,建立双机互信node1和node2,然后同步时间,安装keepalived 1 2 3 4 [root@node1~]# ansible all -m yum -a 'name=keepalived state=present' [root@node1keepalived]# rpm -qc keepalived /etc/keepalived/keepalived.conf//生成的主配置文件 /etc/sysconfig/keepalived   2.在node1上配置文件需要做一下修改 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 global_defs{    notification_email {         root@localhost         //收邮件人,可以定义多个    }    notification_email_from kaadmin@localhost       //发邮件人可以伪装    smtp_server 127.0.0.1  //发送邮件的服务器地址    smtp_connect_timeout 30 //连接超时时间    router_id LVS_DEVEL        } vrrp_instanceVI_1 {    //每一个vrrp_instance就是定义一个虚拟路由器的     state MASTER       //由初始状态状态转换为master状态     interface eth0         virtual_router_id 51    //虚拟路由的id号,一般不能大于255的     priority 100    //初始化优先级     advert_int 1    //初始化通告     authentication {   //认证机制         auth_type PASS         auth_pass 1111   //密码     }     virtual_ipaddress {     //虚拟地址vip        172.16.2.8     } } 3.把配置文件复制到node2上一份,并修改初始状态和优先级 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@node1keepalived]# scp keepalived.conf node2:/etc/keepalived/ [root@node2~]# cd /etc/keepalived/ [root@node2keepalived]# ls keepalived.conf [root@node2keepalived]# vim keepalived.conf vrrp_instanceVI_1 {     state BACKUP //初始化状态     interface eth0     virtual_router_id 51     priority 99      //优先级,一定要比master的优先级要低     advert_int 1     authentication {         auth_type PASS         auth_pass 1111     }     virtual_ipaddress {         172.16.2.8     } } 在node1上开始启动服务[root@node1 ~]# servicekeepalived start 然后检查ip地址 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@node1~]# ip addr show 1:lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN     link/loopback00:00:00:00:00:00 brd00:00:00:00:00:00     inet 127.0.0.1/8scope host lo     inet6 ::1/128scope host        valid_lft forever preferred_lft forever 2:eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast stateUP qlen 1000     link/ether00:0c:29:4e:22:fb brdff:ff:ff:ff:ff:ff   inet 172.16.2.1/16brd 172.16.255.255 scopeglobal eth0     inet 172.16.2.8/32scopeglobal eth0  inet 172.16.10.8/16brd 172.16.255.255 scopeglobal secondary eth0:0     inet6 fe80::20c:29ff:fe4e:22fb/64scopelink        valid_lft forever preferred_lft forever 3:pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN     link/ether2e:79:b3:b2:3e:31 brdff:ff:ff:ff:ff:ff 4.现在把node1的keepalived停掉 [root@node1keepalived]# service keepalived stop Stoppingkeepalived: [ OK ] 验证node2是否把virtual_ipaddress拿走 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@node2~]# ip addr show 1:lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN     link/loopback00:00:00:00:00:00 brd00:00:00:00:00:00     inet 127.0.0.1/8scope host lo     inet6 ::1/128scope host        valid_lft forever preferred_lft forever 2:eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast stateUP qlen 1000     link/ether00:0c:29:74:c7:7b brdff:ff:ff:ff:ff:ff     inet 172.16.2.16/16brd172.16.255.255 scope global eth0     inet 172.16.2.8/32scopeglobal eth0     inet6 fe80::20c:29ff:fe74:c77b/64scopelink        valid_lft forever preferred_lft forever 3:pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN link/ether0a:b1:ef:7b:93:18 brd ff:ff:ff:ff:ff:ff 验证成功   可以在配置文件中手动通过vrrp_script定义一个外围的检测机制,并在vrrp_instance中通过定义track_script来追踪脚本执行过程,实现节点转移 实验测试在/etc/keepalived/keepalived.conf中做一下修改 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 global_defs{    notification_email {         root@localhost    }    notification_email_from kaadmin@localhost    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id LVS_DEVEL } vrrp_script chk_maintainace { //检测机制的脚本名称为chk_maintainace         script "[[ -e/etc/keepalived/down ]] && exit 1 || exit 0"//可以是个脚本路径,也可以是脚本命令         interval 1 //每隔1秒中检测一次         weight -2 //优先级减2 } vrrp_instanceVI_1 {     state MASTER     interface eth0     virtual_router_id 51     priority 100     advert_int 1     authentication {         auth_type PASS         auth_pass 1111     }     virtual_ipaddress {         172.16.2.8     }    track_script { //调用外围脚本,追踪外围脚本执行过程         chk_maintainace } } [root@node1 keepalived]# touch down //在node1上创建down文件 [root@node1 keepalived]# ls down  keepalived.conf  keepalived.conf.bak 在node2上做同样的操作,但不创建down文件,之后一起重启服务 1 2 3 4 5 6 7 [root@node1 keepalived]# ansible all -m shell -a 'service keepalivedrestart' node2.magedu.com| success | rc=0 >> Stoppingkeepalived: [FAILED] Startingkeepalived: [  OK  ] node1.magedu.com| success | rc=0 >> Stoppingkeepalived: [  OK  ] Startingkeepalived: [  OK  ] 进行检测 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@node2keepalived]# ip addr show 1:lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state […]

AMQP消息服务器 RabbitMQ

RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成,因此也是继承了这些优点。 AMQP 里主要要说两个组件:Exchange 和 Queue (在 AMQP 1.0 里还会有变动),如下图所示,绿色的 X 就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker ,这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型: from:https://www.oschina.net/p/rabbitmq

Windows server 2012网络负载均衡NLB

Windows server 2012网络负载均衡NLB 今天把NLB给装了下,就截图分享给大家吧,其实界面貌似和2003都差不多,基本上没有什么改变,算是给大家熟悉界面了。 虽然工作组也可以搭建NLB,不过实际公司使用大多数都是域环境,对于工作组我就不多做介绍了,大家可以自行百度,本次因为是实验,所以我在虚拟机里面给每台机器只加了一块网卡,一般来说,都是需要两块以上的网卡的 我这里有三台机器,NLB1,NLB2和NLB3 首先打开NLB2和NLB3服务器管理器,添加网络负载均衡NLB 接下来在NLB1机器搭建域环境 这里我们的域名就设置为loveworld.com 环境搭起来后,我们就开始配置NLB,打开负载均很管理器,选择新建 添加一台机器作为一个节点 基本上按照默认设置就可以 设置一个集群ip,以后我们访问这个ip就可以了 这里我们设置为多播,关于多播和单播,建议大家百度下,大家也可先把实验做完,然后再百度深入理解 然后添加另外一台机器 这里的优先级设置为2 配置完成 为了方便验证,我们在NLB2和NLB3两台机器上安装了IIS,然后设置index.htm分别显示为NLB2、NLB3。 我们在NLB1上首先ping一下集群的ip 10.1.1.1,可以ping通,然后再NLB1上打开浏览器,输入http://10.1.1.1,如图: 在这里我们可以发现是打开的NLB2的WEB服务,我们将NLB2这台机器暂停掉 然后清空IE历史记录,重新在NLB1上输入http://10.1.1.1 在这里,我们看到,自动切换到了NLB3上面 在实际操作过程中,我们可以搭建两台web服务器,两台web服务器可以用DFS文件服务实现同步,其中一台挂掉了,另外一台就会自动切换过去,两台都没挂掉的情况下,还可以实现负载均衡,大大的提高了web服务的效率和安全性。   from:http://www.shangxueba.com/jingyan/1657358.html

Windows平台下安装Hadoop

1、安装JDK1.6或更高版本 官网下载JDK,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配置文件时会找不到JDK(按相关说法,配置文件中的路径加引号即可解决,但我没测试成功)。 2、安装Cygwin Cygwin是Windows平台下模拟Unix环境的工具,需要在安装Cygwin的基础上安装Hadoop,下载地址:http://www.cygwin.com/ 根据操作系统的需要下载32位或64的安装文件。 1)、双击下载好的安装文件,点击下一步,选择install from internet 2)、选择安装路径 3)、选择local Package Directory 4)、选择您的Internet连接方式 5)、选择合适的安装源,点击下一步 6)、在Select Packages界面里,Category展开net,选择如下openssh和openssl两项 如果要在Eclipe上编译Hadoop,需要安装Category为Base下的sed 如果想在Cygwin上直接修改hadoop的配置文件,可以安装Editors下的vim 7)、点击“下一步”,等待安装完成。 3、配置环境变量 在“我的电脑”上点击右键,选择菜单中的“属性",点击属性对话框上的高级页签,点击”环境变量"按钮,在系统变量列表里双击“Path”变量,在变量值后输入安装的Cygwin的bin目录,例如:D:\hadoop\cygwin64\bin 4、安装sshd服务 双击桌面上的Cygwin图标,启动Cygwin,执行ssh-host-config -y命令 执行后,会提示输入密码,否则会退出该配置,此时输入密码和确认密码,回车。最后出现Host configuration finished.Have fun!表示安装成功。 输入net start sshd,启动服务。或者在系统的服务里找到并启动Cygwin sshd服务。 可能会遇到无法安装和启动sshd服务的问题,可参考此连接http://www.cnblogs.com/kinglau/p/3261886.html。 另外如果是Win8操作系统,启动Cygwin时,需要以管理员身份运行(右键图标,选择以管理员身份运行),否则会因为权限问题,提示“发生系统错误5”。 5、配置SSH免密码登录 执行ssh-keygen命令生成密钥文件 如下图所示,输入:ssh-keygen -t dsa -P " -f ~/.ssh/id_dsa,注意-t -P -f参数区分大小写。 ssh-keygen是生成密钥命令 -t 表示指定生成的密钥类型(dsa,rsa) -P表示提供的密语 -f指定生成的密钥文件。 注意:~代表当前用户的文件夹,/home/用户名 执行此命令后,在你的Cygwin\home\用户名 路径下面会生成.ssh文件夹,可以通过命令ls -a /home/用户名  查看,ssh -version命令查看版本。 执行完ssh-keygen命令后,再执行下面命令,就可以生成authorized_keys文件了。 cd ~/.ssh/ cp id_dsa.pub authorized_keys 如下图所示: 然后执行exit命令,退出Cygwin窗口 6、再次在桌面上双击Cygwin图标,打开Cygwin窗口,执行ssh localhost命令,第一次执行该命令会有提示,输入yes后,回车即可。如下图所示 7、安装Hadoop hadoop官网下载http://hadoop.apache.org/releases.html。 把hadoop压缩包解压到/home/用户名 目录下,文件夹名称更改为hadoop,可以不修改,但后边在执行命令时稍显麻烦。 (1)单机模式配置方式 单机模式不需要配置,这种方式下,Hadoop被认为是一个单独的Java进程,这种方式经常用来调试。 (2)伪分布模式 可以把伪分布模式看作是只有一个节点的集群,在这个集群中,这个节点既是Master,也是Slave,既是NameNode,也是DataNode,既是JobTracker,也是TaskTracker。 这种模式下修改几个配置文件即可。 配置hadoop-env.sh,记事本打开改文件,设置JAVA_HOME的值为你的JDK安装路径,例如: JAVA_HOME="D:\hadoop\Java\jdk1.7.0_25" 配置core-site.xml

配置hdfs-site.xml

配置mapred-site.xml

  8、启动Hadoop 打开Cgywin窗口,执行cd ~/hadoop命令,进入hadoop文件夹,如下图: 启动Hadoop前,需要先格式化Hadoop的文件系统HDFS,执行命令:bin/hadoop namenode -format 注意namenode要小些,否则如果输入NameNode,会提示错误,找不到或无法加载主类NameNode。执行正确命令后如下图所示: 输入命令 bin/start-all.sh,启动所有进程,如下图:   接下来,验证是否安装成功 打开浏览器,分别输入下列网址,如果能够正常浏览,说明安装成功。 http://localhost:50030,回车打开MapReduce的web页面,如下图(页面部分截图):   http://localhost:50070,回车打开HDFS的web页面,如下图(页面部分截图):   第一次启动后,如果都不能浏览,或不能浏览某一个,退出Cygwin,重新打开Cygwin,执行bin/start-all.sh命令。 如果只想启动MapReduce,可执行bin/start-mapred.sh命令。 如果只想启动HDFS,可执行bin/start-dfs.sh命令。   参考文献: 本文参考和引用了《Hadoop实战》(作者:陆嘉恒)中的章节“2.3在Windows上安装与配置Hadoop”。 特此声明,如果涉及到版权问题,请告知。   from:http://www.cnblogs.com/kinglau/archive/2013/08/20/3270160.html

集群、分布式、负载均衡区别与联系

1、Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)(下面只介绍负载均衡集群) 负载均衡集群(Load Balance Cluster) 负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。 负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。 2、负载均衡系统: 负载均衡又有DNS负载均衡(比较常用)、IP负载均衡、反向代理负载均衡等,也就是在集群中有服务器A、B、C,它们都是互不影响,互不相干的,任何一台的机器宕了,都不会影响其他机器的运行,当用户来一个请求,有负载均衡器的算法决定由哪台机器来处理,假如你的算法是采用round算法,有用户a、b、c,那么分别由服务器A、B、C来处理; 3、分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。 分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。 举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。 而分布式,从窄意上理解,也跟集群差不多, 但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。 分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。 from:http://itsoul.iteye.com/blog/777212

服务器集群

服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。   服务器集群简介 一旦在服务器上安装并运行了群集服务,该服务器即可加入群集。群集化操作可以减少单点故障数量,并且实现了群集化资源的高可用性。下述各节简要介绍了群集创建和群集操作中的节点行为。[1] 注意:有关安装群集服务器的信息,请参阅 Windows server 2003产品家族的帮助和部署指南。 关于Windows Server 2003的企业版和Datacenter版都可以支持最大达8个节点的集群配置;其典型的特征是可为数据库、消息系统、文件与打印服务这些关键业务应用,提供高可用性和可扩展性,在集群中的多个服务器(节点)保持不间断的联系。即是说如果在集群中的某一节点因出错或维护不可用时,另一节点会立刻提供服务,以实现容错。正在访问服务的用户可以继续访问,而不会察觉到服务已经由另一台服务器(节点)提供。[2] 创建群集 在服务器群集产品中含有用来在服务器上安装群集软件和创建新群集的群集安装实用工具。创建新群集时,首先在选择作为群集的第一个成员的计算机上运行该实用工具。第一步是确定群集名称并创建群集数据库和初始的群集成员列表来定义新群集。 Windows server 2003 群集新增了一个群集管理设置向导以及使用 cluster.exe命令行界面创建( 包括从远程创建 )群集的功能。 创建群集的第二步是,添加可供所有群集成员使用的共用数据存储设备。这样,创建的新群集将带有一个节点、自己的本地数据存储设备以及群集共用资源 —— 通常是磁盘或数据存储和连接介质资源。 创建群集的最后一步是,在另外将要成为群集成员的每一台计算机上运行安装实用工具。每当将新节点添加到群集中时,新节点都会自动从群集的原始成员获得现有群集数据库的副本。当节点加入或形成群集时,群集服务会更新该节点私有的配置数据库副本。 形成群集 如果服务器运行了群集服务并且无法找到群集中的其它节点,它自己可以形成一个群集。要形成群集,节点必须能够获得对仲裁资源的独占权。 当最初形成群集时,群集中的第一个节点将包括群集配置数据库。每当有新节点加入群集时,新节点都会在本地获得并保持群集配置数据库的副本。仲裁资源用恢复日志(其中含有同节点无关的群集配置和状态数据)的形式存储配置数据库的最新版本。 在群集运行中,群集服务使用仲裁恢复日志执行以下操作 : 保证只有一组活动、可相互通讯的节点才能形成群集 仅当某个节点可以获得对仲裁资源的控制权时 , 才允许它形成群集 仅当某个节点可以同控制仲裁资源的节点通讯时 , 才允许它加入或留在现有群集中 集群服务的状态 从群集中的其它节点和群集服务管理接口的角度看,当形成群集时,群集中的每个节点可能处于三种不同状态中的一种。事件处理器会记录这些状态,而事件日志管理器会将这些状态复制到群集的其它节点。群集服务状态包括: 脱机。此时的节点不是完全有效的群集成员。该节点及其群集服务器可能在运行,也可能未运行。 联机。此时的节点是完全有效的群集成员。它遵从群集数据库的更新、对仲裁算法施加自己的影响、维护心跳通讯,并可以拥有和运行资源组。 暂停。它只能支持它当前已拥有的那些资源组。之所以提供暂停状态,是为了允许执行某些维护。大多数服务器群集组件会将联机和暂停视为等价的状态。 优势 一、集群系统可解决所有的服务器硬件故障,当某一台服务器出现任何故障,如:硬盘、内存、CPU、主板、I/O板以及电源故障,运行在这台服务器上的应用就会切换到其它的服务器上。 二、集群系统可解决软件系统问题,我们知道,在计算机系统中,用户所使用的是应用程序和数据,而应用系统运行在操作系统之上,操作系统又运行在服务器上。这样,只要应用系统、操作系统、服务器三者中的任何一个出现故障,系统实际上就停止了向客户端提供服务,比如我们常见的软件死机,就是这种情况之一,尽管服务器硬件完好,但服务器仍旧不能向客户端提供服务。而集群的最大优势在于对故障服务器的监控是基于应用的,也就是说,只要服务器的应用停止运行,其它的相关服务器就会接管这个应用,而不必理会应用停止运行的原因是什么。 三、集群系统可以解决人为失误造成的应用系统停止工作的情况,例如,当管理员对某台服务器操作不当导致该服务器停机,因此运行在这台服务器上的应用系统也就停止了运行。由于集群是对应用进行监控,因此其它的相关服务器就会接管这个应用。 缺点 我们知道集群中的应用只在一台服务器上运行,如果这个应用出现故障,其它的某台服务器会重新启动这个应用,接管位于共享磁盘柜上的数据区,进而使应用重新正常运转。我们知道整个应用的接管过程大体需要三个步骤:侦测并确认故障、后备服务器重新启动该应用、接管共享的数据区。因此在切换的过程中需要花费一定的时间,原则上根据应用的大小不同切换的时间也会不同,越大的应用切换的时间越长。 加入群集 寻找 如果一个服务器要加入现有群集 , 则它必须运行群集服务并且必须成功找到群集中的其它节点。在找到其它节点后,加入的服务器必须接受群集成员资格验证,并获得群集配置数据库的副本。 条件 加入现有群集的过程开始于 Windows Server 2003 或 Windows 2000 Service Control Manager 在节点上启动群集服务之时。在启动过程中,群集服务会配置并装入该节点的本地数据设备。它并不会试图将共用的群集数据设备作为节点联机,因为现有群集可能正在使用这些设备。 过程 为了查找其它节点 , 会启动一个发现过程。当节点发现任何群集成员时,它将执行身份验证序列。第一个群集成员会对新加入者进行身份验证,并且在新服务器得到成功验证后返回成功状态。如果验证不成功(未能识别待加入节点的群集成员身份,或者它使用了无效的帐户密码),则加入群集的请求会被拒绝。 验证 进行成功验证后,首先联机的群集节点会检查加入节点上的配置数据库副本。如果该副本已过时,对加入服务器进行验证的群集节点会为加入的服务器发送该数据库的更新副本。刚加入群集的节点在收到复制的数据库后,可以用它查找共享资源并根据需要将它们联机。 脱离群集 当节点关闭或群集服务被停止时,节点可能脱离群集。但当节点不执行群集操作(比如不向群集配置数据库提交更新)时,节点也可能被迫脱离(被逐出)群集。 如果节点根据预先的计划脱离群集,它会向其它所有节点成员发送 ClusterExit 消息,通知它们它将脱离群集。该节点不等待任何响应就会立即进行关闭资源和所有群集连接的操作。由于其余节点收到了退出消息,因此它们不会执行在节点意外失效或网络通讯停止时发生的重新分组过程以重新确立群集成员身份。 方法 有两种常用的服务器集群方法,一种是将备份服务器连接在主服务器上,当主服务器发生故障时,备份服务器才投入运行,把主服务器上所有任务接管过来。另一种方法是将多台服务器连接,这些服务器一起分担同样的应用和数据库计算任务,改善关键大型应用的响应时间。同时,每台服务器还承担一些容错任务,一旦某台服务器出现故障时,系统可以在系统软件的支持下,将这台服务器与系统隔离,并通过各服务器的负载转嫁机制完成新的负载分配。PC服务器中较为常见的是两台服务器的集群,UNIX系统可支持8台服务器的集群系统,康柏的专用系统OpenVMS可支持多达96台服务器的集群系统。 集群的特点 在集群系统中,所有的计算机拥有一个共同的名称,集群内任一系统上运行的服务可被所有的网络客户所使用。集群必须可以协调管理各分离组件的错误和失败,并可透明的向集群中加入组件。用户的公共数据被放置到了共享的磁盘柜中,应用程序被安装到了所有的服务器上,也就是说,在集群上运行的应用需要在所有的服务器上安装一遍。当集群系统在正常运转时,应用只在一台服务器上运行,并且只有这台服务器才能操纵该应用在共享磁盘柜上的数据区,其它的服务器监控这台服务器,只要这台服务器上的应用停止运行(无论是硬件损坏、操作系统死机、应用软件故障,还是人为误操作造成的应用停止运行),其它的服务器就会接管这台服务器所运行的应用,并将共享磁盘柜上的相应数据区接管过来。其接管过程如下图所示(以应用A为例): 1.应用A正常工作时; 2.应用A停止工作后,其它的备用服务器将该应用接管过来。 具体接管过程分三部执行: a.系统接管 b.加载应用 c.客户端连接 集群技术的分类 高可用集群 高可用集群的英文全称是High Availability,简称HA cluster。高可用的含义是最大限度地可以使用。从集群的名字上可以看出,此类集群实现的功能是保障用户的应用程序持久、不间断地提供服务。 负载均衡集群 负载均衡集群也是由两台或者两台以上的服务器组成。分为前端负载调度和后端服务两个部分。负载调度部分负载把客户端的请求按照不同的策略分配给后端服务节点,而后端节点是真正提供营养程序服务的部分。与HA Cluster不同的是,负载均衡集群中,所有的后端节点都处于活动动态,它们都对外提供服务,分摊系统的工作负载。 科学计算集群 高性能计算集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大计算能力,包括数值计算和数据处理,并且倾向于追求综合性能。HPC与超级计算类似,但是又有不同,计算速度是超级计算追求的第一目标。最快的速度、最大的存储、最庞大的体积、最昂贵的价格代表了超级计算的特点。随着人们对计算速度需求的提高,超级计算也应用到各个领域,对超级计算追求单一计算速度指标转变为追求高性能的综合指标,即高性能计算。[3] 参考资料 1.  服务器集群技术  .讯天科技 [引用日期2012-12-1] . 2.  配置Windows2003集群详解  .计算机论坛 [引用日期2013-04-24] . 3.  服务器集群技术的分类  .景安网络 [引用日期2013-11-22] .   from:http://baike.baidu.com/link?url=JXvUhtOMly3piWh15v2QrcUdihPsSdeMOAhlwMdMYBx6tv1oi8mPz9iEdjlf5wH9

集群技术

集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。 集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。 目的 1 提高性能 一些计算密集型应用,如:天气预报、核试验模拟等,需要计算机要有很强的运算处理能力,现有的技术,即使普通的大型机其计算也很难胜任。这时,一般都使用计算机集群技术,集中几十台甚至上百台计算机的运算能力来满足要求。提高处理性能一直是集群技术研究的一个重要目标之一。 2 降低成本 通常一套较好的集群配置,其软硬件开销要超过100000美元。但与价值上百万美元的专用超级计算机相比已属相当便宜。在达到同样性能的条件下,采用计算机集群比采用同等运算能力的大型计算机具有更高的性价比。 3 提高可扩展性 用户若想扩展系统能力,不得不购买更高性能的服务器,才能获得额外所需的CPU 和存储器。如果采用集群技术,则只需要将新的服务器加入集群中即可,对于客户来看,服务无论从连续性还是性能上都几乎没有变化,好像系统在不知不觉中完成了升级。 4 增强可靠性 集群技术使系统在故障发生时仍可以继续工作,将系统停运时间减到最小。集群系统在提高系统的可靠性的同时,也大大减小了故障损失。 分类 1 科学集群 科学集群是并行计算的基础。通常,科学集群涉及为集群开发的并行应用程序,以解决复杂的科学问题。科学集群对外就好像一个超级计算机,这种超级计算机内部由十至上万个独立处理器组成,并且在公共消息传递层上进行通信以运行并行应用程序。 2 负载均衡集群 负载均衡集群为企业需求提供了更实用的系统。负载均衡集群使负载可以在计算机集群中尽可能平均地分摊处理。负载通常包括应用程序处理负载和网络流量负载。这样的系统非常适合向使用同一组应用程序的大量用户提供服务。每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。对于网络流量负载,当网络服务程序接受了高入网流量,以致无法迅速处理,这时,网络流量就会发送给在其它节点上运行的网络服务程序。同时,还可以根据每个节点上不同的可用资源或网络的特殊环境来进行优化。与科学计算集群一样,负载均衡集群也在多节点之间分发计算处理负载。它们之间的最大区别在于缺少跨节点运行的单并行程序。大多数情况下,负载均衡集群中的每个节点都是运行单独软件的独立系统。 但是,不管是在节点之间进行直接通信,还是通过中央负载均衡服务器来控制每个节点的负载,在节点之间都有一种公共关系。通常,使用特定的算法来分发该负载。 3 高可用性集群 当集群中的一个系统发生故障时,集群软件迅速做出反应,将该系统的任务分配到集群中其它正在工作的系统上执行。考虑到计算机硬件和软件的易错性,高可用性集群的主要目的是为了使集群的整体服务尽可能可用。如果高可用性集群中的主节点发生了故障,那么这段时间内将由次节点代替它。次节点通常是主节点的镜像。当它代替主节点时,它可以完全接管其身份,因此使系统环境对于用户是一致的。 高可用性集群使服务器系统的运行速度和响应速度尽可能快。它们经常利用在多台机器上运行的冗余节点和服务,用来相互跟踪。如果某个节点失败,它的替补者将在几秒钟或更短时间内接管它的职责。因此,对于用户而言,集群永远不会停机。 在实际的使用中,集群的这三种类型相互交融,如高可用性集群也可以在其节点之间均衡用户负载。同样,也可以从要编写应用程序的集群中找到一个并行集群,它可以在节点之间执行负载均衡。从这个意义上讲,这种集群类别的划分是一个相对的概念,不是绝对的。 系统结构 根据典型的集群体系结构,集群中涉及到的关键技术可以归属于四个层次: (1)网络层:网络互联结构、通信协议、信号技术等。 (2)节点机及操作系统层高性能客户机、分层或基于微内核的操作系统等。 (3)集群系统管理层:资源管理、资源调度、负载平衡、并行IPO、安全等。 (4)应用层:并行程序开发环境、串行应用、并行应用等。 集群技术是以上四个层次的有机结合,所有的相关技术虽然解决的问题不同,但都有其不可或缺的重要性。 集群系统管理层是集群系统所特有的功能与技术的体现。在未来按需(On Demand)计算的时代,每个集群都应成为业务网格中的一个节点,所以自治性(自我保护、自我配置、自我优化、自我治疗)也将成为集群的一个重要特征。自治性的实现,各种应用的开发与运行,大部分直接依赖于集群的系统管理层。此外,系统管理层的完善程度,决定着集群系统的易用性、稳定性、可扩展性等诸多关键参数。正是集群管理系统将多台机器组织起来,使之可以被称为“集群”。 调度方法 1 进程迁移 进程迁移就是将一个进程从当前位置移动到指定的处理器上。它的基本思想是在进程执行过程中移动它,使得它在另一个计算机上继续存取它的所有资源并继续运行,而且不必知道运行进程或任何与其它相互作用的进程的知识就可以启动进程迁移操作,这意味着迁移是透明的。进程迁移是支持负载平衡和高容错性的一种非常有效的手段。对一系列的负载平衡策略的研究表明:进程迁移是实现负载平衡的基础,进程迁移在很多方面具有适用性。 (1)动态负载平衡。将进程迁移到负载轻或空闲的节点上,充分利用可用资源,通过减少节点间负载的差异来全面提高性能。 (2)容错性和高可用性。某节点出现故障时,通过将进程迁移到其它节点继续恢复运行,这将极大的提高系统的可靠性和可用性。在某些关键性应用中,这一点尤为重要。 (3)并行文件IO。将进程迁移到文件服务器上进行IO,而不是通过传统的从文件服务器通过网络将数据传输给进程。对于那些需向文件服务器请求大量数据的进程,则将有效地减少通讯量,极大地提高效率。 (4)充分利用特殊资源。进程可以通过迁移来利用某节点上独特的硬件或软件能力。 (5)内存导引机制。当一个节点耗尽它的主存时,内存导引机制将允许进程迁移到其它拥有空闲内存的节点,而不是让该节点频繁地进行分页或和外存进行交换。这种方式适合于负载较为均衡,但内存使用存在差异或内存物理配置存在差异的系统。 2 进程迁移的实现角度 进程迁移的实现复杂性及对OS 的依赖性阻碍了进程迁移的广泛使用,尤其是对透明的进程迁移的实现。根据应用的级别,进程迁移可以作为OS 的一部分、用户空间、系统环境的一部分或者成为应用程序的一部分。 (1)用户级迁移:用户级实现较为简单,软件开发和维护也较为容易,因此,现有的很多系统都是采用用户级实现,如Condor和Utopia。但由于在用户级无法获得Kernel的所有状态,因此,对于某类进程,无法进行迁移。另外,由于Kernel空间和User空间之间存在着壁垒,打破这个边界获得Kernel提供的服务需要巨大的开销。因此,用户级实现的效率远远低于内核级实现。 (2)应用级迁移:应用级迁移的实现较为简单,可移植性好,但是需要了解应用程序语义并可能需对应用程序进行修改或重新编译,透明性较差,这方面的系统有Freedman、Skordos等。 (3)内核级迁移:基于内核的实现可以充分利用OS提供的功能,全面的获取进程和OS状态,因此实现效率较高,能够为用户提供很好的透明性。但是由于需要对OS进行修改,实现较为复杂。这方面的典型系统有MOSIX和Sprite系统。 进程迁移的主要工作就在于提取进程状态,然后在目的节点根据进程状态再生该进程。在现实中,一个进程拥有很多状态,并且随着操作系统的演化,进程状态也越来越多样。一般来说,一个进程的状态可以分为以下几类:①进程执行状态。表示当前运行进程的处理器状态,和机器高度相关。包括内核在上下文切换时保存和恢复的信息,如通用和浮点寄存器值、栈指针、条件码等。②进程控制。操作系统系统用来控制进程的所有信,一般包括进程优先级、进程标识,父进程标识等。一旦系统编排了进程控制信息,进程迁移系统必须冻结该进程的运行。③进程Memory状态和进程地址空间。包括进程的所有虚存信息,进程数据和进程的堆栈信息等,是进程状态的最主要的一部分。④进程的消息状态。包括进程缓冲的消息和连接(Link)的控制信息。进程迁移中通讯连接的保持以及迁移后连接的恢复是进程迁移中一项较有挑战意义的问题。⑤文件状态。进程的文件状态包括文件描述符和文件缓冲符。保持文件的Cache一致性和进程间文件同步访问也是进程迁移机制需要着重考虑的。 区别 模拟集群与数字集群不同的地方,说简单点就是:模拟集群在单信道比数字对讲机用户容量要小,语音没有数字对讲机清楚,只能实现简单的数据功能。 数字集群分TDMA和FDMA两种,TDMA是提供给专业用户使用的,是时分的制式。FDMA是提供给民用的,是频分的制式。 FDMA和模拟对讲机相比,除了可以把信道间隔做得更窄(模拟的是25KHz,数字的是12.5KHz两时隙或6.25KHz四时隙),单信道用户量更大外,对用户来说并没有太大的更新体验。 TDMA制式的对讲机和模拟对讲机相比,除了单信道用户容量更大外,还可以现实同频中转。模拟系统中,要实现中转,必须要有收、发频率一对。而在TDMA时分数字系统中,可利用数字技术,通过时隙的转换来实现中转。例如:当中转台收到A时隙的数据时,同时转发出去的数据就是在B时隙上实现的。 现在在中国还没有自己的数字对讲机标准。现在MOTOROLA的数字对讲机是TDMA制式的,ICOM和建伍的数字对讲机是FDMA制式的。[1] 发展趋势 虽然集群系统的构建目前可以说是模块化的,从硬件角度来看可以分为节点机系统、通讯系统、存储系统等,软件角度则主要有操作系统、集群操作系统(COS)、并行环境、编译环境和用户应用软件等,目前高性能计算机的通讯、存储等硬件系统是伴随摩尔定律快速发展的,跟踪、测试、比较最新硬件设备构成的高性能计算机的可能方案也成了高性能计算机厂商的重要科研活动,而所有这些关键部件研发、系统方案科研以及厂商的自主部件研发的高度概括就是“整合计算”。整合硬件计算资源的同时,伴随着整合软件资源,其中集群操作系统COS是软件系统中连接节点机操作系统和用户并行应用的重要“黏合剂”,也是高性能计算机厂商的技术杀手锏。 高性能集群系统目前在国内的应用领域主要集中在气象云图分析和石油勘探的领域。这样的应用对于高性能集群系统来说进入门槛比较低,所以目前这些领域都采用了国内厂商构建的集群系统。虽然对比要处理大量并发的小问题的用于商业计算的高可用性集群来说,高性能集群实现起来要简单一些。但实际上,高性能集群的构建中仍有许多技术上的难点,尤其是高性能集群系统往往是针对一个很独特的科学计算的应用,而对这种应用的实现用高性能集群系统来计算,就必须要先建立数学模型,而这样的建模过程需要大量的对于这种应用模式的理解。总结起来,可管理性、集群的监控、并行程序的实现、并行化的效率以及网络实现是构建高性能集群的几个难点。这其中,并行化程序的实现就是指特定应用领域的特定应用程序在集群系统上的实现。虽然有诸多的技术实现上的难点,但集群系统本身的优势仍然给了厂商们克服难点、攻克高性能集群的力量。首先撇开一些具体的优势不说,从互联网中心服务器的变化来看,可以清晰地观察到集群结构是中心服务器的发展趋势。20世纪90年代以前,中心服务器一般都用大型机(Mainframe),大型机上可以完成一切的应用和服务,用户从终端通过网络完成应用。这种应用模式带来许多的好处:应用集中、比较好部署、系统监控、管理方便等。但大型机的缺点也是非常明显的,主要是设备昂贵,很难实现高可用解决方案;非高可用系统在出现故障时,全部应用都受到影响;操作系统、设备和部件比较专用,用户本身维护困难;可扩展性不强等。这些缺点中的任何一个都是用户难以接受的。随着PC及其操作系统的普及和Intel CPU的性能和稳定性的不断提高,人们逐渐用PC服务器构成的分布式系统(Distributed System)去代替大型机。分布式系统解决了大型机上面提到的多个缺点,却丢弃了大型机应用的优点,服务器多且杂,不好监控、管理,不好部署。因此综合大型机和分布式系统优势的服务器必将成为趋势,集群系统就是这样应运而生的服务器。 from:http://baike.baidu.com/link?url=qJDmsahlNUjNdI2beflLkyCiepcUuDLRNeJ_Sjvyx1sbi0307IIB9J4AxiVKR0b2tJx6Y77TGD4biidfgF8ez_

负载均衡

定义 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。   分类 软/硬件 软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。 软件解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作系统本身的Bug,往往会引起安全问题。 硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。 负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。 一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。 本地/全局 负载均衡从其应用的地理结构上分为本地负载均衡(Local Load Balance)和全局负载均衡(Global Load Balance,也叫地域负载均衡),本地负载均衡是指对本地的服务器群做负载均衡,全局负载均衡是指对分别放置在不同的地理位置、有不同网络结构的服务器群间作负载均衡。 本地负载均衡能有效地解决数据流量过大、网络负荷过重的问题,并且不需花费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障造成数据流量的损失。其有灵活多样的均衡策略把数据流量合理地分配给服务器群内的服务器共同负担。即使是再给现有服务器扩充升级,也只是简单地增加一个新的服务器到服务群中,而不需改变现有网络结构、停止现有的服务。 全局负载均衡主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度,也可用于子公司分散站点分布广的大公司通过Intranet(企业内部互联网)来达到资源统一合理分配的目的。 全局负载均衡有以下的特点: 实现地理位置无关性,能够远距离为用户提供完全的透明服务。 除了能避免服务器、数据中心等的单点失效,也能避免由于ISP专线故障引起的单点失效。 解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量。 部署方式 负载均衡有三种部署方式:路由模式、桥接模式、服务直接返回模式。 路由模式部署灵活,约60%的用户采用这种方式部署;桥接模式不改变现有的网络架构;服务直接返回(DSR)比较适合吞吐量大特别是内容分发的网络应用。约30%的用户采用这种模式。 路由模式(推荐) 路由模式的部署方式如上图。服务器的网关必须设置成负载均衡机的LAN口地址,且与WAN口分署不同的逻辑网络。因此所有返回的流量也都经过负载均衡。这种方式对网络的改动小,能均衡任何下行流量。 桥接模式 桥接模式配置简单,不改变现有网络。负载均衡的WAN口和LAN口分别连接上行设备和下行服务器。LAN口不需要配置IP(WAN口与LAN口是桥连接),所有的服务器与负载均衡均在同一逻辑网络中。参见下图: 由于这种安装方式容错性差,网络架构缺乏弹性,对广播风暴及其他生成树协议循环相关联的错误敏感,因此一般不推荐这种安装架构。 服务直接返回模式 如上图,这种安装方式负载均衡的LAN口不使用,WAN口与服务器在同一个网络中,互联网的客户端访问负载均衡的虚IP(VIP),虚IP对应负载均衡机的WAN口,负 服务直接返回模式 载均衡根据策略将流量分发到服务器上,服务器直接响应客户端的请求。因此对于客户端而言,响应他的IP不是负载均衡机的虚IP(VIP),而是服务器自身的IP地址。也就是说返回的流量是不经过负载均衡的。因此这种方式适用大流量高带宽要求的服务。