定义:一组协同工作的服务
分类:负载均衡集群,高可用集群,高性能运算集群
负载均衡集群(LBC):
- 介绍:将压力分担到不同的工作节点
- 实现方案:
垂直扩展:把服务器的性能升级,优点是技术实现简单,不需要更改网络拓扑。缺点是是性能提升有限;
水平扩展:增加服务器数量,实现分担访问压力;
- 老旧的方式是利用DNS轮询把访问量分担到不同服务器,但是用户每次利用DNS以后,都会把第一次访问的DNS载入缓存,无法轮询
- 软件级别:利用负载调度器(D)来实现服务器的轮询,LVS,Nginx,Ha-proxy,Amoeba(Amoeba也称数据库,数据库中间键)客户访问到的web称为真实服务器(RS)
- 硬件级别:F5是硬件级别的负载调度器是目前人类能够用到的最大的调度设施,更稳定,性能更高,但是特别贵,大型公司会用。
- 负载调度器性能排行:
F5(几千台左右)--lvs(1000台左右)--ha-proxy(20+台)--nginx(7-8台)
- 负载均衡的瓶颈:
所有的访问都要经过负载调度器,真实服务器可以无限扩展,那么负载调度器是负载均衡集群的瓶颈所在
- 负载均衡的瓶颈的解决方案:
1.换调度器:提高负载调度器性能
2.业务分割:创建多个集群,“教育”和“地产”模块分割在不同的集群里
- 集群触发条件:
并不是所有的连接都会被负载到后台,触发条件会根据OSI七层模型去分类。有三层可以负载均衡
二层(数据链路层):根据原地址判断;
只有F5可以做
四层(传输层):根据IP和端口判断,不看主机名和域名;当访问192.168.66.100:80会负载均衡;
一个负载调度器是位于四层工作的,那么它可以负载均衡mysql,vsftpd,apache,nginx等(基于tcp、udp)
有ha-proxy、Nginx、LVS可以做
整个过程发起了一个完整的TCP连接,由客户端与真实服务器建立完成;
四层负载调度器转发了数据包的请求,修改了数据包的目标地址
七层(应用层):根据主机名域名判断
有ha-proxy、nginx可以做
整个过程发起了两个完整的的TCP连接:1.客户端与负载调度器建立完成 2.负载调度器与真实服务器建立完成
性能:四层 > 七层 精确度:七层 > 四层 覆盖面积:四层TCP,UDP;七层:nginx(http、ssl)
安全性:四层:SYN攻击能穿透到真实服务器 七层:SYN攻击不能穿透到真实服务器
- LVS:Linux中自带的负载调度器
有两个模块:
ipvs:内核态或核心代码,在内核中;负载均衡如何实现,无法被操作
ipvsadm:用户态或命令行管理工具;用来操作设置ipvs,实现集群的负载均衡
钩子函数:内核的一种机制,强行获取数据报文的使用权。
ipvs工作流程:客户端访问,ipvs用钩子函数强行获取数据报文的使用权,查看数据包是否是需要负载均衡的,再根据自己负载的策略改写成后端的真实服务器
LVS三种工作模式:
1.NAT模式:进去的时候,把目标地址改写成真实服务器IP,出去的时候把原地址改写成当前的公网IP
负载调度器必须位于真实服务器与客户端之间,并且充当真实服务器的网关(如果只是路由器,路由器不会修改地址)
负载调度器与真实服务器必须处于同一广播域以及同一网段
支持端口映射(用户访问的端口和真实服务器端口可以不一致)
真实服务器操作系统是任意的(可以是Linux,windows等),但是负载调度器必须是Linux操作系统
入站出站数据报文都经过负载调度器
客户端发送数据报文,S是自己IP,D是负载调度器VIP;数据包进入调度器内部,内部有一个策略,
C访问负载调度器,源地址是10.10.10.12目标地址是10.10.10.11:80
D开启路由转发,进去经过负载调度策略把目标地址换为RS的地址,源地址是10.10.10.12,目标地址是192.168.66.12:80,给R
R将网关指向D,返回数据包,源地址是192.168.66.12:80,目标地址是10.10.10.12,返回给路由器,路由器转发给C
这时C接收到的数据包是原地址是10.10.10.12,目标地址是192.168.66.12:80,跟他传的时候的S和D是不一致的,C不会接收,所以C接收到的数据包的原地址必须是10.10.10.11,目标地址是10.10.10.12才会接收,所以从C出去的数据包要经过负载调度器修改源地址
总结:进去的时候修改目标地址为内网地址,出去的时候修改源地址为公网地址
2.DR模式:负载调度器和真实服务器必须处于同一广播域中
不支持端口映射
真实服务器和负载调度器必须都是Linux操作系统
入站数据报文有 负载调度器转发,由真实服务器转发
这是在内网互相之间访问的,只要做DNAT就可以公网访问了,防火墙可以做
C发出的数据包的原地址是192.168.66.222,目标地址是192.168.66.100
D有两个地址,D收到数据包以后通过MAC地址不对数据包做修改,通过添加路由条目直接发给真实服务器,
RS也开启一个192.168.66.100的网卡接收发过来的数据包,然后直接将数据包返回给C
3.TUN模式:D与RS采用数据包二次封装实现
D,RS必须拥有公网IP或者是能够被公网访问
入站数据报文由D接受,转发至RS,出站由RS传输至客户端
- LVS的三种模式如何选择:
DR 访问量非常大,而且后端节点较为稳定(架构)端口一致,是所有模式中压力最小的
TUN 访问量较大,而且机器在多个不同的公网中存在,想组成集群,压力排第二
NAT 访问量较大,并且后端比较灵活(支持各种操作系统,端口可以不一致)
- LVS的调度算法:当用户到达D,D如何分配真实服务器
1.静态调度算法:不考虑服务器当前连接状态
RR:直接分配 (一人一次)
WRR:直接分配,考虑权重
SH:解决session无共享问题,如果客户访问第一台集群服务器的话会输入账户和密码,如果第二次访问可能会被调到第二台服务器,那么在第二台服务器上没有session,那么就得重新输入用户名和密码,所以要把各个服务器的session放入后台的共享服务器,经过负载均衡集群定向到同一个真实服务器,那么每次访问集群里的服务器的时候,服务器直接调用后端的共享服务器调用session即可
DH:解决缓存命中率问题,同一个请求目标经过负载调度器定向到同一个真实服务器
2.动态调度算法:计算服务器当前的压力值,根据压力值判断负载机器
相关数据:active(活动连接):正在传输数据,活动连接消耗的资源是非活动连接的256
in-active(非活动连接):刚建立TCP握手或者数据已经传输完毕正在握手断开
LC:将新的连接请求,分配给连接数最少的服务器,活动连接*256+非活动连接
WLC:(活动连接*256+非活动连)/权重
SED:特殊的WLC算法,把请求分给权重最大的服务器(活动连接+1)*256 /权重
NQ:特殊的SED算法,当服务器连接数都等于0,随机分配不需要运算
LBLC:特殊的DH算法,既能提高缓存命中率,又要考虑服务器性能
- LVS的持久化连接:优先级高于调度算法
持久化连接只在LVS中出现,只在https起作用;持久化连接就是特殊的SH算法。
PCC持久客户端连接:
将来自于同一客户端的所有请求定向至此前选定的RS;也就是只要IP相同,分配的服务器始终相同
ipvsadm -A -t 172.16.0.8:0 -s rr -p 120 (0代表所有端口,只根据客户端的原地址绑定真实服务器)
ipvsadm(命令行管理工具) A(指定添加一个新的集群) -t(tcp集群)-s(指定算法)-p(指定持久化连接时间,不加则不使用)
PPC持久端口连接(常见):
将来自于同一客户端对同一端口的请求,始终定向至此前选定的RS
ipvsadm -A -t 172.16.0.8:80 -s rr -p 120
PFMC持久防火墙标记连接:
将来自于同一客户端对指定端口的请求,始终定向至选定的RS,不过他可以将两个毫不相干的端口定义为一个集群服务;精确性非常高,需要和防火墙配合起来
高可用集群(HAC):
- 介绍:
尽力提高服务的可用性;一主一备,主死备上;高可用分类:百分之99,999,9999,99999;宕机时间:365*99%
要实现高可用必须要保持两台服务器的功能性一致,内容一致。
- 心跳检测:
备用服务器判断主服务器是否存活,如果不存活,那么备用服务器顶替主服务器;缺点是备用服务器长时间闲置
- 脑分裂:
描述:当心跳断了,备用服务器以为主服务器已经gg了,会把主服务器的vip争夺过来,这时候出现了两个相同的vip
解决方案:备两条心跳线,使用串口线(网线没有串口线可用性高)
电源交换机:通过命令关闭对应的端口的电源
- 实现方案:
软件:heartbeat,keepalived 硬件:ROSE 安瑞科技
- Keepalived
使用成熟的VRRP协议,支持故障自动切换、会检测后端的服务器的健康状态
- VRRP(虚拟路由冗余协议)的概念:
虚拟设备:负载调度器
主设备:维持当前的集群运行,监听客户发送的数据包,给备设备发送VRRP协议
备设备:在主设备发生故障的时候通过选举的方式成为新的主设备,它会接收来自主设备的VRRP报文加以分析
VRID:用来表示一个组,同一个组才能竞争
虚拟IP(vip集群ip):配置在虚拟设备上的一个虚拟IP,一个虚拟设备可以有一个或多个虚拟IP地址
IP地址拥有者:分配给虚拟设备的虚拟IP的真实拥有者,IP拥有者会直接跳过选举称为主设备,并且是不可抢占的
虚拟MAC地址:用于接收vip
- VRRP协议的特征:
优先级:用于主设备的选举,取值范围是1-254,0代表原来的主设备,255代表备设备优先级最高(老大),优先级越低优先级越高
抢占模式:如果主设备又活了,会把vip要回来(默认)争夺是时候会有延时,因为mac和IP要去对应
- VRRP的三种状态
初始状态:VRRP不可用,因为在这个状态下设备不会处理VRRP报文
活动状态:定期发送VRRP状态、如果收到比自己优先级大的报文则转为backup状态
备份状态:接收主设备发送的VRRP报文,判断主设备的状态是否正常
- VRRP的工作方式
主备备份模式:备设备不会被访问到
负载分担模式:轮流被访问到,轮流使用vip
- heartbeat
有两个版本:V2 集成了资源管理器(可以把对方主机被关闭以后把资源竞争过来,可以是apache,共享存储)
V3 新版,只包含心跳检测
高性能运算集群(HPC):
- 介绍:
提供单台服务器提供不了的计算能力;曙光,银河;把大任务拆分成小任务,到不同节点运算然后汇总。国家级别使用的集群
- 分类:
分布式计算和分布式存储
负载均衡和高性能运算集群的区别:负载均衡不会对任务进行拆分,把任务分配到一个节点;高性能运算集群会对任务拆分
- LVS-NAT模式集群:
环境准备:
- 设置四台服务器,
- 第一台充当客户端:20.20.20.12
- 第二台充当负载调度器以及网关服务器:20.20.20.11;192.168.66.11
- 第三台和第四台充当真实服务器:192.168.66.12;192.168.66.13
- 将负载调度器的公网网卡和客户端都放在vmnet2中
真实服务器:
- 添加网关(默认路由)指向负载调度器内网网卡:echo "GATEWAY=192.168.66.11" >> /etc/sysconf......;service network restart;route -n
- 安装apache:yum install -y httpd;service httpd start;chkconfig httpd on;给两台服务器网页文件写不同内容
负载调度器(网关服务器):
- 启用ipvs核心模块:modprobe ip_vs;查看ipvs是否被加载:cat /proc/net/ip_vs
- 安装ipvsadm,对ipvs进行设置管理:yum install -y ipvsadm
- 开启ip_porward(路由转发,帮别人转发数据包):vim /etc/sysctl.conf net.ipv4.ip_forward=1;刷新内核参数:sysctl -p
- 添加集群:ipvsadm -A -t 20.20.20.11:80(负载调度器IP) -s rr 一个负载调度器里可以写多个集群
- 添加集群下的真实服务器:ipvsadm -a -t 20.20.20.11:80(负载调度器IP) -r 192.168.66.12:80 -m(NAT模式)
- ipvsadm -a -t 20.20.20.11:80(负载调度器IP) -r 192.168.66.13:80 -m(NAT模式)
- 查看集群当前状态:ipvsadm -Ln
- 把当前的负载调度策略保存:service ipvsadm save;chkconfig ipvsadm on
- 开启防火墙:service iptables start; 清除防火墙规则:iptables -F
- 设置防火墙规则(数据包出去后要通过负载调度器把原地址修改):iptables -t nat -A POSTROUTING -s 192.168.66.0/24(内网网段) -o eth1(外网网卡名称) -j SNAT --to-source 20.20.20.11(当前公网IP地址) ;
- 查看规则是否生效:iptables -t nat -L; 保存防火墙规则:service iptables save
只要数据包是66.0的,那么就改写成20.11
客户端服务器:
- 访问20.20.20.11,刷新,查看12和13服务器内容是否为一比一切换
- 负载调度器查看连接详细状态:连接数量--conns 入站数据包数量--InPkts 入站字节--InBytes
端口映射:
- 修改真实服务器apache端口:vim /etc/httpd/conf/httpd.conf Listen 1234
- 删除负载调度器下的集群:ipvsadm -D -t 集群IP+端口
- 删除集群下的真实服务器:ipvsadm -d -t 20.20.20.11:80(集群IP+端口) -r 192.168.66.12:80(真实服务器IP+端口)
- 添加集群下的真实服务器:ipvsadm -a -t 20.20.20.11:80 -r 192.168.66.12:1234 -m
- 查看集群当前状态:ipvsadm -Ln
- 把当前的负载调度策略保存:service ipvsadm save;chkconfig ipvsadm on
客户端服务器:
- 访问20.20.20.11,刷新,查看是否可以访问12的apache
LVS-DR模式集群:
真实服务器:
- 关闭网卡守护进程:service NetworkManger stop(只有图形化才有)
- 拷贝添加一张虚拟网卡(用于被访问集群):cp ifcfg-lo ifcfg-lo:0
- 修改通告及响应级别:
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
- 启动回环地址子接口:ifup lo:0
- 添加路由记录:route add -host 192.168.66.100(虚拟IP) dev lo:0(如果遇到192.168.66.100的IP交给lo:0去处理)重启会失效,将其写入开机自启文件内:echo "/sbin/route add -host 192.168.66.100 dev lo:0" >> /etc/rc.local;chmod a+x /etc/rc.local
- 检查:route -n
负载调度器:
- 关闭网卡守护进程:service NetworkManger stop
- 拷贝子接口:cp ifcfg-eth0 ifcfg-eth0:0 (用0:0是因为有的机器是单网卡,给他虚拟一个网卡就可以,双网卡可以用eth1)
- 启动回环地址子接口:ifup eth0
- 关闭网卡命名属性(优化,可以不关,建议关掉):
vim /etc/sysctl.conf
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
sysctl -p
- 安装ipvsadm,对ipvs进行设置管理:yum install -y ipvsadm
- 设置集群:ipvsadm -A -t 192.168.66.100:80 -s rr
- 设置真实服务器:ipvsadm -a -t 192.168.66.100:80 -r 192.168.66.12:80 -g(DR模式)
- ipvsadm -a -t 192.168.66.100:80 -r 192.168.66.1:80 -g
- 把当前的负载调度策略保存:service ipvsadm save;chkconfig ipvsadm on
四七层负载
四层特征:性能高 七层特征:识别域名
实现实验效果:用户用hongfu访问,四层负责负载均衡两个七层,七层负责访问www.hongfu.com
用户用hongfuxuexiao访问,四层负责负载均衡两个七层,七层负责负载均衡两个www.hongfu.com
拓扑图介绍:vip为集群ip,用于客户端访问;七层是四层的真实服务器
构建顺序:由下至上 关闭服务顺序:由上至下
vip为集群ip,用于客户端访问
1.设置14.15.16为web服务器
2.将12.13设置为七层负载调度器(使用nginx作为调度器软件,根据域名负载均衡):
在windows的dns中添加:
测试结果:
这个是13主机的nginx,因为和12看不出区别,就用13的IP测试,不输入域名默认访问第一个index文件
3.配置四层负载调度器:
设置windows的dns
测试结果:
入口是66.100
高可用集群:解决单点故障
四七层服务器中,如果七层gg了一个还有另一个七层,四层gg了那么集群就不能使用了,所以要有一个备用的四层调度器
环境准备:11主机做DR模式的四层负载调度器;12和13主机做调度器下的集群;14主机做备设备(也需要做四层负载调度器)
14做四层负载调度器以及安装keepalived:
①service NetworkManager stop;chkconfig NetworkManager off
②vim /etc/sysctl.conf ,添加....;sysctl -p
③cd /etc/sysconfig/network-scripts;cp -a ifcfig-eth0 ifcfig-eth0:0;vim ifcfig-eth0:0
④网卡启动:vim ifup-eth,注释掉这些,再启动
11和14都要安装keepalived:
[root@localhost ~]# mkdir /mnt/iso
[root@localhost ~]# mount -o loop Keepalived.iso /mnt/iso/
[root@localhost ~]# cp -a /mnt/iso/* .
[root@localhost ~]# tar -zxvf keepalived-1.2.2.tar.gz
[root@localhost ~]# cd keepalived-1.2.2
[root@localhost keepalived-1.2.2]# yum install -y kernel-devel openssl-devel popt-devel gcc*
[root@localhost keepalived-1.2.2]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-642.el6.x86_64/
[root@localhost keepalived-1.2.2]# make && make install
[root@localhost keepalived]# vim /etc/keepalived/keepalived.conf11和14的keepalived配置文件
开启keepalived:service keepalived start
测试14备设备:
当前备设备已经取代主设备
现在让主设备再次充当主设备:
s
持久连接
- 环境准备
11主机设置LVS的DR模式,12是真实服务器,13是真实服务器
- 真实服务器
①service NetworkManager stop;chkconfig NetworkManager off
②vim /etc/sysctl.conf ,添加....;sysctl -p
③cd /etc/sysconfig/network-scripts;cp -a ifcfig-eth0 ifcfig-eth0:0;vim ifcfig-eth0:0;ifup eth0:0
④/sbin/route add -host 192.168.66.100 dev lo:0;echo "/sbin/route add -host 192.168.66.100 dev lo:0" >> /etc/rc.local;;chmod a+x /etc/rc.local
⑤service httpd start;echo "这是12" >> /var/www/html/index.html ;echo "这是13" >> /var/www/html/index.html
- 负载调度器:
①service NetworkManager stop;chkconfig NetworkManager off
②vim /etc/sysctl.conf ,添加....;sysctl -p
③cd /etc/sysconfig/network-scripts;cp -a ifcfig-eth0 ifcfig-eth0:0;vim ifcfig-eth0:0;ifup eth0:0
④yum install -y ipvsadm;
⑤ipvsadm -A -t 192.168.66.100:80 -s rr
ipvsadm -a -t 192.168.66.100:80 -r 192.168.66.12:80 -g
ipvsadm -a -t 192.168.66.100:80 -r 192.168.66.13:80 -g ; ipvsadm -Ln;service ipvsadm save(保存,重启不会失效)
- 测试结果:
- 创建持久化连接:创建集群的时候添加-
①删除当前集群:ipvasam -D -t 192.168.66.100:80;ipvsadm -Ln
②创建持久化集群:ipvsadm -A -t 192.168.66.100:80 -s rr -p 120(120s内只能访问12web)
ipvsadm -a -t 192.168.66.100:80 -r 192.168.66.12:80 -g
ipvsadm -a -t 192.168.66.100:80 -r 192.168.66.13:80 -g ;ipvsadm -Ln;
service ipvsadm save;ipvsadm -L --persistent-conn(查看持久化信息) ;ipvsadm -L -c(查看记录的访问信息)
- 测试结果:
keepalived高可用apache:
- 环境准备:
11和12两台主机都做apache和keepalived
- 实验搭建:
①service httpd start;echo "123" >> /var/www/html/index.html;echo "qwe" >> /var/www/html/index.html
②11和12安装keepalived
[root@localhost ~]# mkdir /mnt/iso
[root@localhost ~]# mount -o loop Keepalived.iso /mnt/iso/
[root@localhost ~]# cp -a /mnt/iso/* .
[root@localhost ~]# tar -zxvf keepalived-1.2.2.tar.gz
[root@localhost ~]# cd keepalived-1.2.2
[root@localhost keepalived-1.2.2]# yum install -y kernel-devel openssl-devel popt-devel gcc*
[root@localhost keepalived-1.2.2]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-642.el6.x86_64/
[root@localhost keepalived-1.2.2]# make && make install
[root@localhost keepalived]# vim /etc/keepalived/keepalived.conf
service keepalived start;chkconfig keepalived on;如果不是LVS的集群就不用设置100这个虚拟IP,自动会设置
ip addr show(查看到192.168.66.100的vip)
测试:浏览器访问192.168.66.100
③切断11的网卡:
再次测试,浏览器访问192.168.66.100
注意:apache gg了,备服务器不会顶替上去,因为只是apache gg,不是服务器gg,还能ping通
解决方案:给服务器写一个检测脚本,检测apache是否有问题,如果有问题就关闭keeplived,这样备服务器就可以顶替上去了
①mkdir /usr/local/script;cd /usr/local/script;vim check.sh;chmod a+x check.sh
#通过curl检测当前站点的返回码,若不是200则关闭keepalived,这样就可以切换到备服务器了
#!/bin/bash
URL="http://192.168.66.11/index.html"
HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"`
if [ $HTTP_CODE != 200 ]then/etc/init.d/keepalived stop
fi②定时任务:利用脚本一分钟检测e一次返回码crontab -e---*/1 * * * * /bin/bash /usr/local/script/check.sh;
service crond restart;chkconfig crond on
③关闭httpd进行检测:service httpd stop;
- 检测结果
救活主服务器的apache:service httpd start;service keepalived start
非抢占模式:
注意:如果主服务器被救活,vip默认会从备服务器跳到主服务器上,因为只要是设置的MASTER就会抢回来vip。但是就算主被救活,最好还是让备当主服务器,因为会有中断(中断的时候用户会连接不上),所以要设置非抢占模式
- 1.11和12安装好keepalived,再次下载keepalived-all,将文件覆盖到原来的keepalived目录
#把解压的压缩包里的keepalived下的所有都覆盖到/etc/keepalived
[root@localhost ~]# tar -zxvf keepalived-all.tar.gz
[root@localhost ~]# rm -rf /etc/keepalived
[root@localhost ~]# cd /root/etc/keepalived
[root@localhost keepalived]# cp -a * /etc/keepalived/
- 压缩包里keepalived里的script目录下的脚本介绍:
check-server.sh(检测当前网页返回码) 如果返回码不是200,那么就关闭keepalived,把关闭信息写入stop_keepalived.log,可以知道机器什么时候被关闭
notify_master.sh(当切换成master节点时会执行) 如果切换成master节点,就把信息写入/root/change.master.log
notify_stop.sh (master死亡了会执行)如果关闭keepalived,会写入/root/stop.log
- 配置文件详细信息:
- ②开启apache:service httpd start;curl localhost;
- 开启keepalived:service keepalived start;chkconfig keepalived on
检测:11主机开启
因为开启了keepalived和httpd,所以切换了master节点,执行notify_master.sh
这时候11主机是master主机,备服务器闲置状态,root目录出现change.master.log,证明由关闭切换成master状态的时候,执行了notify_master.sh
- ③另一台备设备也安装keepalived(12主机)
scp -r * root@192.168.66.12:/etc/keepalived/(11操作)
- 配置文件修改:
脚本修改:vim check-server.sh;
- 启动服务:service httpd start;service keepalived start;
浏览器访问192.168.66.100,访问的仍然是11主机(因为11主机还活着,12开启了也没用)
- 关闭11的web:service httpd stop(11主机),
浏览器再次浏览器访问192.168.66.100,访问的是12主机(暂时还为非抢占)
这时候有了stop.log文件(11主机),keepalived在master中被关闭的时候,执行了notify_stop.sh
- 设置非抢占模式参数(11和12都要设置):
vim /etc/keepalived/keepalived.conf
在global_defs(全局)下面添加 nopreempt,state master改为slave(非抢占模式下不能有master存在)
service keepalived restart;service httpd stop(11主机)
service keepalived start(11主机)
一直都是12的页面了,回不去11了
heartbeat对nginx的高可用
实验环境:11主服务器安装nginx和heartbeat 12备服务器安装nginx和heartbeat
两台主机后端挂载共享存储,作用是让他两同步数据,网页文件放在共享存储里,一台主机死亡,另一台机器顶替,这样才能保持数据是最新的,采用NFS(网络文件系统)MFS,这个实验先不用共享存储
- 11和12安装nginx、写入123和456到网页文件、启动
useradd -s /sbin/nologin -M nginx;tar -zxvf nginx.....;cd nginx....;./configure --prefix=/usr/local/nginx --user=nginx --group=nginx;make makinstall
echo "123" > /usr/local/nginx/html/index.html ;echo "456" > /usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx
- 安装heartbeat
如果是C7,需要安装一个epel源,yum install -y epel-release
解压源码包并安装:tar -zxvf heartbeat.tar.gz ;cd hearbeat;yum install -y *
[root@localhost heartbeat]# cd /usr/share/doc/heartbeat-3.0.4/
[root@localhost heartbeat-3.0.4]# ls
apphbd.cf ha.cf authkeys
[root@localhost heartbeat-3.0.4]# cp ha.cf haresources authkeys /etc/ha.d
[root@localhost heartbeat-3.0.4]# cd /etc/ha.d配置ha.cf 主配置文件:声明通讯的网卡以及集群
发送心跳检测的时候走哪一个网络接口
组建集群的机器的主机名
修改主机名:
临时生效:
永久生效:vim /etc/sysconfig/network
查看:uname -n 或hostname
写解析记录:vim /etc/hosts
配置authkeys文件:设置加密方案
用随机数通过MD5加密
复制md5码,打开authkeys,选择第三种加密类型
配置haresources文件:当切换成主的时候做什么设置
指定主:www.centos1.com
- 启动服务
service heartbeat start;会自动启动eth0:0网卡
断开11主机的网卡,测试
如果nginx gg了,虚拟ip不会跳转到备服务器,heartbeat不支持keepalived的一些功能,所以需要到脚本
把11主机的nginx关闭:
创建脚本,实现nginx被崩了,能自动切换到备设备
[root@www ~]# mkdir /usr/local/script
[root@www ~]# cd /usr/local/script
[root@www ~]# vim check-nginx.sh
[root@www script]# chmod a+x check-nginx.sh判断nginx是否死亡,如果死亡则关闭heartbeat
启动nginx:/usr/local/nginx/sbin/nginx
写定时任务: ;service crond restart
- 关闭nginx:
- 测试结果:
扩展: