2018年7月20日集群课程

一、集群介绍

集群,简单地说是指一组(若干个)相互独立的计算机,利用高速通信网络组成一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。

集群的特点:高性能(Performance)、价格有效(Cost-effectiveness)、可伸缩性(Scalability)、高可用性(Availability)、透明性(Traansparency)、可管理性(Manageability)、可编程性(Programmability)

集群的分类:

负载均衡集群:Load  balancing clusters,简称LBC、LB

高可用集群:High-availability clusters,简称HAC

高性能计算集群:High-performance  clusters,简称HPC

网格计算集群:Grid computing clusters

常见的集群开源软件:

高可用: Keepalived、Heartbeat

负载均衡:Keepalived、Nginx、LVS、Haproxy

二、keepalived介绍

1、keepalived介绍

keepalived是目前轻量级的管理方便、易用的高可用软件解决方案,有core、check和vrrp等3个模块,类似于工作在3、4和7层交换机制的软件。

keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。

layer3、4、7工作在TCP/IP协议栈的IP层、传输层及应用层,实现原理:

·layer 3: keepalived使用layer 3的方式工作时,keepalived会定期向服务集群中的服务器发送一个ICMP的数据包,如果发现某台服务器的IP地址无法ping通时,keepalived便报告这台服务器失效,并将它从服务器集群中剔除。layer的3方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。

·layer 4:  layer 4主要以TCP端口的状态来决定服务工作正常与否,例如80端口,如果检测到某台80端口没有启动,则将这台机子从集群中剔除。

·layer 7:  layer 7 工作在应用层,keepalived根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则将其剔除。

2、keepalived工作原理

keepalive高可用对之间是通过VRRP通信的。

1、VRRP,全称Virutal  Router  Redundancy Protocol(虚拟路由冗余协议),VRRP的出现是为了解决静态路由的单点故障。

2、VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器的。

3、VRRP使用IP多播(Multicast)方式实现高可用之间的通信,默认多播地址为:224.0.0.18。

4、工作时主节点发包,备节点接包。当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选。

5、VRRP使用了加密协议加密数据,但keepalive官方目前还是推荐使用明文的方式配置认证类型和密码。

3、keepalived服务工作原理

keepalived高可用对之间通过VRRP进行通信,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此在工作时会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。

在keepalive服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性。接管速度最快可以小于1秒。

三、keepalived高可用集群搭建

keepalived +  nginx高可用集群

准备两台机器,一台作为master,一台作为backup,全部机子清空防火墙规则,关闭selinux

master:ip 192.168.10.205,系统:RHEL7.5,安装nginx,主机名:node0

backup:ip 192.168.10.206,系统:RHEL7.5,安装nginx,主机名:node1

VIP:192.168.10.88

1、master配置(node0主机)

(1)编译安装nginx

[root@node0 ~]# yum install -y gd-devel gcc 
[root@node0 ~]# useradd -s /sbin/nologin -r nginx
[root@node0 ~]# curl -O http://nginx.org/download/nginx-1.14.0.tar.gz
[root@node0 ~]# tar xf nginx-1.14.0.tar.gz 
[root@node0 ~]# cd nginx-1.14.0/
[root@node0 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx\
    --user=nginx\
    --group=nginx\
    --http-log-path=/mydata/logs/nginx/access.log\
    --error-log-path=/mydata/logs/nginx/error.log\
    --with-http_ssl_module\
    --with-http_realip_module\
    --with-http_flv_module\
    --with-http_mp4_module\
    --with-http_gunzip_module\
    --with-http_gzip_static_module\
    --with-http_image_filter_module\
    --with-http_stub_status_module
[root@node0 nginx-1.14.0]# make && make install

(2)安装keepalived

yum安装keepalived软件

[root@node0 ~]# yum install -y keepalived

(3)配置keepalived

keepalived配置文件: /etc/keepalived/keepalived.conf

[root@node0 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {
   script "/data/sh/chk_nginx.sh"
   interval 3
   weight 2
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.88
    }
    track_script {
        chk_nginx
    }
}

部分解释:

global_defs {         #全局设置
   notification_email {           #设置邮件通知
     acassen@firewall.loc           #定义接收邮件的人
   }
   notification_email_from Alexandre.Cassen@firewall.loc       #定义发邮件的地址,一般没什么用
   smtp_server 127.0.0.1      #发邮件的地址
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {          #nginx健康监测
   script "/data/sh/chk_nginx.sh"      #这脚本得自己编写,脚本放在/data/sh/目录中
   interval 3      #每隔3秒执行一次该脚本
   weight 2        #权重
}
vrrp_instance VI_1 {
    state MASTER     # 主为MASTER,备用为BACKUP
    interface ens33     #监听的网卡
    virtual_router_id 51   #虚拟路由id
    priority 100     #权重,master要比backup大,默认为100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111   #定义密码,默认为1111,master和backup的密码要一样
    }
    virtual_ipaddress {   #定义虚拟ip,vip
        192.168.10.88
    }
    track_script {
        chk_nginx  #定义监控脚本,名称要跟前面vrrp_script定义的名字一样
    }
}

(3)nginx检查检测脚本

脚本存放目录:/data/sh,名称为:chk_nginx.sh

[root@node0 ~]# mkdir /data/sh -pv
mkdir: created directory ‘/data/sh’
[root@node0 ~]# vim /data/sh/chk_nginx.sh
#!/bin/bash

#时间变量,用于记录日志

d=`date --date today +%Y%m%d_%H:%M:%S`

#计算nginx的进程数量

n=`ps -C nginx --no-heading | wc -l`

#如果进程为0,则启动nginx,并且再次检测nginx进程数量
#如果进程还为0,说明nginx无法启动,此时需要关闭keepalived服务

if [ $n -eq "0" ];then
   /etc/rc.d/init.d/nginx start
   n2=`ps -C nginx --no-heading | wc -l`
   if [ $n2 -eq "0" ];then
      echo "$d   nginx  down,keepalived will stop!!!" >> /var/log/check_nginx.log
      systemctl stop keepalived
   fi
fi

脚本添加可执行权限:

[root@node0 ~]# chmod +x /data/sh/chk_nginx.sh

(4)创建nginx的web测试页

因为nginx是编译安装(安装目录:/usr/local/nginx/),所以默认网站目录是:/usr/local/nginx/html/

[root@node0 ~]# echo "<h1> Nginx Test Page on 192.168.10.205..." > /usr/local/nginx/html/index.html 

2、backup配置(node1主机)

(1)编译安装nginx

安装过程省略,参考master的编译安装nginx

(2)安装keepalived

yum安装keepalived软件

[root@node1 ~]# yum install -y keepalived

(3)配置keepalived

backup的keepalived与master的配置大同小异,不同的是:

 state   BACKUP  
 priority  90 :backup的权限要比master的小

配置文件全文如下:

global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30

global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {
   script "/data/sh/chk_nginx.sh"
   interval 3
   weight 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.88
    }
    track_script {
        chk_nginx
    }
}

(4)nginx健康检查脚本

nginx检查检测脚本跟master的一样。在这里省略编写过程了。

(5)创建nginx的web服务测试页

因为nginx是编译安装(安装目录:/usr/local/nginx/),所以默认网站目录是:/usr/local/nginx/html/

[root@node1 ~]# echo "<h1> Nginx Test Page on 192.168.10.206..." > /usr/local/nginx/html/index.html

3、测试

node0、node1主机开启keepalived服务,清空防火墙规则,node0开启nginx服务,但node1不开启nginx。

浏览器打开:192.168.10.88

48d85e6fb9d91d6ecf83acf9c134fa79800.jpg

此时访问的是node0的web服务。

[root@node0 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:d0:a0:1b brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.205/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.88/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::b9c0:9b69:38a1:8ff6/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@node0 ~]# 

测试2:关闭node0的nginx服务

[root@node0 ~]# /usr/local/nginx/sbin/nginx -s stop

过一会会自动启动nginx

测试3:把node0的keepalived服务停掉。过一会vip会漂移到node1,并且node1会自动开启nginx服务

node0停止keepalived:

[root@node0 ~]# systemctl stop keepalived
[root@node0 ~]# ip addr | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.10.205/24 brd 192.168.10.255 scope global noprefixroute ens33
[root@node0 ~]# 

查看node1的ip:

[root@node1 ~]# ip addr | grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 192.168.10.206/24 brd 192.168.10.255 scope global noprefixroute ens33
    inet 192.168.10.88/32 scope global ens33
[root@node1 ~]# ss -tnl
State      Recv-Q Send-Q                                         Local Address:Port                                                        Peer Address:Port              
LISTEN     0      128                                                        *:111                                                                    *:*                  
LISTEN     0      128                                                        *:80                                                                     *:*                  
LISTEN     0      128                                                        *:22                                                                     *:*                  
LISTEN     0      100                                                127.0.0.1:25                                                                     *:*                  
LISTEN     0      128                                                       :::111                                                                   :::*                  
LISTEN     0      128                                                       :::22                                                                    :::*                  
LISTEN     0      100                                                      ::1:25                                                                    :::*                  
[root@node1 ~]# 

刷新浏览器:

fbb44e89926dec8b40f0ab2e799e3e6ac2d.jpg

此时访问的是node1站点。

然后,启动node0的keepalived服务,vip又漂移到node0了。刷新浏览器:

2d711a09176fbbc6aa6448f0cc0244a29ce.jpg

此时访问的是node0站点。

至此,keepalived高可用nginx搭建成功。可以实现故障转移了。

需要注意的是:要关闭selinux

四、负载均衡集群介绍

负载均衡软件分类:

主流的负载均衡开源软件:LVS、keepalived、haproxy、nginx等

其中,LVS属于4层(网络OSI7层模型),nginx属于7层,haproxy即可以是4层,也可以是7层。

keepalived的负载均衡功能其实就是lvs

lvs这种4层的负载均衡是可以分发除80外的其他端口通信,比如mysql,而nginx仅仅支持http、https、mail

haproxy也可以支持mysql

4层和7层负载比较:

LVS4层的更稳定,能承受更多的请求

nginx 7层的更加灵活,能实现更多的个性化需要

五、LVS介绍

1、lvs介绍

LVS:Linux  Virtuer  Server,即Linux虚拟服务器,是一个虚拟的服务器集群系统,基于TCP/IP做的路由和转发,稳定性和效率很高。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

 LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

一般来说,LVS集群采用三层结构

A、负载调度器(load balancer)或者叫分发器(Load Runner),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

2、lvs主要模式

LVS属于四层转发,主要有NAT、DR、TUN等模式。

2.1 LVS-NAT模式

LVS NAT 模式工作原理:

此模式借助iptables的nat表来实现。

1、客户端通过互联网访问director(调度器,也叫分发器Load Runner)时,请求报文的目标地址是VIP,director(调度器)通过NAT(网络地址转换),重写请求报文的目标地址为后端服务器的真实地址(RIP),然后根据预设的调度算法,将请求分派给后端的real server(真实服务器);

2、真实服务器收到请求报文后,经处理,发出响应报文,响应报文通过调度器时,报文的源地址被重写为VIP,之后返回给客户端,完成整个负载调度过程。

优点:支持所有操作系统及私有网络,且只需一个公网 IP 地址

缺点:用户请求和响应报文都必须经过dr地址重写,当用户请求越来越多时,调度器的处理能力将成为瓶颈。

2.2  LVS-DR模式

director分配请求到不同的real server。real server 处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Director Routing采用的是物理层(修改MAC地址)技术,因此,所以服务器都必须在同一个物理网段。

·这种模式,需要一个公共的IP配置在分发器和所有的rs上,也就是vip

·跟TUN模式不同的是,它会把数据包的MAC地址修改为rs的MAC地址

·rs接收到数据包后,会还原原始数据包,这样目标ip为vip,因为所有的rs都配置了这个vip,所以它会认为是它自己

LVS-DR模式工作原理:MAC地址转换

假设每台机子的ip与mac信息如下:

MAC地址转换过程:

(1)客户端(ip:192.168.10.201)向目标vip发出请求, Director接收。此时IP包头部及数据帧头信息如下:

(2)Director根据负载均衡算法选择一台active的RS(假设是192.168.10.101),并将此RIP所在网卡的mac地址作为目标mac地址,发送到局域网里。此时IP包头部及数据帧头信息如下:

(3)real server(192.168.10.101)在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文,随后重新封装报文,发送到局域网。此时IP包及数据帧头信息如下:

(4)如果client与LVS在同一网段,那么clinet(192.168.10.201)将收到这个回复报文。如果跨了网段,那么这个报文通过gateway/路由通过Internet返回给用户。 以上就是LVS-DR模式的原理。

 

2.3 LVS-TUN模式

director分配请求到不同的real server。real server 处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度能力,同时也极大地提高了系统容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或WAN上运行,也就意味着允许物理上的分布,这对灾难恢复有重要意义。服务器必须有正式的公网ip地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议。

·这种模式,需要一个公共的IP配置在分发器和所有RS上,我们把它叫做vip

·客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包加工,把目标ip改为rs的ip,这样数据包就到了rs上

·rs接收到数据包后,会还原原始数据包,这样目标ip为vip,因为所有的rs上配置了这个vip,所以它会认为是ta自己。

DR与TUN区别: Director与IP Tunneling相比,没有IP封装的开销,但由于采用物理层(修改MAC地址)技术,所有服务器都必须在一个物理网段。

六、LVS调度算法

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

七、LVS-NAT模式搭建

实验拓扑图如下:

5d09b79a47796f6e9f53c23283bf7ce6dcb.jpg

 

LVS负载均衡器(director):CentOS7.5系统,有两块网卡,一块连接外网(vip:192.168.10.200),另一块连接内网(dip:10.0.0.88)

Real Server 1(简称:rs1):RHEL 7.5系统,ip:10.0.0.101,提供web服务

Real Server 2(简称:rs2):RHEL 7.5系统,ip:10.0.0.102,提供web服务

虚拟化软件:VMare Workstation 14 pro

1、RS1、RS2安装httpd、iptables防火墙

在实验前,先设置RS1、RS2可以连接外网,使用yum安装相关软件。

1、安装配置httpd

rs1、rs2准备好web服务。

rs1安装httpd服务:

[root@node5 ~]# yum install -y httpd

配置测试页,并启动httpd服务:

[root@node5 ~]# echo "<h1> Real Server 1 :10.0.0.101 </h1>" >/var/www/html/index.html
[root@node5 ~]# systemctl start httpd

rs2安装httpd服务:

[root@node1 ~]# yum install httpd -y

配置测试页,并启动httpd服务:

[root@node1 ~]# echo "<h1> Real Server 2 :10.0.0.102 </h1>" > /var/www/html/index.html
[root@node1 ~]# systemctl start httpd

2、安装iptables防火墙

rs1安装iptables防火墙:

[root@node5 ~]# yum install iptables-services -y

停用firewalld防火墙,启用iptables防火墙并清空防火墙规则

[root@node5 ~]# systemctl stop firewalld
[root@node5 ~]# systemctl start iptables
[root@node5 ~]# iptables -F
[root@node5 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@node5 ~]# 

rs2安装iptables防火墙:

[root@node1 ~]# yum install iptables-services -y

停用firewalld防火墙,启用iptables防火墙并清空防火墙规则

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl start iptables
[root@node1 ~]# iptables -F
[root@node1 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@node1 ~]# 

2、lvs调度器配置

lvs调度器,也就分发器,director

1、准备两块网卡

分发器有两块网卡,VMare中再添加一块网卡,如下图:

c2c6c50850ad63d6958b6df313e462525b0.jpg

一块网卡使用NAT,连接外网,另一块使用仅主机模式,连接内网。

2、配置ip

查看网卡ip信息:

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:55:10:a8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.200/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::b3d1:90a4:26af:f468/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:55:10:b2 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# 

如上所以,已经有两块网卡了,ens33、ens37

vip(网卡:ens33):192.168.10.200,已经配置好了,不需要重新配置了,其配置文件内容如下:

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=08d70096-32cb-4506-b0d9-e212a3874f59
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.10.200
PREFIX=24
GATEWAY=192.168.10.2
DNS1=119.29.29.29
DNS2=183.254.116.116
IPV6_PRIVACY=no
ZONE=public

配置DIP(网卡:ens37):10.0.0.88:

[root@localhost ~]# vim  /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=none
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=10.0.0.88
PREFIX=24
GATEWAY=10.0.0.1

保存退出,重启网络服务:

[root@localhost ~]# systemctl restart network
[root@localhost ~]# 

查看ip:

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:55:10:a8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.200/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::b3d1:90a4:26af:f468/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:55:10:b2 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.88/24 brd 10.0.0.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe55:10b2/64 scope link 
       valid_lft forever preferred_lft forever
[root@localhost ~]# 

OK,ip已经设置好了。

3、关闭firewalld防火墙,安装并启用iptables防火墙,清空防火墙规则

[root@localhost ~]# yum install iptables-services -y
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl start iptables
[root@localhost ~]# iptables -F
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@localhost ~]# 

4、关闭selinux,要永久关闭修改配置文件即可。

[root@localhost ~]# setenforce 0
[root@localhost ~]# 

5、安装ipvsadm软件

ipvsadm是管理lvs的工具

[root@localhost ~]# yum install ipvsadm -y

6、编写设置lvs的命令脚本并执行

脚本名称: lvs_nat.sh

[root@localhost ~]# vim lvs_nat.sh
#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
#lvs-nat模式中有两块网卡,所以这两块网卡也要关闭icmp重定向
#我这里的两块网卡名是: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 10.0.0.88/24 -j MASQUERADE
#director设置ipvsadm规则
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C #情况已有的规则
$IPVSADM -A -t 192.168.10.200:80 -s rr
$IPVSADM -a -t 192.168.10.200:80 -r 10.0.0.101:80 -m -w 1
$IPVSADM -a -t 192.168.10.200:80 -r 10.0.0.102:80 -m -w 1

ipvsadm规则参数解释:

-A :在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。

-t:tcp协议    

-s:指定调度算法

-p : 会话保持时间

-a:表示添加real server的地址    

-t:tcp协议  

-r:指定real server的ip地址  

-m:表示masquerade,也就是NAT

-g :  表示dr模式

-i :表示隧道模式

执行脚本:

[root@localhost ~]# sh lvs_nat.sh 
[root@localhost ~]# 

没有任何输出,表示执行成功。

3、RS1配置

1、配置ip:10.0.0.101

[root@node5 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
UUID=1408d649-6aa0-4338-895f-f12e33304ac5
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.101
PREFIX=24
GATEWAY=10.0.0.88
DNS1=119.29.29.29
DNS2=182.254.116.116
~                      

需要注意的是,网关设为为分发器的dip:10.0.0.88,DNS可有可无

修改网卡为仅主机模式:

83b64c3877eefa27bc9b2d35b34bbf85174.jpg

2、重启网络服务

[root@node5 ~]# systemctl restart network

3、关闭selinux,要永久关闭修改配置文件即可。

这里临时关闭selinux

[root@node5 ~]# setenforce 0
[root@node5 ~]# 

3、RS2配置

1、配置ip:10.0.0.102

[root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
UUID=c685222d-c62f-4a06-9d00-47ed21e46c1f
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.102
PREFIX=24
GATEWAY=10.0.0.88
DNS1=119.29.29.29
DNS2=183.254.116.116

需要注意的是,网关设为为分发器的dip:10.0.0.88,DNS可有可无

修改网卡为仅主机模式:

10f0a61337e5652c410c73bed45e5fcf6e6.jpg

2、重启网络服务

[root@node1 ~]# systemctl restart network

3、关闭selinux,要永久关闭修改配置文件即可。

这里临时关闭selinux

[root@node1 ~]# setenforce 0
[root@node1 ~]# 

4、测试

浏览器打开:192.168.10.200

09451261cb70dafbe654fd7311daf04aca0.jpg

使用curl测试:

[root@localhost ~]# curl 192.168.10.200
<h1> Real Server 2 :10.0.0.102 </h1>
[root@localhost ~]# curl 192.168.10.200
<h1> Real Server 1 :10.0.0.101 </h1>
[root@localhost ~]# curl 192.168.10.200
<h1> Real Server 2 :10.0.0.102 </h1>
[root@localhost ~]# curl 192.168.10.200
<h1> Real Server 1 :10.0.0.101 </h1>
[root@localhost ~]# curl 192.168.10.200
<h1> Real Server 2 :10.0.0.102 </h1>
[root@localhost ~]# curl 192.168.10.200
<h1> Real Server 1 :10.0.0.101 </h1>
[root@localhost ~]# curl 192.168.10.200
<h1> Real Server 2 :10.0.0.102 </h1>
[root@localhost ~]# 

因为使用轮询算法,所访问基本是平均的。

至此,lvs-nat搭建成功。

扩展

7.3 高可用 keepalived
http://kun0769.top/2018/07/04/%E9%AB%98%E5%8F%AF%E7%94%A8%E9%9B%86%E7%BE%A4%EF%BC%887%E6%9C%883%E6%97%A5%EF%BC%89/

参考别人的笔记 http://seanlook.com/2015/05/18/nginx-keepalived-ha/


7.4 负载均衡 LVS
http://kun0769.top/2018/07/05/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E9%9B%86%E7%BE%A4-1%EF%BC%887%E6%9C%884%E6%97%A5%EF%BC%89/

扩展:
VRRP协议
https://blog.csdn.net/u013920085/article/details/21184143

keepalived邮件告警
http://blog.51cto.com/6764097/1954158
https://blog.csdn.net/HzSunshine/article/details/62052398

LVS 三种模式图解
http://blog.51cto.com/jiekeyang/1839583

LVS算法 DH 
http://blog.51cto.com/lovvvve/1141713


arp_ignore和arp_announce
https://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

转载于:https://my.oschina.net/logmm/blog/1860348

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值