keepalive+nginx/haproxy+keepalive 高可用

keepalive:

调度器的高可用

vip地址在主备之间的切换,主在工作时,vip地址只在主;主停止工作,vip飘到备上。

在主备的优先级不变的情况下,主恢复工作,vip会飘会主服务器

1、配优先级

2、配vip和真实服务器

3、主备的id要一致

4、主备的id要区分

keepalive是专门为lvs打造的,但是不是为lvs专门服务

keepalive也可以使用nginx、haproxy

keepalive+nginx实现高可用

复制代码
vrrp_script check—_nginx {
script "/opt/check nginx.sh"
#调用脚本内容,检测nginx的状态
interval 5
#检测的时间是5秒一次
}
复制代码
[root@nginx1 keepalived]# vim keepalived.conf 
​
! Configuration File for keepalived
​
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_01
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_iptables
}
   vrrp_script check—_nginx {
     script "/opt/check nginx.sh"
      interval 5
}
​
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 120
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       192.168.65.100
    }
    track_script {
    check_nginx
}
​
复制代码
[root@nginx1 opt]# vim check_nginx.sh
​
#!/bin/bash
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
   systemctl stop keepalived
fi
复制代码
[root@nginx2 keepalived]# vim keepalived.conf 
​
! Configuration File for keepalived
​
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_02
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_iptables
}
   vrrp_script check—_nginx {
     script "/opt/check_nginx.sh"
      interval 5
}
​
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       192.168.65.100
    }
    track_script {
    check_nginx
}

面试题

脑裂是什么

HA 高可用架构中的一个特殊现象,只要使用vp地址代理的冗余模式的高可用。都有可能出现脑裂的问题。 主和备同时都有yip地址。 主和备无法确定各自的身份,同时出现了vp地址,两边起来了,但是两边都无法使用。

原因:

1、keepalive的配置文件问题

2、心跳线(网线)断了 老化

3、网卡处理问题(硬件问题),IP地址配置冲突

4、防火墙的策略,iptables的策略,屏蔽了组播的地址广播。屏蔽了vrrp协议的报文

5、两台服务器的时间不同步也可能导致

6、其他的服务配置对心跳线的检测造成了干扰

怎么解决

1、检查keepalive的配置文件①名称不能相同 ②优先级不能相同 ③接口要相同 ④调用的文件权限不足 ⑤调整连接超时的时间(太长太短都不行)⑥查看日志

2、换根新网线

3、换台服务器,重新分配ip地址

4、关闭防火墙和安全机制,iptables -F;或者在配置文件中加入"vrrp_iptables"来清楚安全机制带来的阻碍

5、将两台服务器的时间调整到同步

6、更改其他服务配置

nginx Ivs Ivs+keepalivekeepalive单独配置

web集群

Haporxy负载均衡:

nginx 四层转发(ip+端口) 七层代理

lvs四层转发 内核态 七层用户态

Haporxy 四层转发 七层转发

Haporxy的作用和使用场景

场景

1、用于高并发的web场景,可以支持一万个以上的并发请求,高性能的tcp和http的负载均衡

工作原理:

提高一个代理地址,访问集群

作用

1、进行四层和七层转发

2、支持https

3、haporxy本身不自带缓存功能。请求当中添加cookie,使用缓存

4、支持主备切换(keepalive)

特点

1、可靠性高,稳定性好

2、可以同时维护40000-50000个并发,单位时间内可以处理最大请求数20000个(3秒)

3、支持负载均衡算法,虽然不带缓存,但是可以支持会话保持

算法

1、rr

2、wrr

3、leastconn

安装haproxy 解压

复制代码
[root@test-41 opt]# tar -xf haproxy-1.5.19.tar.gz 
[root@test-41 opt]# uname -r
[root@test-41 haproxy-1.5.19]# make TARGET=linux2628 ARCH=x86_64
#target使用的版本要大于linux.2.60以上的版本
[root@test-41 haproxy]# make install
[root@test-41 haproxy]# mkdir /etc/haproxy
[root@test-41 opt]# cd examples/
[root@test-41 examples]# cp haproxy.cfg /etc/haproxy/

配置haproxy.cfg

复制代码
[root@test-41 haproxy]# vim haproxy.cfg 
# this config needs haproxy-1.1.28 or haproxy-1.2.1
​
global
        log /dev/log    local0 info
        log /dev/log    local1 notice
        #log loghost    local0 info
        maxconn 4096
        #最大连接数,推荐使用1024
        #chroot /usr/share/haproxy
        uid 99
        gid 99
        daemon
        nbproc 4
        #haproxy的并发的线程数,设置的数量最好是cpu的两倍或者和cpu保持一致
        #debug
        #quiet
​
defaults
#默认参数配置,包含连接配置监听配置,代理配置
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        #检查节点服务器3次,连续3次失败就是节点服务器不可用
        redispatch
        #服务器负载很高时,自动结束当前队列中处理比较久的连接
        maxconn 2000
        #最大连接数这个数可以和global中保持一致可以比他小不能大于他,一般一致
        #contimeout     5000
        #clitimeout     50000
        #srvtimeout     50000
        timeout http-request 10s
        #http请求的默认超时时间
        timeout queue 1m
        #在队列当中请求超时的时间
        timeout connect 10s
        #连接超时时间
        timeout client 1m
        #客户端的超时时间
        timeout server 1m
        #服务端的超时时间
        timeout http-keep-alive 10s
        #默认长连接的超时时间
        timeout check 10s
        #检查后端服务器的超时时间
七层配置
#转发请求的设置,即可以是四层也可以是七层
listen  xy102 0.0.0.0:80
        option httpchk GET /index.html
        balance static-r
#轮询算法
        server  rs01 192.168.65.10 check inter 2000 fall 3 weight 2
        server  rs02 192.168.65.20 check inter 2000 fall 3 weight 3
#server指定真实服务器rs01 自定后台服务器名称 check inter 2000 启动对后端服务器进行检查,检查的间隔时间2000毫秒
​
四层配置
frontend test
bind *:80
mode tcp
default_backend test
​
backend test
mode tcp
balance roundrobin
server server1 192.168.65.10:80 check inter 2000 fall 3 weight 2
server server2 192.168.65.20:80 check inter 2000 fall 3 weight 2
​

对配置文件进行复制、赋权、添加服务、创建软连接

复制代码
[root@test-41 examples]# cp haproxy.init /etc/init.d/haproxy    #复制
[root@test-41 examples]# chmod 777 /etc/init.d/haproxy          #赋权
[root@test-41 examples]# chkconfig --add /etc/init.d/haproxy    #添加到管理服务
[root@test-41 examples]# ln -s /usr/local/sbin/haproxy /usr/sbin/  #创建软连接
​

结果

复制代码
[root@test-41 haproxy]# curl 192.168.65.41
This is nginx2
[root@test-41 haproxy]# curl 192.168.65.41
This is nginx1
​

作业 keepalive+haproxy实现高可用

复制代码
keepalive+haproxy高可用

haproxy地址192.168.65.41  虚拟地址vip 192.168.65.100
​
rs1   keepalive  192.169.65.10
​
rs2   keepalive  192.168.65.20
​

调度器

复制代码
[root@test-41 haproxy]# vim haproxy.cfg 
​
# this config needs haproxy-1.1.28 or haproxy-1.2.1
​
global
        log /dev/log    local0 info
        log /dev/log    local1 notice
        #log loghost    local0 info
        maxconn 4096
        #最大连接数,推荐使用1024
        #chroot /usr/share/haproxy
        uid 99
        gid 99
        daemon
        nbproc 4
        #haproxy的并发的线程数,设置的数量最好是cpu的两倍或者和cpu保持一致
        #debug
        #quiet
​
defaults
#默认参数配置,包含连接配置监听配置,代理配置
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        #检查节点服务器3次,连续3次失败就是节点服务器不可用
        redispatch
        #服务器负载很高时,自动结束当前队列中处理比较久的连接
        maxconn 2000
        #最大连接数这个数可以和global中保持一致可以比他小不能大于他,一般一致
        #contimeout     5000
        #clitimeout     50000
        #srvtimeout     50000
        timeout http-request 10s
        #http请求的默认超时时间
        timeout queue 1m
        #在队列当中请求超时的时间
        timeout connect 10s
        #连接超时时间
        timeout client 1m
        #客户端的超时时间
        timeout server 1m
        #服务端的超时时间
        timeout http-keep-alive 10s
        #默认长连接的超时时间
        timeout check 10s
        #检查后端服务器的超时时间
​
#转发请求的设置,即可以是四层也可以是七层
listen  xy102 0.0.0.0:80
        option httpchk GET /index.html
        balance static-rr
#轮询算法
        server  rs01 192.168.65.10 check inter 2000 fall 3 weight 2
        server  rs02 192.168.65.20 check inter 2000 fall 3 weight 3
#server指定真实服务器rs01 自定后台服务器名称 check inter 2000 启动对后端服务器进行检查,检查的间隔时间2000毫秒
​
四层
#frontend test
#bind *:80
#mode tcp
#default_backend test
​
#backend test
#mode tcp
#balance roundrobin
#server server1 192.168.65.10:80 check inter 2000 fall 3 weight 2
#server server2 192.168.65.20:80 check inter 2000 fall 3 weight 2
​

rs 1

复制代码
[root@nginx1 keepalived]# vim keepalived.conf 
​
! Configuration File for keepalived
​
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_01
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_iptables
}
   vrrp_script check_nginx {
     script "/opt/check_nginx.sh"
      interval 5
}
​
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 120
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       192.168.65.100
    }
    track_script {
    check_nginx
}
}
​

rs 2

复制代码
[root@nginx2 keepalived]# vim keepalived.conf 
​
! Configuration File for keepalived
​
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_02
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_iptables
}
   vrrp_script check_nginx {
     script "/opt/check_nginx.sh"
      interval 5
}
​
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       192.168.65.100
    }
    track_script {
    check_nginx
}
}
​

结果

复制代码
访问虚拟地址就是访问哪个优先级高访问哪个
[root@test-42 ~]# curl 192.168.65.100
This is nginx1
[root@test-42 ~]# curl 192.168.65.100
This is nginx1
[root@test-42 ~]# curl 192.168.65.100
This is nginx1
​
访问haproxy就是keepalive的nginx来回轮询
[root@test-42 ~]# curl 192.168.65.41
This is nginx2
[root@test-42 ~]# curl 192.168.65.41
This is nginx1
[root@test-42 ~]# curl 192.168.65.41
This is nginx2
[root@test-42 ~]# curl 192.168.65.41
This is nginx1
​
相关推荐
蜜獾云4 分钟前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
小屁不止是运维5 分钟前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解
linux·运维·服务器·nginx·中间件·架构
Hacker_Oldv10 分钟前
WPS 认证机制
运维·服务器·wps
bitcsljl18 分钟前
Linux 命令行快捷键
linux·运维·服务器
ac.char21 分钟前
在 Ubuntu 下使用 Tauri 打包 EXE 应用
linux·运维·ubuntu
Youkiup1 小时前
【linux 常用命令】
linux·运维·服务器
qq_297504611 小时前
【解决】Linux更新系统内核后Nvidia-smi has failed...
linux·运维·服务器
_oP_i1 小时前
.NET Core 项目配置到 Jenkins
运维·jenkins·.netcore
weixin_437398211 小时前
Linux扩展——shell编程
linux·运维·服务器·bash
小燚~1 小时前
ubuntu开机进入initramfs状态
linux·运维·ubuntu