• keepalived 双机热备


    目前项目已经采用nginx来实现负载均衡,但是nginx调度器只有一台,上次还意外的down机一次,导致整个服务应用全部瘫痪,这次准备再加一个调度器来实现站点高可用性,也就是常说的双机热备了。

    master: 192.168.1.241
    backup: 192.168.1.242
    漂移IP:192.168.1.243


    1,主备调度器都安装keepalived软件
    安装过程如下:

    ./configure --prefix=/usr/local/keepalived && make && make install
    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

    mkdir /etc/keepalived
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    service keepalived start

    可以先用命令 service keepalived start 启动进行测试,看进程能够启动,注意查看log.

    2,主调度器配置如下:

    ! Configuration File for keepalived

    global_defs {
        router_id LVS_DEVEL
    }

    vrrp_sync_group VG_1 {
        group {
            VI_1
        }
        notify_master /etc/keepalived/sendmail.pl
    }

    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.243
        }
    }


    2,备调度器配置如下:

    ! Configuration File for keepalived

    global_defs {
       router_id LVS_DEVEL
    }

    vrrp_sync_group VG_1 {
        group {
        VI_1
        }
        notify_master /etc/keepalived/sendmail.pl
    }


    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.243
        }
    }


    3,发送邮件的perl脚本sendmail.pl内容如下:
    注意主备发送邮件的标题是不一致的,只要你能识别漂移IP在哪台服务器上即可。

    #!/usr/bin/perl -w

    use Net::SMTP_auth;
    use strict;


    my $mailhost = 'smtp.163.com';
    my $mailfrom = 'test@163.com';
    my @mailto   = ('123456@139.com');
    my $subject  = 'keepalived up on backup';

    my $user   = 'test';
    my $passwd = 'test';

    &SendMail();

    ##############################
    # Send notice mail
    ##############################
    sub SendMail() {

        my $smtp = Net::SMTP_auth->new( $mailhost, Timeout => 120, Debug => 1 )
          or die "Error.\n";
        $smtp->auth( 'LOGIN', $user, $passwd );

        foreach my $mailto (@mailto) {
            $smtp->mail($mailfrom);
            $smtp->to($mailto);
            $smtp->data();
            $smtp->datasend("To: $mailto\n");
            $smtp->datasend("From:$mailfrom\n");
            $smtp->datasend("Subject: $subject\n");
            $smtp->datasend("\n");
            $smtp->dataend();
        }

        $smtp->quit;
    }


    说明:
    a、由于keeplived自带的发送邮件机制是个鸡肋,如果本地不启动25端口就无法实现邮件发送,就琢磨着能不能通过自定义脚本来实现,真的是很幸运,就采用了认证的方式。

    b、其他的配置说明就不详细讲了,网上很多资料。


    4,测试keepalived
    主备调度器都开启80端口,两台服务器上的测试内容不一致,这样更方便测试。

  • 相关阅读:
    [附源码]计算机毕业设计JAVA游戏战队考核系统
    KafkaConsumer-Kafka从入门到精通(十)
    【Spring MVC】MVC如何浏览器请求(service方法)
    宝安水环境管控平台(Ionic/Angular 移动端) 问题记录
    前端代码生成
    数字IC设计面试题目集21~46
    Jpa使用Specification分页查询
    MySQL事务和锁
    yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
    「Python编程基础」第2章:小试牛刀
  • 原文地址:https://blog.csdn.net/vempire/article/details/127608599