- 集群简介
- 根据功能划分为两大类:高可用和负载均衡。
- 高可用集群通常为两台服务器,一台工作,另一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务。
- 实现高可用的开源软件有:heartbeat、keepalived(推荐)。
- 负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务数量至少为2。
- 实现负载均衡的开源软件有LVS、kepalived、haproxy、nginx,商业的有F5、netscaler。
- Keepalived介绍
- 在这里我们使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验结果。
- Keepalived通过VRRP(Vitual Router Redundancy Protocl)来实现高可用。
- 在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色和N(N>=1)个backup角色。
- Master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不到master发来的VRRP数据包是,就会任务master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的master。
- Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。
- Keepalived配置高可用集群
- 准备两台机器130和132,130作为master,132作为backup。
- 两台机器都执行yum install -y keeplived 。
- 两台机器都安装nginx,其中130上已经编译安装nginx,132上需要yum安装nginx:yum install -y nginx。
- 设定vip为100。
- 编辑130上keepalived配置文件,内容从 http://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf
- 获取。
- 130编辑监控脚本,内容从 http://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh
- 获取。
- 给脚本755权限。
- systemctl start keepalived 130启动服务。
- 测试高可用
- 先确定好两台机器上nginx差异,比如可以通过curl -I来查看nginx版本。
- 测试1:关闭master上的nginx服务。
- 测试2:在master上增加iptabls规则。
- iptables -I OUTPUT -p vrrp -j DROP
- 测试3:关闭master上的keepalived服务。
- 测试4:启动master上的keepalived服务。
- 负载均衡集群介绍
- 主流开源软件LVS、keepalived、haproxy、nginx等。
- 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy即可以认为是4层,也可达当做7层使用。
- Keepalived的负载均衡功能其实就是LVS。
- LVS这种4层的负载均衡是可以分发除80外的其他端口通信的,比如mysql的,而nginx仅仅支持http、https、mail,haproxy也支持mysql这种。
- 相比较来说,LVS这种4层的更稳定,能承受更多的请求,而nginx这种7层的更加灵活,能实现更多的个性化需求。
- LVS介绍
- LVS是由国人章文嵩开发的。
- 流行度不亚于Apache的httpd,基于tcp/ip做的路由和转发,稳定性和效率都很高。
- LVS最新版本基于linux内核2.6,已经很多年没有更新了。
- LVS有三种常见的模式:NAT、DR、IP Tunnel。
- LVS架构中有一个核心角色叫做分发器(Load Balancing),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs)
- NAT模式下报文变化
- 发送接收
- cip ---> vip
- cip ---> rip(DNAT)
- rip ---> cip
- vip ---> cip(SNAT)
- 这种模式,需要有一个公共的IP配置在分发器和所有rs上,我们把它叫做vip。
- 客户端请求的目标IP为vip,分发器收到请求数据包后会对数据包做一个加工,会把目标IP改为rs的IP,这样数据包就到了rs上。
- Rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所有它会认为是它自己。
- LVS的调度算法
- 轮询 Round-Robin rr
- 加权轮询 Weight Round-Robin wrr
- 最小连接 Least-Connection lc
- 加权最小连接 Weight Least-Connection wlc
- 基于局部性的最小连接 Locality-Based Least Connections with Replication lblcr
- 目标地址散列调度 Destination Hashing dh
- 源地址散列调度 Source Hashing sh
- LVS NAT模式搭建
- 准备工作
- 三台机器
- 分发器,也叫调度器(简写为dir)
- 内网:133.130,外网:147.411(vmware仅主机模式)
- Rs1
- 内网:133.132,设置网关为133.130
- Rs2
- 内网:133.133,设置网关为133.130
- 三台机器上都执行命令
- systemctl stop firewalld
- systemc disable firewalld
- systemctl start iptables
- iptables -F
- service iptables save
- 在dir上安装ipvsadm
- yum install -y ipvsadm
- 在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
-
Keepalived的实现原理
-
VRRP协议
-
LVS 三种模式图解
-
fullnat模式