前言:html
集群特色:
1)高性能
2)经济
3)高可用
4)可伸缩node
集群的分类
1)负载均衡集群,LBC或者LB。
2)高可用性集群,HAC
3)高性能计算集群,HPC
4)LB和HAC是主流python
负载均衡集群的做用:
1)分担用户访问请求或数据流量(负载均衡)
2)保持业务持续性7*24服务(高可用性)
3)负载均衡集群典型的开源软件:lvs,nginx,haproxy,lighttpdlinux
高可用集群做用:
1)当一台机器宕机后另外一台机器接管(ip资源和服务资源)nginx
1、LVS理解算法
1)参考文档vim
http://www.linuxvirtualserver.org/zh/lvs1.html http://www.linuxvirtualserver.org/zh/lvs2.html http://www.linuxvirtualserver.org/zh/lvs3.html http://www.linuxvirtualserver.org/zh/lvs4.html
2)LVS层次
一、实现调度的工具IPVS(在内核中)。
二、管理工具ipvsadm。
三、keepalived实现管理及高可用。服务器
3)LVS术语网络
一、虚拟ip地址 VIP-->VIP 为Director用于向客户端计算机提供服务的ip地址,好比,www.baidu.com域名就要解析到VIP上提供服务。
二、真实ip地址 RIP -->在集群下面节点上使用的ip地址,物理ip地址
三、Director的ip地址 DIP--> Director用于链接内外网络的ip地址,物理网卡上的ip地址。是负载均衡器上的ip。
四、客户端主机ip地址 CIP -->客户端用户计算机请求集群服务器的ip地址,该地址用做发送给集群的请求的源ip地址。负载均衡
4)LVS几种工做模式
NAT ,TUN ,DR,FULLNAT
DR模式:
直接路由模式(熟练),,,这个用的最多,,,,别的用的不多
根据本地的DR原理图解释,,
客户端发送请求,目的地址vip,客户端地址cip,,当请求消息到了LVS负载均衡服务器时,服务器不会改变客户端发送的原地址和目的地址,,,只会将vip对应的MAC改为RMAC,此时是以二层的方式通讯,此时数据传递到真实的服务器上,由于真实的服务器上没有相应的ip,虚拟的ip,因此这个虚拟的ip要绑定到环回端口,由于此时有广播包的传递,因此要抑制ARP的影响。
上面是本身理解,下面是大牛理解。
VS/DR模式是经过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将相应后的处理结果直接返回给客户端用户。同VS/TUN技术同样,VS/DR技术可极大地提升集群系统的伸缩性。并且,这种DR模式没有IP隧道的开销,对集群中的真实服务器也没有必须支持ip隧道协议的要求,可是要求调度器LB与真实服务器RS都有一块网卡连在同一物理网段上,即必须在同一个局域网环境。
5)LVS的有十种调度算法
主要的有三种:
静态:rr,wrr
动态:wlc
6)LVS的调度算法的生产环境选型:
通常的网络服务,如http,MAIL,MySQL等,经常使用的LVS调度算法为:
a.基本轮叫调度rr算法
b.加权最小链接调度wlc
c.加权轮叫调度wrr算法
2、LVS安装
1)查看有没有LVS调度器,ipvs是在内核中工做的,因此要将它加载到内核中。
lsmod | grep ip_vs
2)建立一个软链接,此ln命令的连接路径要和uname -r输出的结果内核版本对应,若是没有路径极可能是缺乏kernels软件包,,能够经过yum install -y kernel-devel安装,ln这个命令也能够不执行,直接指定内核参数编译。
[root@aliyun ~]# ln -s /usr/src/kernels/2.6.32-696.1.1.el6.x86_64/ /usr/src/linux
3)下载LVS
[root@aliyun tools]# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz [root@aliyun tools]# tar -zxf ipvsadm-1.26.tar.gz [root@aliyun tools]# cd ipvsadm-1.26 [root@aliyun ipvsadm-1.26]# make && make install //不要config
此时若是报错了,极可能就是缺乏下面的包,安装就好
[root@aliyun ipvsadm-1.26]# yum install libnl* popt* -y
[root@aliyun ipvsadm-1.26]# lsmod | grep ip_vs
此时仍是没有相应的内核模块,,,,此时有两种方法能够将这两个模块加入内核中
1)[root@aliyun ipvsadm-1.26]# /sbin/ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@aliyun ipvsadm-1.26]# lsmod | grep ip_vs ip_vs 126705 0 libcrc32c 1246 1 ip_vs ipv6 336368 3 ip_vs,ib_ipoib,ib_addr 2)modprobe ip_vs
4)手工添加LVS转发
4.1)用户访问www.etiantian.org而后被DNS解析到VIP 10.0.0.1,这个步骤是在DNS里配置的。
若是是自建的DNS,etiantian域的DNS记录设置以下。
www IN A 10.0.0.1
4.2)配置LVS虚拟ip(VIP)
[root@aliyun ~]# ifconfig eth0:0 172.19.125.33/24 up 添加个主机路由,也能够不加 route add -host 172.19.125.33 dev eth0
4.3)检查结果
[root@aliyun ~]# ifconfig eth0:0 eth0:0 Link encap:Ethernet HWaddr 00:16:3E:1A:11:E6 inet addr:172.19.125.33 Bcast:172.19.125.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
4.4)LB配置,,初始的配置
清空原来的配置 [root@aliyun ~]# ipvsadm -C 设置超时时间 --set tcp tcpfin udp set connection timeout values [root@aliyun ~]# ipvsadm --set 30 5 60 ####添加一个虚拟的服务器,,,这个就是一个VIP,,,,并指定它的算法和持续服务的超时时间 [root@aliyun ~]# ipvsadm -A -t 172.19.125.33:80 -s rr -p 20 指定这个vip对应的真实ip,,工做模式 DR,,,,权重 [root@aliyun ~]# ipvsadm -a -t 172.19.125.33:80 -r 172.19.125.35 -g -w 1 [root@aliyun ~]# ipvsadm -a -t 172.19.125.33:80 -r 172.19.125.36 -g -w 1 [root@aliyun ~]# ipvsadm -a -t 172.19.125.33:80 -r 172.19.125.37 -g -w 1 此时访问172.19.123.33是不能够访问的,,,只能够访问真实的主机
4.5)手工在RS端绑定
每台real server端 ifconfig lo:0 172.19.125.33 netmask 255.255.255.255 up #注意;子网掩码的特殊 route add -host 172.19.125.33 dev lo 每一个集群节点上的环回接口(lo)设备上被绑定VIP地址(其广播地址是其自己,子网掩码是255.255.255.255)
4.6)RS上抑制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
4.7)ARP广播而进行新的地址解析.......若是此时换机器了,能够就要用此命令,,经过arping命令来通知全部网络内机器,,,适合用在脚本中
清除其本地的ARP table cache,从而使得客户机访问时从新广播获取MAC地址。,,这个在开发脚本实现服务器的高可用时是要必须考虑的问题之一,几乎全部的高可用软件都会考虑这个问题。 /sbin/arping -I eth0 -c 3 -s 10.0.0.1 10.0.0.2 /sbin/arping -U -I eth0 10.0.0.1 #####清空局域网的ARP表,,前面是VIP ,后面是网关,,,,高可用时出效果 arping -c 1 -I eth0 -s $VIP 10.0.0.254 >/dev/null 2>&1
4.8)参考资源,,内含裂脑问题的解决方案
http://oldboy.blog.51cto.com/2561410/1240412
3、Keepalived原理
1)keepalived高可用集群介绍
keepalived起初是专门为LVS设计的,专门用来监控LVS集群系统中各个服务节点的状态,后来又加入VRRP的功能,所以除了配合LVS服务外,也能够做为其余服务的高可用软件,VRRP出现的目的就是为了解决静态路由出现的单点故障问题,它可以保证网络的不间断、稳定的运行。因此keepalived一方面具备LVS cluster nodes healthchecks功能,另外一方面也具备LVS directors failover功能。
2)keepalive服务两大用途:healthcheck & failover
a、ha failover功能:实现LB Master主机和Backup主机之间故障转移和自动切换。
这是针对有两个负载均衡器Director同时工做而采起的故障转移措施。当主负载均衡器失效或出现故障时,备份负载均衡器将自动接管主负载均衡器的全部工做(VIP资源及相应服务),一旦主负载均衡器故障修复,主负载均衡器又会接管回它原来处理的工做,而备份负载均衡器会释放主负载均衡器失效时它接管的工做,此时两者将恢复到最初各自的角色状态。
b、rs healthcheck功能:负载均衡按期检查RS的可用性决定是否给其分发请求。
当虚拟服务器中的某一个甚至是几个真实服务器同时发生故障没法提供服务时,负载均衡器会自动将失效的RS服务器从转发队列中清除出去。从而保证用户的访问不受影响;当故障的RS服务器被修复后,系统又会自动地把它们加入转发队列,分发请求提供正常服务。
3)keepalived故障切换转移原理介绍
keepalived directors之间的故障切换转移,是经过VRRP(虚拟路由器冗余协议)来实现的。在keepalived Directors正常工做时,主Director节点会不断的向备节点广播心跳消息,用以告诉备节点本身还活着,当主节点发生故障时,备节点就没法继续检测到主节点的心跳,进而调用自身的接管程序,接管主节点的ip资源及服务。而当主节点恢复故障时,备节点会释放主节点故障时自身接管的ip资源及服务,恢复到原来的自身的备用角色。
4、Keepalived安装
1)下载和安装keepalived
[root@aliyun tools]# wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz 下面这个在LVS解释过 [root@aliyun ~]# ln -s /usr/src/kernels/2.6.32-696.1.1.el6.x86_64/ /usr/src/linux //若是此处不ln,,,换个办法就是--with-kernel-dir=/usr/src/kernels/2.6.18内核版本 yum install -y kernel-devel [root@aliyun tools]# tar -zxf keepalived-1.1.19.tar.gz [root@aliyun tools]# cd keepalived-1.1.19 [root@aliyun keepalived-1.1.19]# ./configure 要看到3个yes Use IPVS Framework : Yes IPVS sync daemon support : Yes Use VRRP Framework : Yes [root@aliyun keepalived-1.1.19]# make && make install
2)改配置文件目录
[root@aliyun ~]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ #生成启动脚本命令 [root@aliyun ~]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ #配置启动脚本的参数 [root@aliyun ~]# mkdir -p /etc/keepalived #建立默认的keepalived配置文件路径 [root@aliyun ~]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ #把keepalived.conf模板拷贝到目录下 [root@aliyun ~]# cp /usr/local/sbin/keepalived /usr/sbin/ [root@aliyun ~]# /etc/init.d/keepalived start [root@aliyun ~]# /etc/init.d/keepalived stop
3)对于配置文件的帮助
[root@aliyun ~]# man keepalived.conf
4)配置keepalive
需求,两个服务器,一个配置为master,一个为backup,单实例
此时当作两个keepalive都以安装完毕,,,两个机器都作以下配置,一个配置文件是master,一个是backup,,,添加配置文件,,若是有须要能够联系我
[root@aliyun ~]# cd /etc/keepalived/ [root@aliyun ]# mv keepalived.conf keepalived.conf.bak [root@aliyun ]# mv keepalived.conf.1-dan keepalived.conf [root@aliyun keepalived]# /etc/init.d/keepalived restart
5)查看
ifconfig是看不到,,,ip add看
此时若是查看到两个机器上都有虚拟ip,,此时就出现了裂脑的问题了,,,,查看http://oldboy.blog.51cto.com/2561410/1240412
个人问题就是由于备份服务器的防火墙没有关,没法进行心跳检测,,因此正常状况下只有MASTER会显示ip,而备份时不显示的,当MASTER挂了以后,SLAVE起来。
自动切换。
多实例跟单实例差很少,就是配置文件的更改问题
6)优化设置,,日志文件
日志的默认路径: cat /var/log/messages 修改日志的路径: vim /etc/sysconfig/keepalived KEEPALIVED_OPTIONS="-D -d -S 0" //默认0 vim /etc/rsyslog.conf local0.* /var/log/keepalived.log //local0.*,全部的状态都打印 /etc/init.d/rsyslog restart /etc/init.d/keepalived restart
7)keepalived+LVS配置文件
! Configuration File for keepalived #注释 global_defs { #全局定义 notification_email { #通知的邮件,当有问题的时候通知,能够不配,用处不大,,收件人 } notification_email_from Alexandre.Cassen@firewall.loc #发件人 smtp_server 10.0.0.1 smtp_connect_timeout 30 router_id LVS_7 } vrrp_instance VI_1 { #一个实例 state MASTER interface eth0 virtual_router_id 55 priority 150 advert_int 1 #接管的间隔 authentication { #受权 auth_type PASS auth_pass 1111 } virtual_ipaddress { #VIP 10.0.0.10/24 } } ########################LVS+Keepalived,,,因此二者一块儿使用的时候,只要在这个配置文件里配置LVS的功能,不用经过Ipvsadm来配置,,配置好后,能够经过ipvsadm -L -n来查看 virtual_server 10.0.0.10 80 { delay_loop 6 #健康检查时间间隔 lb_algo rr #负载均衡调度算法 lb_kind DR #负载均衡转发规则 persistence_timeout 300 #设置会话保持时间,对bbs等颇有用 protocol TCP #协议 #ipvsadm -A -t 10.0.0.10:80 -s rr -p 300 real_server 10.0.0.1 80 { weight 3 #设置权重 TCP_CHECK { #健康检查 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.2 80 { weight 3 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } #ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.1 -g -w 1 #ipvsadm -a -t 10.0.0.10:80 -r 10.0.0.2 -g -w 2 最后客户端仍是要作,VIP绑定和ARP抑制,,能够参考LVS里面的
5、LVS负载均衡代码平滑上线发布思路
发布代码:
开发人员本地测试--》办公室内部测试--》(配置管理员)--》IDC机房测试环境(测试人员)--》正式服务器
在真实服务器上通常都是下一半服务器,在不提供的服务的服务器上先测试服务,另外一半服务器提供原来的代码服务,,
让真实服务器暂时不提供服务
ipvsadm -d -t 10.0.0.10:80 -r 10.0.0.8