Linux学习笔记——企业-1.高可用与负载均衡集群

目录

一、LVS负载均衡

1.什么是LVS 

2.负载均衡的含义

3.LVS的工作模式

4.实验搭建

(1)LVS调度器的搭建

(2)realserver服务搭建

 二、keepalivede高可用

1.两个问题

2.什么是高可用集群

3.问题解决

4.配置

三、nginx 7层负载均衡

1.nginx的部署

2.平滑升级 


一、LVS负载均衡

  

环境:rhel7.6 (selinux and firewalld is disabled)

准备:

测试机LVS调度器realserver1realserver2
server4server1server2server3

1.什么是LVS 

LVS(Linux Virtual Server),即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立。

2.负载均衡的含义

负载均衡(Load Balance),就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,从而提高网络的数据处理能力。

3.LVS的工作模式

LVS包括三种工作模式包括:1.NAT、2.TUN(隧道)、3.DR(路由直连)

路径模式:

NAT:client-->LVS-->RS(realservers)-->LVS-->client

TUN:client-->LVS-->RS-->client

DR:client-->LVS-->RS-->client (需要在同一个网段内)

4.实验搭建

(1)LVS调度器的搭建

yum install -y ipvsadm           #安装软件
ip addr add IP/24 dev ens33      #添加VIP地址,需要确保IP地址没有被占用

编写LVS策略:

ipvsadm -A -t 192.168.56.200:80 -s rr                       # rr通过轮询的方式依次呼叫后方主机
ipvsadm -a -t 192.168.56.200:80 -r 192.168.56.164:80 -g     # realserver1
ipvsadm -a -t 192.168.56.200:80 -r 192.168.56.165:80 -g     # realserver2
ipvsadm -ln                                                 # 查看策略信息

(2)realserver服务搭建

yum install -y httpd
systemctl  enable --now httpd
echo server2 > /var/www/html/index.html
#server3与server2保持一致
realserver上安装arptables软件,屏蔽ARP:
yum install -y arptables
arptables -A INPUT -d 192.168.56.200 -j DROP
arptables -A OUTPUT -s 192.168.56.200 -j mangle --mangle-ip-s 192.168.56.164
# 保存策略,这样开机后策略不会被清除掉
arptables-save  > /etc/sysconfig/arptables
systemctl enable arptables.service
# server3也需要做相同的操作

工作原理:这里我们分别搭建了中间的调度器,以及后端的真实主机用来模仿日常客户端在访问过程中如何实现负载均衡,当用户发出请求时,调度器会对用户请求响应,并通过轮询的方式将信息传递给后面的真实主机,由后端真实主机直接向客户端展示请求的内容。

测试结果:

 二、keepalivede高可用

1.两个问题

LVS虽然实现了负载均衡但是同样的也会出现两个问题,即(1)如果后端的realserver down了怎么办?(2)调度器本身down掉了怎么办?

首先来看第一个问题,当我们停掉后端server2的apache后,可以看到调度器这里仍然是正常工作的,同时客户端这边会在访问server2时会出现访问不到的情况,这对用户的体验其实是非常不好的。

 第二个问题,调度器本身出现问题后,同样的客户端在访问的时候也会出现问题

2.什么是高可用集群

高可用集群,英文原文为High Availability Cluster,简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源。这里引入一个概念“双机热备”:也就是两个节点的高可用集群,如果一台服务器出现故障时,可由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续对外提供服务。

3.问题解决

这里通过keepalived一方面可以提供健康检测,对后端的主机进行检测,另一方面,提供LVS冗余,通过心跳检测当主调度器停止后,由备用调度器进行补充。

4.配置

master

backup

realserver1

realserver2

server1

server4

server2

server3

yum install -y keepalived
vim /etc/keepalived/keepalived.conf

master配置: 

global_defs {
   notification_email {
        root@localhost				#邮箱
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1		    #邮件服务器
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
#   vrrp_strict						#必须注释
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {				#vrrp高可用
    state MASTER					#master状态
    interface ens33					#通信接口,与主机实际接口名称相同
    virtual_router_id 51			#VRID master和backup保持一致
    priority 100					#优先级
    advert_int 1					#心跳频率
    authentication {				#认证方式
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {				#lvs vip地址
        192.168.10.200
    }
}

virtual_server 192.168.10.200 80 {	#LVS虚拟服务
    delay_loop 6					#对rs的健康检测频率
    lb_algo rr						#调度算法
    lb_kind DR						#lvs工作模式
    #persistence_timeout 50			#持久连接
    protocol TCP

    real_server 192.168.10.151 80 {	#rs定义
        weight 1					#权重
        TCP_CHECK {					#rs检测方式
            connect_timeout 3
            delay_before_retry 3
        }
    }

    real_server 192.168.10.152 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            delay_before_retry 3
        }
    }
}

backup配置:

global_defs {
   notification_email {
        root@localhost				#邮箱
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1		    #邮件服务器
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
#   vrrp_strict						#必须注释
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {				#vrrp高可用
    state  BACKUP					#mbackup状态
    interface ens33					#通信接口,与主机实际接口名称相同
    virtual_router_id 51			#VRID master和backup保持一致
    priority 50					    #优先级
    advert_int 1					#心跳频率
    authentication {				#认证方式
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {				#lvs vip地址
        192.168.10.200
    }
}

virtual_server 192.168.10.200 80 {	#LVS虚拟服务
    delay_loop 6					#对rs的健康检测频率
    lb_algo rr						#调度算法
    lb_kind DR						#lvs工作模式
    #persistence_timeout 50			#持久连接
    protocol TCP

    real_server 192.168.10.151 80 {	#rs定义
        weight 1					#权重
        TCP_CHECK {					#rs检测方式
            connect_timeout 3
            delay_before_retry 3
        }
    }

    real_server 192.168.10.152 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            delay_before_retry 3
        }
    }
}

 配置完成后需要重启服务,否则没有办法生效。配置完成后检测第一个问题,首先关闭server2上apache服务,此时客户端再访问时,调度器只会向server3调度,这样就解决了用户再访问过程中可能出现访问不到的情况。

问题二,当主调度器down掉后,可以看到server4作为备用调度器自动接管,server1的调度器的工作,从而继续实现负载均衡工作。 

而当server1恢复正常后,又会重新承担主调度器的工作,从而实现了双机热备。 

三、nginx 7层负载均衡

1.nginx的部署

# 1.安装软件依赖性
yum install -y gcc pcre-devel openssl-devel

# 2.nginx官网可以直接下载开源版本的压缩包
tar zxf nginx-1.22.0.tar.gz
cd nginx-1.22.0/
vim auto/cc/gcc
# debug
#CFLAGS="$CFLAGS -g"				#禁用debug,可以节省大量的空间

# 3.编译安装,可以根基需求自定义编译
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-threads --with-file-aio
make
make install

# 4.切换到安装完成后的目录
cd /usr/local/nginx

# 5.制作软链接
ln -s /usr/local/nginx/sbin/nginx  /usr/local/bin/

nginx -t				#检测语法
nginx					#启动服务
nginx -s reload			#重载服务
nginx -s stop			#停止服务

配置nginx启动文件 

vim /lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

systemctl daemon-reload  #重载脚本
systemctl enable --now nginx

此时表示nginx已经部署完成。

2.平滑升级 

# 1.从官网上可以下载到较新的版本
tar zxf nginx-1.22.1.tar.gz
cd nginx-1.22.1/
vim auto/cc/gcc
# debug
#CFLAGS="$CFLAGS -g"
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-threads --with-file-aio
make
make之后不要执行make install

# 2.在升级之前备份原程序
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
\cp -f objs/nginx /usr/local/nginx/sbin/
cd /usr/local/nginx/sbin/


# 3.查看当前nginx pid
ps ax |grep nginx
  7767 ?        Ss     0:00 nginx: master process /usr/local/nginx/sbin/nginx
  7768 ?        S      0:00 nginx: worker process

# 4.升级新程序
kill -USR2 7767
ps ax|grep nginx
  7767 ?        Ss     0:00 nginx: master process /usr/local/nginx/sbin/nginx
  7768 ?        S      0:00 nginx: worker process
 10572 ?        S      0:00 nginx: master process /usr/local/nginx/sbin/nginx
 10573 ?        S      0:00 nginx: worker process

此时访问还是老版本:

# 5.关闭原worker进程
kill -WINCH 7767
ps ax|grep nginx
  7767 ?        Ss     0:00 nginx: master process /usr/local/nginx/sbin/nginx
 10572 ?        S      0:00 nginx: master process /usr/local/nginx/sbin/nginx
 10573 ?        S      0:00 nginx: worker process

版本退回: 

\cp -f nginx.bak nginx
kill -HUP 7767
ps ax|grep nginx
  7767 ?        Ss     0:00 nginx: master process /usr/local/nginx/sbin/nginx
 10572 ?        S      0:00 nginx: master process /usr/local/nginx/sbin/nginx
 10573 ?        S      0:00 nginx: worker process
 10618 ?        S      0:00 nginx: worker process

老版本进程已经拉起来,但访问还是新版本:

kill -WINCH 10572
ps ax|grep nginx
  7767 ?        Ss     0:00 nginx: master process /usr/local/nginx/sbin/nginx
 10572 ?        S      0:00 nginx: master process /usr/local/nginx/sbin/nginx
 10618 ?        S      0:00 nginx: worker process

 此时版本回滚到刚开始安装的版本。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值