热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

集群负载调度器的搭建,高可用集群的搭建

定义:一组协同工作的服务分类:负载均衡集群,高可用集群,高性能运算集群负载均衡集群(LBC):介绍:将压力分担到不同的工作节点实现方案:垂直扩展:把服务器的性能升级,优点是技术实

定义:一组协同工作的服务

分类:负载均衡集群,高可用集群,高性能运算集群

负载均衡集群(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.conf

11和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:

  • 测试结果:

扩展:

 

 


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 求助:在CentOS 5.8系统上安装PECL扩展遇到问题
    在 CentOS 5.8 系统上尝试安装 APC 扩展时遇到了问题,具体表现为 PECL 工具无法正常工作。为了确保顺利安装,需要解决 PECL 的相关依赖和配置问题。建议检查 PHP 和 PECL 的版本兼容性,并确保所有必要的库和开发工具已正确安装。此外,可以尝试手动下载 APC 扩展的源代码并进行编译安装,以绕过 PECL 工具的限制。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 本文源自极分享,详细内容请参阅原文。技术债务如同信用卡负债,随着时间推移,修复成本会越来越高,因此程序员必须对此有深刻认识。此外,团队应致力于培养一种持续维护和优化代码的文化,以减少技术债务的累积。 ... [详细]
  • 虚拟机网络设置与数据库远程连接优化指南
    本文针对个人计算机上虚拟机网络配置与数据库远程连接的问题,提供了一套详细的优化指南。在探讨远程数据库访问前,需确保网络配置正确,特别是桥接模式的设置。通过合理的网络配置,可以有效解决因虚拟机或网络问题导致的连接失败,提升远程访问的稳定性和效率。 ... [详细]
  • 本文深入探讨了使用Puppet进行软件包分发与管理的方法。首先介绍了fpm这一跨平台的软件包制作工具,其简便的操作流程使得软件包的创建变得轻松快捷。fpm的项目地址为:https://github.com/jordansissel/fpm。通过结合Puppet和fpm,可以实现高效、可靠的软件包管理和部署。 ... [详细]
  • 在项目开发过程中,掌握一些关键的Linux命令至关重要。例如,使用 `Ctrl+C` 可以立即终止当前正在执行的命令;通过 `ps -ef | grep ias` 可以查看特定服务的进程信息,包括进程ID(PID)和JVM参数(如内存分配和远程连接端口);而 `netstat -apn | more` 则用于显示网络连接状态,帮助开发者监控和调试网络服务。这些命令不仅提高了开发效率,还能有效解决运行时的各种问题。 ... [详细]
author-avatar
萍水相逢--莹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有