keepalived

目录

keepalived概述

vrrp工作原理

keepalived体系主要的模块及其作用

模块

core模块

vrrp模块

check模块

作用

keepalived工作原理

keepalived和lvs-DR实验


keepalived概述

keepalived高可用应用(健康检查,故障切换)   节点服务器高可用HA

底层基于VRRP协议实现的高可用

vrrp工作原理

通过在冗余网关间共享虚拟MAC和IP地址,保证数据转发时并不是转给某一个具体网关的IP,而是把数据转发给虚拟网关的IP,因此,不论哪一个路由器成为主路由,都不会影响数据通信。

通过组播协议对数据端口进行监控,一旦检测数据转发的端口坏掉,主路由器会停发HELLO包,备路由器提升为主路由,实现数据的稳定高效转发。

同一VRRP组中的路由器具有主控路由器和备份路由器两种互斥的角色。主控路由器优先级较高,负责处理网络流量,备份路由器处于待命状态。如果主控路由器发生故障,备份路由器会在极短的时延后自动升级为主控路由器,而且无需改变IP地址和MAC地址。

keepalived体系主要的模块及其作用

模块

core模块

leepalived核心,负责主进程启动,维护并且调用配置文件去加载和解析

vrrp模块

实现vrrp协议

check模块

负责健康检查,检查模块常见端口,url

作用

故障自动切换

实现lvs群集中节点健康检查

节点服务器高可用性  HA

keepalived工作原理

keepalived高可用之间通过vrrp进行通行,vrrp是通过竞选来确认主备,主优先获得所有资源,备节点处于等待状态

当主挂了的时候,备节点就会接管主节点资源,然后顶替主节点对外提高服务

在keepalived服务之间,只有作为主的服务器会一直发送vrrp广播包,告诉备我还活着,此时备不会去抢占主,当主不可用时,即备要监控听不到主发送的广播包时,它就会启动相关服务去接管资源,保证业务连续,接管速度最快小于1秒

keepalived和lvs-DR实验

使用LVS-DR+keepalived的抢占模式实现高可用负载群集

Web 服务器1:20.0.0.101(VIP 20.0.0.10)
Web 服务器2:20.0.0.102(VIP 20.0.0.10)

NFS 共享存储器:20.0.0.103

LVS+keepalived 主负载调度器:20.0.0.104(VIP 20.0.0.10)

LVS+keepalived 备负载调度器:20.0.0.105(VIP 20.0.0.10)

网关/路由器:20.0.0.2
客户端:192.168.116.50


一、配置NFS共享存储
systemctl stop firewalld.service 
systemctl disable firewalld.service 
setenforce 0

 
yum -y install nfs-utils rpcbind
mkdir /opt/nfs/server1 /opt/nfs/server2
chmod -R 777 /opt/nfs
 
vim /etc/exports
/opt/nfs 20.0.0.0/24(rw,sync)
/opt/nfs/server1 20.0.0.0/24(rw,sync)
/opt/nfs/server2 20.0.0.0/24(rw,sync)
 
systemctl restart rpcbind.service
systemctl restart nfs.service

检查发布的共享策略
showmount -e
在共享目录中添加web测试页面:
mkdir /opt/nfs/server1 server2
echo this is web-01 ! >>/opt/nfs/server1/index.html
echo this is web-02 ! >>/opt/nfs/server2/index.html
检查一下是否写入成功:
cat /opt/nfs/server1/index.htmlcat 
cat /opt/nfs/server2/index.html

二.配置节点web服务(20.0.0.101 20.0.0.102两台的配置相同)
【安装 Nginx 服务】
1、安装依赖包
yum -y install pcre-devel zlib-devel gcc gcc-c++ make

2、创建运行用户
useradd -M -s /sbin/nologin nginx

3、编译安装
cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/

cd nginx-1.22.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make -j 4 && make install

4、优化路径
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

5、添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

[Unit]:这个部分定义了服务单元的元数据。
Description: 描述该服务单元的信息,描述为"nginx"。
After: 定义服务单元所依赖的其他单元,这里表示服务需要在网络加载完成之后启动。

[Service]:这个部分定义了服务的运行配置。
Type: 指定服务的类型,这里是forking,表示服务是一个后台进程(通常是fork出子进程)。
PIDFile: 指定保存主进程ID的文件路径,Nginx将会把主进程ID写入这个文件,以便Systemd可以追踪和管理进程。
ExecStart: 指定启动服务的命令。这里是启动Nginx的命令/usr/local/nginx/sbin/nginx。
ExecReload: 指定重新加载配置的命令。当执行此命令时,Systemd将发送HUP信号给主进程,Nginx将重新加载配置文件。
ExecStop: 指定停止服务的命令。当执行此命令时,Systemd将发送QUIT信号给主进程,Nginx将优雅地停止服务。
PrivateTmp: 将此项设置为true,表示为服务提供独立的临时目录。

[Install]:这个部分定义了服务的安装配置。
WantedBy: 指定服务所属的目标(target),这里是multi-user.target,表示服务在多用户模式下启动。

chmod 777 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

查看nginx服务是否启动:

netstat -antp | grep 80

将网站根目录挂载到各自的共享目录
首先打开nfs服务:
systemctl restart rpcbind.service
systemctl restart nfs.service

mount 20.0.0.103:/opt/nfs/server1 /usr/local/nginx/html/
mount 20.0.0.103:/opt/nfs/server2 /usr/local/nginx/html/

在web01 -02上查看是否共享成功

cat /usr/local/nginx/html/index.html
cat /usr/local/nginx/html/index.html

设置回环网卡,虚拟ip(web-01 web-02都要设置)

cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=20.0.0.10
NETMASK=255.255.255.255
ONBOOT=yes

~    

ifup lo:0  

配置回环网卡完成后
ifconfig 查看一下是否配置成功

添加静态路由(将数据包封锁在回环网卡中)

#临时配置
route add -host 20.0.0.10 dev lo:0
 
#永久配置
vim /etc/rc.local
/sbin/route add -host 20.0.0.10 dev lo:0
chmod +x /etc/rc.d/rc.local

调整内核的ARP响应参数(阻止更新VIP的MAC地址,防止发生冲突)

vim /etc/sysctl.conf
#添加
net.ipv4.conf.lo.arp_ignore = 1        
net.ipv4.conf.lo.arp_announce = 2    
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
#加载配置文件并查看
sysctl -p

三、配置主备LVS+keepalived负载调度器(keepalived-01 ;keepalived-02)

关闭防火墙下载keepalived和ipvsadm,并修改内核参数

systemctl stop firewalld.service 。
systemctl disable firewalld.service 
setenforce 0


modprobe ip_vs
yum -y install ipvsadm keepalived
 
vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
 
sysctl -p
修改主负载器配置文件:
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak  #改配置文件前先备份
vim keepalived.conf

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   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_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass abc123
    }
    virtual_ipaddress {
        20.0.0.10
    }
}

virtual_server 20.0.0.10 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 10
    protocol TCP

    real_server 20.0.0.101 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
}
}
real_server 20.0.0.102 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 3
              nb_get_retry 3
                delay_before_retry 3
}
}
}
修改备负载器配置文件(与主配置一致,只需修改以下部分) :

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   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_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass abc123
    }
    virtual_ipaddress {
        20.0.0.10
    }
}

virtual_server 20.0.0.10 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 10
    protocol TCP

    real_server 20.0.0.101 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
}
}
real_server 20.0.0.102 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 3
              nb_get_retry 3
 delay_before_retry 3
}
}
}
启动keepalived再启动ipvsadm(ipvsadm会自动加载keepslived中的配置:

systemctl restart keepalived.service
ipvsadm-save > /etc/sysconfig/ipvsadm
 
#启动ipvsadm (分别添加主备负载均衡器VIP 的分发策略)
systemctl restart ipvsadm.service

ipvsadm -C   ##清空规则
ipvsadm -A -t 20.0.0.10:80 -s rr
ipvsadm -a -t 20.0.0.10:80 -r 20.0.0.101:80 -g
ipvsadm -a -t 20.0.0.10:80 -r 20.0.0.102:80 -g


查看主负载和副负载均衡器:
ipvsadm -ln

访问:20.0.0.10
可以将主负载器服务停止或关机(模拟宕机),继续访问 20.0.0.10查看主备切换是否正常

你可能感兴趣的:(网络)