nginx+keepalived负载均衡可用框架(补一 keepalived安装配置-热备-(服务器层和应用层))

32 篇文章 0 订阅

这里我先说说什么是热备什么是互备,自定义的莫见怪

热备:(MASTER)-(BACKUP )模式,备份机平常就是个摆设,浪费资源

互备:(MASTER、BACKUP)-(BACKUP、MASTER)模式,备份机也是主机,主机也是备份机,资源利用率高


热备又分为两种情况:

第一种情况:服务器层的热备(比如服务器宕机、keepalived宕、网络不同,这个主要针对ip及keepalived)

第二种情况:应用层(web)的热备(比如web应用端口不同,nginx进程被意外kill,这个主要针对端口)


安装步骤

1.安装依赖

yum -y install gcc gcc+ gcc-c++  
yum install popt-devel openssl openssl-devel libssl-dev libnl-devel popt-devel   

 copy

比较重要!

2.安装keepalived

如没有wget请选安装wget

yum install wget  
  copy

wget http://www.keepalived.org/software/keepalived-1.2.10.tar.gz  
tar zxvf keepalived-1.2.10.tar.gz  
cd keepalived-1.2.10  
./configure --prefix=/usr/local/keepalived  
make  
make install  



wget下载、tar解压、

configure,这一步一般用来生成Makefile,为下一步的编译做准备,你可以通过在configure后加上参数来对安装进行控制

比如 ./configure --prefix=/usr/local/keepalived(安装在/usr/local/keepalived目录下)

make,这一步就是编译,大多数的源代码都经过这一步进行编译

make install ,这条命令来进行安装

3.修改配置文件路径

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/    
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/    
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/    
mkdir /etc/keepalived    
cd /etc/keepalived/  


vi keepalived.conf  

op

global_defs {  
   notification_email {  
      user@example.com #设置报警邮件地址,可以设置多个,每行一个。需要开启sendmail服务。  
   }  
  
   notification_email_from mail@example.org #设置邮件的发送地址  
   smtp_server 192.168.200.1 #设置SMTP Server地址  
   smtp_connect_timeout 30 #设置SMTP Server的超时时间  
   router_id LVS_DEVEL #表示运行Keepalived服务器的一个标示。发邮件时显示邮件主题的信息  
}  
  
vrrp_instance VI_1 { #vrrp实例定义部分  
    state MASTER #标示状态为MASTER 指定Keepalived的角色(MASTER主,BACKUP备)  
    interface em2 #指定HA检测网络的接口  
    virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下的MASTER和BACKUP必须一致  
    priority 101   #MASTER权重要高于BACKUP 数字越大优选级越高  
    advert_int 1 #组播信息发送间隔,两个节点设置必须一样  
    mcast_src_ip 192.168.65.142 #vrrp实体服务器的IP  发送多播包的地址,如果不设置默认使用绑定网卡的primary ip  
  
  
    authentication {  
        auth_type PASS #主从服务器验证方式  设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信  
        auth_pass 1111  
    }  
  
    #VIP  
    virtual_ipaddress {  
        192.168.65.151 #虚拟IP 可以设置多个虚拟IP地址,每行一个  
    }  
}  



4.设置为开机启动

vi /etc/rc.local 

 
#添加  
#keepalived  
/etc/init.d/keepalived start  

  cop


5.MASTER和BACKUP配置文件

BACKUP的keepalived.conf


global_defs {  
   notification_email {  
      user@example.com #设置报警邮件地址,可以设置多个,每行一个。需要开启sendmail服务。  
   }  
  
   notification_email_from mail@example.org #设置邮件的发送地址  
   smtp_server 192.168.200.1 #设置SMTP Server地址  
   smtp_connect_timeout 30 #设置SMTP Server的超时时间  
   router_id LVS_DEVEL #表示运行Keepalived服务器的一个标示。发邮件时显示邮件主题的信息  
}  
  
vrrp_instance VI_1 { #vrrp实例定义部分  
    state BACKUP#标示状态为MASTER 指定Keepalived的角色(MASTER主,BACKUP备)  
    interface em1 #指定HA检测网络的接口  
    virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下的MASTER和BACKUP必须一致  
    priority 100   #MASTER权重要高于BACKUP 数字越大优选级越高  
    advert_int 1 #组播信息发送间隔,两个节点设置必须一样  
    mcast_src_ip 192.168.51.55 #vrrp实体服务器的IP  发送多播包的地址,如果不设置默认使用绑定网卡的primary ip  
  
  
    authentication {  
        auth_type PASS #主从服务器验证方式  设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信  
        auth_pass 1111  
    }  
  
    #VIP  
    virtual_ipaddress {  
        192.168.65.151 #虚拟IP 可以设置多个虚拟IP地址,每行一个(一般使用虚拟ip来访问)  
    }  
}  


注意点

重点!!!


mcast_src_ip 192.168.51.55 #vrrp实体服务器的IP  发送多播包的地址,如果不设置默认使用绑定网卡的primary ip  


 copy

这个实体服务器的IP要么不设置,要么一定设置为本机IP,不然会刷新页面出现错误(具体错误忘记了)

state (MASTER与BACKUP)

virtual_router_id 必须一致

priority 主>备

advert_int 必须一致

authentication 必须一致

virtual_ipaddress 一致(一般使用虚拟ip来访问)


5.启动 

service keepalived start


6.查看keepalived网卡信息

ip addr

查看keepalived成功与否主要看

interface 对应的网卡(这里是em1)是否成功获取virtual_ipaddress的值(重要!!!)


7.验证

主服务器新建页面 内容MASTER

备服务器新建页面 内容BACKUP

启动主备服务器http服务和keepalived服务

通过浏览器,输入虚拟IP地址

页面显示MASTER

关闭主服务器keepalived服务,刷新刚才虚拟IP地址

页面显示BACKUP

再次启动主服务器keepalived服务,再刷新刚才虚拟IP地址

页面显示MASTER



@上边所说的是服务器层的热备

@下边说说应用层的热备(web端口不通,nginx进程被意外kill情况下)

主要利用keepalived的track_script检测脚本的原理实现的

@主要是在服务器层基础上实现应用层的热备

@主-MASTER

global_defs {    
       notification_email {    
          user@example.com   
       }    
        
       notification_email_from mail@example.org  
       smtp_server 192.168.200.1     
       smtp_connect_timeout 30    
       router_id LVS_DEVEL  
}    
  
#应用层热备需要添加的内容  
vrrp_script chk_http_port {  
        script "</dev/tcp/127.0.0.1/80"  
        interval 1 #检测脚本执行的间隔  
        weight -2 #权重  
}  
        
vrrp_instance VI_1 {  
        state MASTER    
        interface eth0  
        virtual_router_id 51   
        priority 101   
        advert_int 1   
        mcast_src_ip 192.168.51.75    
        
        
        authentication {    
            auth_type PASS   
            auth_pass 1111    
        }    
        
        virtual_ipaddress {    
            192.168.51.199  
        }  
          
        #应用层热备需要添加的内容  
        track_script {  
            chk_http_port #调用检测脚本  
        }    
}   

@备-BACKUP

global_defs {    
       notification_email {    
          user@example.com   
       }    
        
       notification_email_from mail@example.org  
       smtp_server 192.168.200.1     
       smtp_connect_timeout 30    
       router_id LVS_DEVEL  
}    
  
#应用层热备需要添加的内容  
vrrp_script chk_http_port {  
        script "</dev/tcp/127.0.0.1/80"  
        interval 1 #检测脚本执行的间隔  
        weight -2 #权重  
}  
        
vrrp_instance VI_1 {  
        state MASTER    
        interface eth0  
        virtual_router_id 51   
        priority 100  
        advert_int 1   
        mcast_src_ip 192.168.51.75    
        
        
        authentication {    
            auth_type PASS   
            auth_pass 1111    
        }    
        
        virtual_ipaddress {    
            192.168.51.199  
        }  
          
        #应用层热备需要添加的内容  
        track_script {  
            chk_http_port #调用检测脚本  
        }    
}   



@注意:这里你是不咋一看想说不对啊,怎么主与备的state都是MASTER


1)、为什么主备的参数state都是MASTER,这里的确要设置成一样的,不然实现不了我们想要的VIP漂浮效果,当state都设置成MASTER后,会根据

priority值的大小竞争上岗来决定谁是真正的MASTER,脚本检测就是在失败的时候把权重减去响应的值,这样priority的值就会变化,由于主备priority

初始值不同,所以权重始终不会出现相同的值。例如主的priority=101,如果脚本检测80端口无法连接,就会priority-2=99,99<备priority(100),此时

备就成为主。有点小绕。



如何查看keepalived日志

tail -f /var/log/message


nginx监控脚本

当nginx服务死掉,就关掉或者杀死keepalived进程。

nginx监控脚本我放置在 /usr/local/webserver/keepalived目录下边(随便放,我是为了好记!)

#!/bin/bash  
while  :  
do  
nginxpid=`ps -C nginx --no-header | wc -l`  
 if [ $nginxpid -eq 0 ];then  
  /usr/local/webserver/nginx/sbin/nginx  
  sleep 5  
nginxpid=`ps -C nginx --no-header | wc -l`  
  echo $nginxpid  
    if [ $nginxpid -eq 0 ];then  
 /etc/init.d/keepalived stop  
   fi  
 fi  
 sleep 5  
done  

  copy

 /etc/keepalived/keepalived.conf配置文件新增

vrrp_script chk_nginx {  
        script "/usr/local/webserver/keepalived/check_nginx.sh"  
        interval 1  
        weight -2  
}  
  copy

track_script {  
    chk_http_port  
    chk_nginx #调用检测新增的脚本  
}  


ok

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值