设为首页 收藏本站
查看: 2032|回复: 0

[经验分享] KeepAlived实践

[复制链接]
发表于 2018-12-29 07:13:44 | 显示全部楼层 |阅读模式
1.Keepalived简介
  Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
2.KeepAlived实现Nginx反向代理高可用
实验环境:
  lab1:172.16.21.101  OS:CentOS6.5 已安装Nginx
  lab2:172.16.21.102  OS:CentOS6.5  已安装Nginx
  lab3:172.16.21.103 OS:CentOS6.5 已安装Httpd,运行www.stu21.com网站
  lab4:172.16.21.104 OS:CentOS6.5 已安装Httpd,运行bbs.stu21.com网站
  在nginx实现将www.stu21.com/bbs重定向到bbs.stu21.com网站,同时配置Kepppalived在lab1和lab2上,实现Nginx的高可用,以避免其发生单点故障而影响整个站点的访问
设置Nginx为反向代理:
  在lab1和lab2的nginx的配置文件中的http段中添加如下内容
server {
        listen       80;
        server_name  test.stu21.com;
        location / {
            proxy_pass http://172.16.21.103;
        }
        location /bbs {
            rewrite /bbs/?(.*)$ /$1 break;
            proxy_pass http://172.16.21.104;
        }  现在访问效果如下:
[root@lab1 nginx-1.6.1]# curl www.stu21.com
www.stu21.com
[root@lab1 nginx-1.6.1]# curl www.stu21.com/bbs
bbs.stu21.com  

配置KeepAlived实现Nginx高可用:
  前提:
  两台主机分别可以基于密钥连接到对方,并且在对方主机的已知主机列表中
  lab1和lab2的keepalived配置如下
  lab1:
[root@lab1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
root@localhost.com
   }
   notification_email_from keepalived@localhost.com
   smtp_server localhost
   smtp_connect_timeout 30
}
vrrp_script chk_nginx {
script "if killall -0 nginx; then exit 0;else ssh lab2 '/etc/init.d/nginx start'; exit 1;fi"
    interval 1
    weight -2
    fall 3
    rise 1
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 21
    priority 100
    authentication {
        auth_type PASS
        auth_pass nginxabc
    }
    virtual_ipaddress {
172.16.21.200/16
    }
    track_script {
chk_nginx
    }
    notify_master "/etc/keepalived/nginx.sh master"
    notify_backup "/etc/keepalived/nginx.sh backup"
    notify_fault "/etc/keepalived/nginx.sh fault"
}  

  lab2:
[root@lab2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
root@localhost.com
   }
   notification_email_from keepalived@localhost.com
   smtp_server localhost
   smtp_connect_timeout 30
}
vrrp_script chk_nginx {
    script "if killall -0 nginx; then exit 0;else ssh lab2 '/etc/init.d/nginx start'; exit 1;fi"
    interval 1
    weight -2
    fall 3
    rise 1
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 21
    priority 99
    authentication {
        auth_type PASS
        auth_pass nginxabc
    }
    virtual_ipaddress {
172.16.21.200/16
    }
    track_script {
chk_nginx
    }
    notify_master "/etc/keepalived/nginx.sh master"
    notify_backup "/etc/keepalived/nginx.sh backup"
    notify_fault "/etc/keepalived/nginx.sh fault"
}  

  两边所使用监控脚本内容如下
[root@lab2 ~]# cat /etc/keepalived/nginx.sh
#!/bin/bash
vip=172.16.21.200
contact='root@localhost'
mail() {
    mailsubject="`hostname` to be $1: $vip floating"
    mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"
    echo $mailbody | mail -s "$mailsubject" $contact
}
case "$1" in
    master)
        mail master
        /etc/rc.d/init.d/nginx start
        exit 0
    ;;
    backup)
        mail backup
        /etc/rc.d/init.d/nginx stop
        exit 0
    ;;
    fault)
        mail fault
        /etc/rc.d/init.d/nginx stop
        exit 0
    ;;
    *)
        echo 'Usage: `basename $0` {master|backup|fault}'
        exit 1
    ;;
esac
保证两边使用同样的Nginx配置  

测试:


  #停掉lab1的nginx程序,此时查看lab2的日志

  可见lab2已经成功添加了172.16.21.200的地址,访问,仍然可以得到如下页面

3.双主模型Keepalived实现LVS高可用

  配置文件:
#lab1的配置
! Configuration File for keepalived
global_defs {
   notification_email {
root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 172.16.21.101
   smtp_connect_timeout 30
   router_id LVS_2121
}
vrrp_script chk_schedown{
   script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
   interval 2
   weight -2
}
vrrp_instance VI_1 {
    state MASTER #另一台为SLAVE
    interface eth0
    virtual_router_id 121
    priority 100 #另一台为99
    garp_master_delay 1
    authentication {
        auth_type PASS
        auth_pass lvsablvs
    }
    track_script {
chk_schedown
    }
    virtual_ipaddress {
        172.16.21.200/16
    }
}
vrrp_instance VI_2 {
    state SLAVE #另一台为MASTER
    interface eth0
    virtual_router_id 122
    priority 99 #另一台为100
    garp_master_delay 1
    authentication {
        auth_type PASS
        auth_pass lvslvsv2
    }
    track_script {
    chk_schedown
    }
    virtual_ipaddress {
        172.16.21.201/16
    }
}
virtual_server 172.16.21.200 80 { #定义虚拟主机
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    nat_mask 255.255.0.0
#    persistence_timeout 50 #定义持续连接时间,此处测试,故被注释掉
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.21.103 80 { #定义RealServer
        weight 10 #定义权重
        HTTP_GET { #定义健康检测机制
            url {
              path /
          status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.21.104 80 {
        weight 5
        HTTP_GET {
            url {
path /
    status_code 200
                }
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
    }
   }
}
virtual_server 172.16.21.201 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    nat_mask 255.255.0.0
#   persistence_timeout 50
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.21.103 80 {
        weight 10
        HTTP_GET {
            url {
              path /
      status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.21.104 80 {
        weight 5
        HTTP_GET {
            url {
path /
status_code 200
        }
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
    }
   }
}  

  在lab3和lab4上,需要进行如下设置
  #阻止VIP的arp请求
[root@lab3 ~]# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@lab3 ~]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@lab3 ~]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
[root@lab3 ~]# echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce  

  #给lo口设置VIP
[root@lab3 ~]# ip addr add 172.16.21.201/32 broadcast 172.16.21.200 dev lo
[root@lab3 ~]# ip addr add 172.16.21.201/32 broadcast 172.16.21.201 dev lo  其次我们还需要为各RealServer提供网页服务器和网页文件,此时我们的一个双主模型,高可用的LVS服务器便搭建成功了




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-656986-1-1.html 上篇帖子: 企业实战(3) 下篇帖子: keepalived 多实例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表