栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

keepalived高可用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

keepalived高可用

keepalived高可用

主服务器配置

//关闭防火墙和selinux
[root@master ~]# systemctl disable --now firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
[root@master ~]# setenforce 0

//安装keepalived
[root@master ~]# yum -y install keepalived

[root@master ~]# rpm -ql keepalived 
/etc/keepalived
/etc/keepalived/keepalived.conf		//配置文件
/etc/sysconfig/keepalived
/usr/bin/genhash
/usr/lib/systemd/system/keepalived.service	//服务控制文件
/usr/libexec/keepalived
/usr/sbin/keepalived

备服务器配置

//关闭防火墙和selinux
[root@slave ~]# systemctl disable --now firewalld.service
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@slave ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@slave ~]# setenforce 0

//安装keepalived
[root@slave ~]# yum -y install keepalived

主备服务器上安装httpd

主服务器

//安装httpd,创建测试页面
[root@master ~]# yum -y install httpd
[root@master ~]# echo 'master' > /var/www/html/index.html
[root@master ~]# systemctl start httpd
[root@master ~]# ss -anltu
Netid      State       Recv-Q      Send-Q           Local Address:Port           Peer Address:Port      
tcp        LISTEN      0           128                    0.0.0.0:22                  0.0.0.0:*         
tcp        LISTEN      0           128                          *:80                        *:*         
tcp        LISTEN      0           128                       [::]:22                     [::]:*         

备服务器

//安装httpd,创建测试页面
[root@slave ~]# yum -y install httpd
[root@slave ~]# echo 'slave' > /var/www/html/index.html
[root@slave ~]# systemctl start httpd
[root@slave ~]# ss -anltu
Netid      State       Recv-Q      Send-Q           Local Address:Port           Peer Address:Port      
tcp        LISTEN      0           128                    0.0.0.0:22                  0.0.0.0:*         
tcp        LISTEN      0           128                          *:80                        *:*         
tcp        LISTEN      0           128                       [::]:22                     [::]:*         

keepalived配置

主服务器配置

[root@master ~]# cd /etc/keepalived/
[root@master keepalived]# ls
keepalived.conf
[root@master keepalived]# cp keepalived.conf{,-bak}	//备份原文件
[root@master keepalived]# ls
keepalived.conf  keepalived.conf-bak
[root@master keepalived]# rm -rf keepalived.conf
[root@master keepalived]# vim keepalived.conf
[root@master keepalived]# cat keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lb01
}

vrrp_instance VI_1 {
    state MASTER
    interface ens160		//网卡名
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass wys123	//密码
    }
    virtual_ipaddress {
        192.168.237.250		//VIP
    }
}

virtual_server 192.168.237.250 80 {		//VIP加端口号
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.237.167 80 {	//主服务器IP
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.237.170 80 {	//备服务器IP
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

//启动keepalived
[root@master keepalived]# systemctl enable --now keepalived
Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service → /usr/lib/systemd/system/keepalived.service.

备服务器配置

[root@slave ~]# cd /etc/keepalived/
[root@slave keepalived]# cp keepalived.conf{,-bak}
[root@slave keepalived]# cat keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lb01
}

vrrp_instance VI_1 {
    state BACKUP		//修改为BACKUP,备份
    interface ens160
    virtual_router_id 51
    priority 90		//权重改成90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass wys123
    }
    virtual_ipaddress {
        192.168.237.250
    }
}

virtual_server 192.168.237.250 80 {		//VIP地址 和服务端口号
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.237.167 80 {		//主服务器
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.237.170 80 {		//备服务器
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
[root@slave keepalived]# systemctl enable --now keepalived
Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service → /usr/lib/systemd/system/keepalived.service.

查看VIP

//主服务器
[root@master ~]# ip a s ens160
2: ens160:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:50:0d:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.237.167/24 brd 192.168.237.255 scope global dynamic noprefixroute ens160
       valid_lft 1175sec preferred_lft 1175sec
    inet 192.168.237.250/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::cef:1b5b:1107:cf5d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

//备服务器
[root@slave ~]# ip a s ens160
2: ens160:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:cd:b3:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.237.170/24 brd 192.168.237.255 scope global dynamic noprefixroute ens160
       valid_lft 1151sec preferred_lft 1151sec
    inet6 fe80::cef:1b5b:1107:cf5d/64 scope link dadfailed tentative noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::7220:8af:6655:3c80/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

测试

//关闭主服务器上的keepalived
[root@master ~]# systemctl stop keepalived
[root@master ~]# ip a s ens160
2: ens160:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:50:0d:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.237.167/24 brd 192.168.237.255 scope global dynamic noprefixroute ens160
       valid_lft 1064sec preferred_lft 1064sec
    inet6 fe80::cef:1b5b:1107:cf5d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

//去备服务器查看,发现vip到备服务了说明是备服务器提供的服务
[root@slave ~]# ip a s ens160
2: ens160:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:cd:b3:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.237.170/24 brd 192.168.237.255 scope global dynamic noprefixroute ens160
       valid_lft 1055sec preferred_lft 1055sec
    inet 192.168.237.250/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::cef:1b5b:1107:cf5d/64 scope link dadfailed tentative noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::7220:8af:6655:3c80/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

此时访问网站是备服务器提供的服务

keepalived通过脚本来监控httpd负载均衡机的状态

主服务器编辑脚本

//创建第一个脚本
[root@master ~]# mkdir /scripts
[root@master ~]# cd /scripts/
[root@master scripts]# vim check_h.sh 
[root@master scripts]# cat check_h.sh 
#!/bin/bash
httpd_status=$(ps -ef|grep -Ev "httpd|$0"|grep 'bhttpdb'|wc -l)
if [ $httpd_status -lt 1 ];then
    systemctl stop keepalived
fi
[root@master scripts]# chmod +x check_h.sh 	//添加执行权限
[root@master scripts]# ll
总用量 4
-rwxr-xr-x. 1 root root 143 10月 22 10:16 check_h.sh

//创建第二个脚本
[root@master scripts]# vim notify.sh 
[root@master scripts]# cat notify.sh 
#!/bin/bash
VIP=$2
case "$1" in
  master)
        httpd_status=$(ps -ef|grep -Ev "grep|$0"|grep 'bhttpdb'|wc -l)
        if [ $httpd_status -lt 1 ];then
            systemctl start httpd
        fi
  ;;
  backup)
        httpd_status=$(ps -ef|grep -Ev "grep|$0"|grep 'bhttpdb'|wc -l)
        if [ $httpd_status -gt 0 ];then
            systemctl stop httpd
        fi
  ;;
  *)
        echo "Usage:$0 master|backup VIP"
  ;;
esac
[root@master scripts]# chmod +x notify.sh 
[root@master scripts]# ll
总用量 8
-rwxr-xr-x. 1 root root 143 10月 22 10:16 check_h.sh
-rwxr-xr-x. 1 root root 434 10月 22 10:18 notify.sh

备服务器编辑脚本

[root@slave ~]# mkdir /scripts

[root@master scripts]# scp notify.sh root@192.168.237.170:/scripts		//拷贝主服务器脚本文件到备服务器
root@192.168.237.170's password: 
notify.sh                                                             100%  434   337.2KB/s   00:00    

[root@slave ~]# cd /scripts/
[root@slave scripts]# ll
总用量 4
-rwxr-xr-x. 1 root root 434 10月 22 10:21 notify.sh

配置keepalived加入监控脚本的配置

配置主服务器的keepalived

//前面手动验证了一次VIP是否会转移到备服务器,此时VIP在备服务器上,开启主服务器上keepalived让VIP重新回到主服务器
[root@master ~]# systemctl start keepalived.service 
[root@master ~]# ip a s ens160
2: ens160:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:50:0d:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.237.167/24 brd 192.168.237.255 scope global dynamic noprefixroute ens160
       valid_lft 1467sec preferred_lft 1467sec
    inet 192.168.237.250/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::cef:1b5b:1107:cf5d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

//编辑主服务的keepalived配置文件
[root@master ~]# vim /etc/keepalived/keepalived.conf
[root@master ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lb01
}

vrrp_script httpd_check {    //添加以下4行
    script "/scripts/check_h.sh"
    interval 1
    weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass wys123
    }
    virtual_ipaddress {
        192.168.237.250
    }
    track_script {		//添加以下两行内容,引用上面定义的脚本
           httpd_check
    }																				//添加以下两行内容
    notify_master "/scripts/notify.sh master 192.168.237.250"
    notify_backup "/scripts/notify.sh backup 192.168.237.250"
}

virtual_server 192.168.237.250 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.237.167 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.237.170 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

//重启服务
[root@master ~]# systemctl restart keepalived.service

配置备服务器的keepalived

[root@slave ~]# vim /etc/keepalived/keepalived.conf
[root@slave ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lb01
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass wys123
    }
    virtual_ipaddress {
        192.168.237.250
    }																		//添加以下两行内容
    notify_master "/scripts/notify.sh master 192.168.237.250"
    notify_backup "/scripts/notify.sh backup 192.168.237.250"
}

virtual_server 192.168.237.250 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.237.167 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.237.170 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
[root@slave ~]# systemctl restart keepalived.service 

验证

//模拟关闭主上面的httpd,发现keepalived服务已经自动关闭了
[root@master ~]# systemctl stop httpd
[root@master ~]# ss -anltu
Netid      State       Recv-Q      Send-Q           Local Address:Port           Peer Address:Port      
tcp        LISTEN      0           128                    0.0.0.0:22                  0.0.0.0:*         
tcp        LISTEN      0           128                       [::]:22                     [::]:*         

[root@master ~]# ip a s ens160		//VIP已经转移
2: ens160:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:50:0d:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.237.167/24 brd 192.168.237.255 scope global dynamic noprefixroute ens160
       valid_lft 1100sec preferred_lft 1100sec
    inet6 fe80::cef:1b5b:1107:cf5d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

//keepalived已经自动关闭
[root@master ~]# systemctl status keepalived.service 
● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Fri 2021-10-22 10:47:56 CST; 1s ago
  Process: 198077 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 198078 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 4842)
   Memory: 2.1M
   CGroup: /system.slice/keepalived.service

//在备服务器上查看IP,发现VIP已经转移到备服务器
[root@slave ~]# ip a s ens160
2: ens160:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:cd:b3:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.237.170/24 brd 192.168.237.255 scope global dynamic noprefixroute ens160
       valid_lft 980sec preferred_lft 980sec
    inet 192.168.237.250/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::cef:1b5b:1107:cf5d/64 scope link dadfailed tentative noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::7220:8af:6655:3c80/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

//httpd正在运行
[root@slave ~]# ss -anltu
Netid      State       Recv-Q      Send-Q           Local Address:Port           Peer Address:Port      
tcp        LISTEN      0           128                    0.0.0.0:22                  0.0.0.0:*         
tcp        LISTEN      0           128                          *:80                        *:*         
tcp        LISTEN      0           128                       [::]:22                     [::]:*         

现在去访问,查看是否是备服务器提供的服务

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341431.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号