linux集群

1 集群介绍
2 keepalived介绍
3 用keepalived配置高可用集群
4 负载均衡集群介绍
5 LVS介绍
6 LVS调度算法
7 LVS NAT模式搭建

1、集群介绍

Linux集群根据功能划分为两大类:高可用和负载均衡。

  • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 - 高可用衡量标准,4个九,就是99.99%,表示一个比例,在一年时间内99.99%的时间都是在线的,不允许宕机,不允许服务不可用。
  • 实现高可用的开源软件有:heartbeat、keepalived
  • 负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2
  • 实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx,商业的有F5、Netscaler

 2、keepalived介绍

  • 在这里使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果;heartbeat 切换的时候,会不是很及时。
  • keepalived通过VRRP(Virtual Router Redundancy Protocl虚拟路由冗余协议)来实现高可用。
  • 在这个协议里,会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。
  • master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。
  • Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。

 3、用keepalived配置高可用集群

  • 准备两台机器130和132,130作为master,132作为backup
  • 两台机器都执行yum install -y keepalived
  • 两台机器都安装nginx,其中130上已经编译安装过nginx,132上需要yum安装nginx: yum install -y nginx
  • 设定vip为100
  • 编辑130上keepalived配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf获取
  • 130编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh获取
  • 给脚本755权限
  • systemctl start keepalived 130启动服务
  • 132上编辑配置文件,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf获取
  • 132上编辑监控脚本,内容从https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh获取
  • 给脚本755权限
  • 132上也启动服务 systemctl start keepalived

首先准备两台机器,都需要安装keepalived,一个作为master,一个作为backup

080926_rWpX_3708406.png

080938_mxgn_3708406.png

两台机器装nginx服务,可以yum直接安装

081337_0TPc_3708406.png

master上配置

编辑keepalived配置文件,按快捷键> !$清空内容,添加内容如下

081933_pgSP_3708406.png

082057_98XF_3708406.png

notification_email//用于设置报警邮件地址

smtp_server 127.0.0.1 //设置邮件的smtp server地址

smtp_connect_timeout 30 //设置连接smtp sever超时时间

vrrp_script chk_nginx {  

script "/usr/local/sbin/check_ng.sh" //检查服务是否正常

 interval 3 //检查的时间间断是3秒

}

virtual_router_id 51 //定义路由器ID

priority 100 //权重

virtual_ipaddress//设置VIP

track_script//加载监控脚本

定义监控脚本,添加内容如下:

084217_nqh6_3708406.png

084348_jWYp_3708406.png

停止Keepalived服务是为了避免发生脑裂

然后更改脚本的权限,启动keepalived服务,查看进程

084931_0GMB_3708406.png

084958_OOhv_3708406.png

停掉nginx服务,查看nginx服务进程

085247_jVIj_3708406.png

查看ip地址,使用 ip add 命令,ifconfig命令无法查看到

085455_erJA_3708406.png

检查两台机器的防火墙和selinux是否关闭

090657_XKvp_3708406.png

090542_00vg_3708406.png

backup上配置

编辑keepalived配置文件,添加内容如下:

091248_SliH_3708406.png

091628_QfCp_3708406.png

091709_ALQJ_3708406.png

创建监控脚本,添加内容如下:

091826_aA8E_3708406.png

091928_gJnP_3708406.png

更改监控脚本权限,启动Keepalived服务,并查看

092034_oIkm_3708406.png

测试访问IP

访问master的IP

092734_c4B5_3708406.png

访问内容可以修改

092839_peVI_3708406.png

访问backup的IP

093016_pndU_3708406.png

092943_aYNm_3708406.png

访问192.168.133.132,出现和访问master的IP一样的内容,说明访问到的机器是master

093054_SbsE_3708406.png

测试高可用

  • 先确定好两台机器上nginx差异,比如可以通过curl -I 来查看nginx版本  
  • 测试1:关闭master上的nginx服务  
  • 测试2:在master上增加iptabls规则  
  • iptables -I OUTPUT -p vrrp -j DROP  
  • 测试3:关闭master上的keepalived服务
  • 测试4:启动master上的keepalived服务

执行命令ip add可以看到,VIP绑定在master上

093822_OaQR_3708406.png

在master上增加iptabls规则限制vrrp发包,并查看日志变化

094005_YYXo_3708406.png

094229_6yCB_3708406.png

访问VIP,发现还是在master上

094818_Q8TZ_3708406.png

所以封掉vrrp协议,不能达到切换资源的目的,恢复防火墙规则

094943_kjE8_3708406.png

模拟生产环境中宕机,停掉keepalived服务,查看IP

095124_QQTb_3708406.png

095204_6gvS_3708406.png

访问VIP,发现内容发生改变

095231_Pzwo_3708406.png

启动master上的keepalived服务,查看IP又回来了

095505_BSkZ_3708406.png

095710_0eHz_3708406.png

访问VIP,内容又变回来了

095549_XsPA_3708406.png

 4、负载均衡集群介绍

  • 主流开源软件LVS、keepalived、haproxy、nginx等
  • 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用
  • keepalived的负载均衡功能其实就是lvs
  • lvs这种4层的负载均衡是可以分发TCP协议,web服务是80端口,除了分发80端口,还有其他的端口通信的,比如MySQL的负载均衡,就可以用LVS实现,而nginx仅仅支持http,https,mail,haproxy;haproxy也支持MySQL这种TCP负载均衡的
  • 相比较来说,LVS这种4层的更稳定,能承受更多的请求,承载的并发量更高,而nginx这种7层的更加灵活,能实现更多的个性化需求

 5、LVS介绍

  • LVS是由国人章文嵩开发
  • 流行度不亚于apache的httpd,基于TCP/IP做的路由和转发,稳定性和效率很高
  • LVS最新版本基于Linux内核2.6,有好多年不更新了
  • LVS有三种常见的模式:NAT、DR、IP Tunnel
  • LVS架构中有一个核心角色叫做分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs)

LVS NAT模式

233345_TPEQ_3708406.png

  • 借助iptables的nat表来实现
  • 用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去
  • rs需要设定网关为分发器的内网ip
  • 用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈
  • 在nat模式中,只需要分发器有公网ip即可,所以比较节省公网ip资源

LVS IP Tunnel模式

233422_U48n_3708406.png

  • 这种模式,需要有一个公共的IP配置在分发器和所有rs上,我们把它叫做vip
  • 客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为rs的IP,这样数据包就到了rs上
  • rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己

LVS DR模式

233953_Qrr0_3708406.png

  • 这种模式,也需要有一个公共的IP配置在分发器和所有rs上,也就是vip
  • 和IP Tunnel不同的是,它会把数据包的MAC地址修改为rs的MAC地址
  • rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己

 6、LVS调度算法

  • 轮询 Round-Robin rr
  • 加权轮询 Weight Round-Robin wrr
  • 最小连接 Least-Connection lc
  • 加权最小连接 Weight Least-Connection wlc
  • 基于局部性的最小连接 Locality-Based Least Connections lblc
  • 带复制的基于局部性最小连接 Locality-Based Least Connections with Replication lblcr
  • 目标地址散列调度 Destination Hashing dh
  • 源地址散列调度 Source Hashing sh

常用的算法是前四种

 7、LVS NAT模式搭建

准备工作

  • 三台机器
  • 分发器,也叫调度器(简写为dir)
  • 内网:133.130,外网:142.147(vmware仅主机模式)
  • rs1
  • 内网:133.132,设置网关为133.130
  • rs2
  • 内网:133.133,设置网关为133.130
  • 三台机器上都执行执行
  • systemctl stop firewalld; systemc disable firewalld
  • systemctl start iptables-services; iptables -F; service iptables save

NAT模式搭建

  • 在dir上安装ipvsadm
  • yum install -y ipvsdam
  • 在dir上编写脚本,vim /usr/local/sbin/lvs_nat.sh//内容如下
#! /bin/bash
# director 服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意区分网卡名字,阿铭的两个网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.133.0/24  -j MASQUERADE
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.147.144:80 -s wlc -p 3
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1

NAT模式效果测试

  • 两台rs上都安装nginx
  • 设置两台rs的主页,做一个区分,也就是说直接curl两台rs的ip时,得到不同的结果
  • 浏览器里访问192.168.142.147,多访问几次看结果差异

准备三台机器,一台作为分发器(内网:133.130,外网:142.147),另外两台是real server,分别为rs1(内网:133.132,网关为133.130)和rs2(内网:133.133,网关为133.130)

分发器增加一块网卡,查看网卡网段,所以设置IP192.168.142.147

002956_jY1c_3708406.png

003257_4JvZ_3708406.png

003326_ff6h_3708406.png

然后查看是否ping通

003428_JPgz_3708406.png

三台机器配置好了之后,全部需要关闭防火墙

003628_qFSZ_3708406.png

然后在rs1,rs2上安装iptables-services包,启动iptables服务

003747_WICS_3708406.png

 systemctl start iptables
 systemctl enable iptables

然后调用新规则,以免默认规则影响实验效果;最后关闭selinux,最好修改下配置文件

004228_0j0l_3708406.png

004809_217X_3708406.png

004745_Ap3X_3708406.png

安装ipvsadm工具

005243_R5or_3708406.png

然后编写脚本,vim /usr/local/sbin/lvs_nat.sh,保存退出;然后执行该脚本sh /usr/local/sbin/lvs_nat.sh,脚本无输出表示无错误

011539_UgYM_3708406.png

$IPVSADM -A -t 192.168.147.144:80 -s rr -p 3 #-A:=add,添加规则;-t:=tcp;-s 指定算法; -p:指定超时时间

在rs1和rs2上安装nginx,并分别修改主页内容

010738_ko6L_3708406.png

010843_IEMe_3708406.png

然后可以做测试,如下表示测试成功

011622_KFS3_3708406.png

 

转载于:https://my.oschina.net/u/3992081/blog/2995289

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值