LVS+Keepalived+Nginx实现双击主从热备

LVS

LVS 是一种四层负载均衡器,软负载均衡(传输层),可以完成所有负载均衡业务需求:比如数据库、web服务、虚拟化技术、虚拟VIP(IP地址)

LVS 作用

LVS是一个开源的软件,可以实现传输层四层负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。

Nginx 与 LVS 的区别

  • nginx:是七层负载均衡,主要针对于应用层负载均衡(Http),再 1.9 之后开始支持四层负载均衡
  • LVS:四层负载均衡,主要针对于传输层负载均衡(Tcp)。LVS 应用场景比 Nginx 负载均衡应用场景更加广泛,而且 LVS 支持所有负载均衡业务功能。

Keepalived

Keepalived 是在 LVS 基础之上,实现心跳检测、监控服务器实现故障转移,如果服务器发生宕机的时候,可以尝试自动重试脚本。如果多次重试还是失败状态,会发送邮件给运维人员。

Keepalived 作用

LVS 可以实现负载均衡,但是不能够进行健康检查,比如一个请求出现故障,LVS 仍然会把请求转发给故障的请求服务器,这样就会导致请求的无效性。Keepalived 软件可以进行健康检查,而且能同时实现 LVS 的高可用性,解决 LVS 单点故障的问题,其实 Keepalived 就是为 LVS 而生的。

为了搭建高可用系统,保证系统 7*24 小时运行,使用 LVS + Keepalived 实现双机主从热备。

环境服务配置

环境搭建

  1. 下载keepalived

    wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

  2. 解压安装:

    tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/

  3. 下载插件openssl

    yum install -y openssl openssl-devel(需要安装一个软件包)

  4. 开始编译keepalived

    cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

    报错: keepalived执行./configure --prefix=/usr/local/keepalived时报错:configure: error: Popt libraries is required
    出现此错误的原因:未安装popt的开发包
    解决方法:yum install popt-devel
    安装好popt的开发包。重新./configure 即可。

  5. make一下

    make && make install

keepalived安装成Linux系统服务

将keepalived安装成Linux系统服务,因为没有使用keepalived的默认安装路径(默认路径:/usr/local),安装完成之后,需要做一些修改工作:
首先创建文件夹,将keepalived配置文件进行复制:

mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

然后复制keepalived脚本文件:

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

报错

[root@localhost keepalived-1.2.18]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
ln: 无法创建符号链接"/sbin/keepalived": 文件已存在

可以设置开机启动:chkconfig keepalived on,到此我们安装完毕!

keepalived 常用命令

service keepalived start
service keepalived stop

启动报错

Starting keepalived (via systemctl):  Job for keepalived.service failed. See 'systemctl status keepalived.service' and 'journalctl -xn' for details.  

解决办法

[root@edu-proxy-01 sbin]# cd /usr/sbin/  
[root@edu-proxy-01 sbin]# rm -f keepalived   
[root@edu-proxy-01 sbin]# cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/  

使用keepalived虚拟VIP

编辑keepalived配置文件

vi /etc/keepalived/keepalived.conf

主服务器

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    ### MASTER 主的意思 BACKUP 从
    state MASTER #来决定主从
    interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
    virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.148.130 #填写本机ip
    priority 100 # 节点优先级,主要比从节点优先级高
    nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 将 track_script 块加入 instance 配置块
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }

    virtual_ipaddress {
        192.168.148.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
    }
}

启动nginx
关闭防火墙 systemctl stop firewalld

如果要实现一主一备,虚拟VIP只能在一台服务器存放
如果要实现多主多备,虚拟VIP可以在多台服务器上存放
备份服务器

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    ### MASTER 主的意思 BACKUP 从
    state BACKUP #来决定主从
    interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
    virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.148.132 #填写本机ip
    priority 100 # 节点优先级,主要比从节点优先级高
    nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 将 track_script 块加入 instance 配置块
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }

    virtual_ipaddress {
        192.168.148.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
    }
}

Keepalived 实现心跳检测

Keepalived 实现心跳检测,Keepalived 向 Nginx 发送心跳检测,如果心跳检测 Nginx 如果没有启动的话,那么 Keepalived 自动实现重启脚本

写入nginx_check.sh脚本 /etc/keepalived/nginx_check.sh

#!/bin/bash
A=`ps -C nginx �Cno-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

注意该脚本一定要授权

chmod 777 nginx_check.sh

nginx+keepalived简单双机主从热备

双机主从热备概述

可以两台机子互为热备,平时各自负责各自的服务。在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续性,提高服务的可靠性,从而保证服务器7*24小时运行。

Nginx Upstream 实现简单双机主从热备

upstream testproxy {
      server 127.0.0.1:8080;
      server 127.0.0.1:8081;
      server 127.0.0.1:8082 backup;
      server 127.0.0.1:8083 backup;
  }

    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass   http://testproxy;
            index  index.html index.htm;
        }
	     ###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间
	      proxy_connect_timeout 1s;
           ###nginx发送给上游服务器(真实访问的服务器)超时时间
         proxy_send_timeout 1s;
	      ### nginx接受上游服务器(真实访问的服务器)超时时间
         proxy_read_timeout 1s;

    }

只要在希望成为后备的服务器 ip 后面多添加一个 backup 参数,这台服务器就会成为备份服务器。
在平时不使用,nginx 不会给它转发任何请求。只有当其他节点全部无法连接的时候,nginx 才会启用这个节点。
一旦有可用的节点恢复服务,该节点则不再使用,又进入后备状态

Nginx+keepalived简单双机主从热备

每个服务虚拟安装keepalived 虚拟一个VIP ,配置主从关系,当主挂了,直接走备机。
Keepalived虚拟VIP 地址 192.168.148.110
A 服务器 192.168.148.130
B 服务器 192.168.148.132

修改主keepalived信息

修改主Nginx服务器keepalived文件, /etc/keepalived/keepalived.conf
State 为MASTER

! Configuration File for keepalived

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    state MASTER #来决定主从
    interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
    virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.148.130 #填写本机ip
    priority 100 # 节点优先级,主要比从节点优先级高
    nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 将 track_script 块加入 instance 配置块
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }

    virtual_ipaddress {
        192.168.148.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
    }
}
修改从keepalived信息

修改备份Nginx服务器keepalived文件, /etc/keepalived/keepalived.conf
State 为BACKUP

! Configuration File for keepalived

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    state BACKUP #来决定主从
    interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
    virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.148.132 #填写本机ip
    priority 100 # 节点优先级,主要比从节点优先级高
    nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 将 track_script 块加入 instance 配置块
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }

    virtual_ipaddress {
        192.168.148.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
    }
}

你可能感兴趣的:(Nginx,LVS,Keepalived,Nginx)