(高可用)一、LVM

一、LVM

  • 使用了内核模块:ip_vs
  • 实现了负载均衡

LVM实验一

  1. LVM三种策略
  • NAT: client->VS->RS->VS->client(数据原路返回)
  • TUNNEL: client->VS->RS->client(不需保证VS和RS在同一网段)
  • NAT: client->VS->RS->client(要保证VS和RS在同一网段,VS负责将目标MAC替换为相应的RS的MAC,不做ARP解析)
  1. 配置rhel8.6源主机
  • 关闭图形化界面
  • 配置虚拟网卡的NAT,DHCP
  • 配置本地yum源,使用rhel8.6的iso
  • 开机自动挂载镜像
vim /etc/fstab
/root/rhel.iso /iso
  • 记得关闭防火墙和selinux
  • 克隆3台主机 192.168.147.129/130/131
  1. 实验环境搭建
  • 配置3台主机
  • 修改主机名hostnamectl
  • 修改hosts,互相解析
  • 安装相应的软件
# 129作为调度器,安装ipvsadm
yum install -y ipvsadm

# 130、131安装httpd设置开机自启
yum install -y httpd
systemctl enable --now httpd

  1. 配置负载均衡
  • 设置VIP地址:192.168.147.100
  • 129上:100/24
  • 130/131上:100/32,表示并非真实存在,防止数据包来了被直接丢弃
  • 129上配置ipvsadm策略
ipvsadm -A -t 192.168.147.100:80 -s rr
ipvsadm -a -t 192.168.147.100:80 -r 192.168.147.130 -g
ipvsadm -a -t 192.168.147.100:80 -r 192.168.147.131 -g
  • 此时因为130/131上都有IP地址192.168.147.100,在同一网段冲突,此时调度器并没有起作用,需要在130/131上设置不对192.168.147.100地址的arp广播进行回应
# 删除server1上的arp缓存
arp -an
arp -d 192.168.147.100

# 在130/131上配置arptables
arptables -A INPUT -d 192.168.147.100 -j DROP
arptables -A OUTPUT -s 192.168.147.100 -j mangle --mangle-ip-s 192.168.147.130

# 保存arptables策略,并设置开机自启
arptables-save > /etc/sysconfig/arptables
systemctl restart arptables.service
arptables -F
arptables -nL
systemctl enable arptables.service

LVM实验二

  • 当RS挂掉的时候,LVM调度器需要检测到并处理故障
  • 当LVM本身挂掉(双机热备)
  1. Keepalived-LVS管理软件
  • 健康检测:支持4/7检测
  • 主备冗余:采用VRRP协议的HeartBeat
  • 配置文件:keepalived -f /etc/keepalived/keepalived.conf
  • 使用了keepalived后,不需要再用ipvsadm配置策略
  1. 实验环境搭建
  • 配置主从两个调度器,两台服务器
# 129作为主调度器、132作为备份调度器,安装ipvsadm、keepalived
yum install -y ipvsadm
yum install -y keepalived

# 130、131安装httpd设置开机自启
yum install -y httpd
systemctl enable --now httpd
  1. 修改keepalived配置文件
  • /etc/keepalived/keepalived.conf
! Configuration File for keepalived

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 {
    state MASTER  # 当前服务器的身份
    interface ens160  # 指明网卡
    virtual_router_id 51 # 这个一般不用修改,除非同一网段有多个采用双机热备的集群
    priority 100  # 当前服务器的优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.147.100  # vs的地址
    }
}

virtual_server 192.168.147.100 80 { # 配置vs
    delay_loop 6
    lb_algo rr  # 调度算法
    lb_kind DR  # 连接方式DR、NAT、TUNNEL
    # persistence_timeout 50  # 用于需要有保持连接需求的情形
    protocol TCP

    real_server 192.168.147.130 80 {  # 配置rs
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.147.131 80 {
        weight 1
        TCP_CHECK{
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

  • 设置开机keepalived自启
systemctl enabled --now keepalived
  • 出现报错(网卡名修改错了)
-- Unit keepalived.service has begun starting up.
Jan 09 03:23:54 server1 Keepalived[2445]: Starting Keepalived v2.1.5 (07/13,2020)
Jan 09 03:23:54 server1 Keepalived[2445]: Running on Linux 4.18.0-372.9.1.el8.x86_64 #1 SMP Fri Apr 15 22:12:19 EDT 2022 (built for Linux 4.18.0)
Jan 09 03:23:54 server1 Keepalived[2445]: Command line: '/usr/sbin/keepalived' '-D'
Jan 09 03:23:54 server1 Keepalived[2445]: Opening file '/etc/keepalived/keepalived.conf'.
Jan 09 03:23:54 server1 Keepalived[2445]: (/etc/keepalived/keepalived.conf: Line 13) number '0' outside range [1e-06, 4294]
Jan 09 03:23:54 server1 Keepalived[2445]: (/etc/keepalived/keepalived.conf: Line 13) vrrp_garp_interval '0' is invalid
Jan 09 03:23:54 server1 Keepalived[2445]: (/etc/keepalived/keepalived.conf: Line 14) number '0' outside range [1e-06, 4294]
Jan 09 03:23:54 server1 Keepalived[2445]: (/etc/keepalived/keepalived.conf: Line 14) vrrp_gna_interval '0' is invalid
Jan 09 03:23:54 server1 systemd[1]: keepalived.service: Can't open PID file /var/run/keepalived.pid (yet?) after start: No such file or directory
Jan 09 03:23:54 server1 Keepalived[2446]: NOTICE: setting config option max_auto_priority should result in better keepalived performance
Jan 09 03:23:54 server1 Keepalived[2446]: Starting Healthcheck child process, pid=2447
Jan 09 03:23:54 server1 Keepalived[2446]: Starting VRRP child process, pid=2448
Jan 09 03:23:54 server1 Keepalived_healthcheckers[2447]: Opening file '/etc/keepalived/keepalived.conf'.
Jan 09 03:23:54 server1 Keepalived_healthcheckers[2447]: Initializing ipvs
Jan 09 03:23:54 server1 Keepalived_healthcheckers[2447]: Gained quorum 1+0=1 <= 2 for VS [192.168.147.100]:tcp:80
Jan 09 03:23:54 server1 Keepalived_healthcheckers[2447]: Activating healthchecker for service [192.168.147.130]:tcp:80 for VS [192.168.147.100]:tcp:80
Jan 09 03:23:54 server1 Keepalived_healthcheckers[2447]: Activating healthchecker for service [192.168.147.131]:tcp:80 for VS [192.168.147.100]:tcp:80
Jan 09 03:23:54 server1 Keepalived_vrrp[2448]: Registering Kernel netlink reflector
Jan 09 03:23:54 server1 Keepalived_vrrp[2448]: Registering Kernel netlink command channel
Jan 09 03:23:54 server1 Keepalived_vrrp[2448]: Opening file '/etc/keepalived/keepalived.conf'.
Jan 09 03:23:54 server1 Keepalived_vrrp[2448]: (/etc/keepalived/keepalived.conf: Line 19) WARNING - interface eth160 for vrrp_instance VI_1 doesn't exist
Jan 09 03:23:54 server1 Keepalived_vrrp[2448]: Non-existent interface specified in configuration
Jan 09 03:23:54 server1 Keepalived_vrrp[2448]: Stopped - used 0.000000 user time, 0.001017 system time
Jan 09 03:23:54 server1 Keepalived[2446]: pid 2448 exited with permanent error CONFIG. Terminating
Jan 09 03:23:54 server1 Keepalived[2446]: CPU usage (self/children) user: 0.000000/0.000000 system: 0.001513/0.001988
Jan 09 03:23:54 server1 Keepalived[2446]: Stopped Keepalived v2.1.5 (07/13,2020)
Jan 09 03:23:54 server1 Keepalived_healthcheckers[2447]: Shutting down service [192.168.147.130]:tcp:80 from VS [192.168.147.100]:tcp:80
Jan 09 03:23:54 server1 Keepalived_healthcheckers[2447]: Shutting down service [192.168.147.131]:tcp:80 from VS [192.168.147.100]:tcp:80
Jan 09 03:23:54 server1 Keepalived_healthcheckers[2447]: Stopped - used 0.000000 user time, 0.001128 system time
Jan 09 03:25:24 server1 systemd[1]: keepalived.service: start operation timed out. Terminating.
Jan 09 03:25:24 server1 systemd[1]: keepalived.service: Failed with result 'timeout'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- The unit keepalived.service has entered the 'failed' state with result 'timeout'.
Jan 09 03:25:24 server1 systemd[1]: Failed to start LVS and VRRP High Availability Monitor.
-- Subject: Unit keepalived.service has failed
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- Unit keepalived.service has failed.
  • 安装mailx用于接收报警邮件
yum install -y mailx
  • 正常启动keepalived之后,又出现问题
访问192.168.147.100时得不到响应,但是访问192.168.147.130和192.168.147.131都可以得到响应
发现是因为重启了虚拟机,原来130和131网卡ens160上配置的地址192.168.147.100都没了
  • 测试
[root@rhel86 ~]# for i in {1..5};do curl 192.168.147.100;done
server2
server3
server2
server3
server2

再分别挂掉RS和LVM进行测试

  • iptables的优先级比LVM要高
# 在LVM主机上的iptables(防火墙)添加了策略后,比如drop掉所有进来的数据包
iptables -A INPUT -j DROP

# 此时访问192.168.147.100就没有响应了

LVS缺点

  • LVS在大规模网络中应用存在不足
  • 缺少TCP标志位和对DDOS攻击防御
  • 性能无法线性扩展

DR工作模式的缺点

  • RS和VS必须工作在同一网段
  • RS上也有VIP,客户端可以跳过VS直接访问

NAT工作模式的缺点

  • RS和路由器的网络配置复杂

TUNNEL工作模式的缺点

  • RS的配置复杂(要支持IPIP模块)
  • RS上也有VIP,客户端可以跳过VS直接访问

新转发模式FULLNAT

  • 阿里开发
  • 主要思想:引入local address(lip),将原来的cip->rip转换为cip->lip->rip
  • 实现LVS-RS的跨VLAN通讯,并且INPUT
    和OUTPUT数据流都通过LVS
  • SYSPROXY:synflood攻击防御模块
  • TCP标志位和DDOS攻击防御策略
  • Cluster部署模式
  • ipvsadm默认不支持,需要重新编译内核

高可用存在问题

  • LVM之间的session同步问题
    • 共享一个全局session
    • 路由器上的等价路由(VIP在路由器上)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值