为什么80%的码农都做不了架构师?>>>   

一、集群介绍

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

集群的特点:高性能(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.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVEL
}vrrp_script chk_nginx {script "/data/sh/chk_nginx.sh"interval 3weight 2
}
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_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 startn2=`ps -C nginx --no-heading | wc -l`if [ $n2 -eq "0" ];thenecho "$d   nginx  down,keepalived will stop!!!" >> /var/log/check_nginx.logsystemctl stop keepalivedfi
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.locsmtp_server 127.0.0.1smtp_connect_timeout 30global_defs {notification_email {acassen@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS_DEVEL
}vrrp_script chk_nginx {script "/data/sh/chk_nginx.sh"interval 3weight 2
}
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_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

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

[root@node0 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:d0:a0:1b brd ff:ff:ff:ff:ff:ffinet 192.168.10.205/24 brd 192.168.10.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.10.88/32 scope global ens33valid_lft forever preferred_lft foreverinet6 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 1000inet 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 1000inet 192.168.10.206/24 brd 192.168.10.255 scope global noprefixroute ens33inet 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 ~]#

刷新浏览器:

此时访问的是node1站点。

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

此时访问的是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模式搭建

实验拓扑图如下:

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中再添加一块网卡,如下图:

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

2、配置ip

查看网卡ip信息:

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:55:10:a8 brd ff:ff:ff:ff:ff:ffinet 192.168.10.200/24 brd 192.168.10.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 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 1000link/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 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::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 1000link/ether 00:0c:29:55:10:a8 brd ff:ff:ff:ff:ff:ffinet 192.168.10.200/24 brd 192.168.10.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 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 1000link/ether 00:0c:29:55:10:b2 brd ff:ff:ff:ff:ff:ffinet 10.0.0.88/24 brd 10.0.0.255 scope global noprefixroute ens37valid_lft forever preferred_lft foreverinet6 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可有可无

修改网卡为仅主机模式:

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可有可无

修改网卡为仅主机模式:

2、重启网络服务

[root@node1 ~]# systemctl restart network

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

这里临时关闭selinux

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

4、测试

浏览器打开:192.168.10.200

使用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

2018年7月20日集群课程相关推荐

  1. 首届.NET Core开源峰会 2018年5月20日

    首届.NET Core开源峰会2018 代号:dnc 2018 亮点:去中心化.社区驱动 开源峰会 时间:2018年5月20日 周日 地点:在线峰会.远程参与.全球直播 形式:每个主题5分钟-15分钟 ...

  2. 2018年7月20日日报

    姓名:任光烨 日期:2018年7月20日 今日学习任务:学习Linux操作指令,在Linux环境下完善通讯录程序,用*输出sin cos函数等. 今日完成情况:都已完成,200~300代码. 今日开发 ...

  3. 香港城大计算机学院xutaowei,2018年3月20日学术报告(徐宏,香港城市大学)

    报告题目:Network Stack as a Service 报告日期及时间:2018年3月20日上午10:00 报告地点:      计算机学院B403 报告人:        Dr. Hong ...

  4. fgo服务器维护2018.123,fgo4月20日更新维护公告

    fgo4月20日更新后有什么新活动?fgo4月20日更新需要多长时间?来看看9k9k小编rayxx带来的fgo4月20日更新维护公告. 亲爱的各位Master: 我们将于以下时间,对游戏服务器实施临时 ...

  5. 2018年6月20日

    学生姓名:唐鑫    日期:2018年6月20日 今日学习任务:c语言知识回顾,代码练习,完成老师布置的课后作业 今日任务完成情况:已经按时完成任务,目前在做明日的练习题,代码量约100+行 今日开发 ...

  6. AI智商评测标准专家研讨会邀请,2018年12月20日北京

    21世纪以来,人工智能领域陆续爆发很多重要事件.其中最吸引人们眼球的,当属2016年战胜了人类围棋冠军并开始能够从0自我学习的AlphaGo. 10月26日,软银CEO孙正义在沙特阿拉伯举行的未来投资 ...

  7. 3月16日—3月20日三年级课程

    三年级课程表 [请各位家长注意翻看课程表下方学习指导] 时间 周一 周二 周三 周四 周五 9:00-9:25 数学 语文 数学 英语 语文 9:30-9:40 眼操 眼操 眼操 眼操 眼操 9:40 ...

  8. 王者服务器为什么在5月20日维护,王者荣耀4月20日更新到几点?4月20号登陆不了如何解决?...

    王者荣耀命运结契原计划4月19日登陆正式服,但是因为部分游戏bug导致要推出一天,那么王者荣耀4月20日更新了什么?几点才能进入游戏?想必很多玩家想知道吧,接下来就跟随小编一起来看看吧,希望对大家有所 ...

  9. 6月全网服务器维护,【已开服】6月20日全部服务器更新维护公告

    亲爱的水粉们,大家好: 为了给广大玩家提供更加精彩丰富的游戏内容,保证游戏运行的稳定性并提升整体服务质量,<新水浒Q传>全服(除霹雳火.电信四区外)将于2018年6月20日7:00-9:0 ...

最新文章

  1. 什么是边缘计算(Edge AI)?
  2. 基于oracle 的PL/SQL编程 -变量使用
  3. POJ 2387 Til the Cows Come Home
  4. 渤海发现大油田,证券会提示风险,微博回应流量造假,刘国梁制定史上最严奖惩体系,这就是今天的大新闻。...
  5. 交换机指定外部DHCP服务器,H3C交换机DHCP服务器设置步骤
  6. PHP学习之路之Hello World小程序
  7. TCP三次握手四次挥手(图解)
  8. java建立类的思想_JAVA类和对象创建
  9. 我去过细节印象最深的酒店
  10. 企业网站DDOS防护解决方案
  11. 【emWin】例程十:bmp图片显示
  12. 苹果电脑是“监狱”、弃用 Ubuntu,GNU 创始人斯托曼谈自由软件运动现状
  13. 红外遥控器-VS1838B/HS0038红外接收方案(包含原理图+PCB+BOM表+程序)
  14. 泰坦尼克数据集kaggle Titanic下载
  15. 透过CES看国产手机市场变动 “中华酷联”要调位
  16. 程序员为什么要学习数据库
  17. Python 五个知识点搞定作用域
  18. 如何在微信直接下载APP(iOS/Android)的解决方案
  19. Cortex-M3/M4芯片启动流程概括
  20. 很抱歉,EXCEL遇到错误,使其无法正常工作,因此需要关闭EXCEL。是否希望我们立即修复?...

热门文章

  1. 序列周期性与魔术(六)——魔术欣赏与解析续集
  2. mysql删除库_MySQL 删除数据库的两种方法
  3. CAD怎么输入多行文字?CAD多行文字输入步骤
  4. oracle存储过程for循环跳出循环,oracle跳出循环方法
  5. PHP投票系统如何防刷票
  6. 视频剪辑和特效需要学会用上哪些工具?
  7. OSChina 周五乱弹 —— 动弹的起源
  8. 使用poi根据模版生成word文档并转换成PDF文件
  9. 劳务派遣、人力资源外包公司到底有多赚钱
  10. 2015唯美说说心情句子