一、集群介绍
集群,简单地说是指一组(若干个)相互独立的计算机,利用高速通信网络组成一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。
集群的特点:高性能(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
此时访问的是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 ~]#
刷新浏览器:
此时访问的是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 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可有可无
修改网卡为仅主机模式:
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