OpenResty&Keepalive

OpenResty简介

OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

流程图: image

Lua简介

Lua是一个简洁、轻量、可扩展的程序设计语言,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。

IDEA 调试Lua

https://blog.csdn.net/wwlcsdn000/article/details/80572683

安装

参考 https://openresty.org/cn/installation.html

mac os 安装

brew install openresty/brew/openresty
如果你之前是从 homebrew/nginx 安装的 OpenResty,请先执行:

brew untap homebrew/nginx

centos7 安装

参考 https://openresty.org/cn/installation.html

安装前准备

 yum install pcre-devel openssl-devel gcc curl

安装

参考 http://openresty.org/cn/linux-packages.html
添加仓库

 sudo yum install yum-utils
 sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

安装openresty

sudo yum install openresty

安装后目录 /usr/local/openresty

可选安装,resty 工具

 sudo yum install openresty-resty

IDEA 配置 Openresty

参考:https://blog.csdn.net/WuZuoDingFeng/article/details/80514976
https://blog.csdn.net/ab601026460/article/details/66479851
需要安装lua、openresty support、niginx support等插件

OpenResty 入门

创建工作目录

mkdir ~/work
cd ~/work
mkdir logs/ conf/

创建nginx.conf配置文件

worker_processes  1;
error_log logs/error.log;
events {
    worker_connections 1024;
}
http {
    server {
        listen 8080;
        location / {
            default_type text/html;
            content_by_lua '
                ngx.say("<p>hello, world</p>")
            ';
        }
    }
}

启动 nginx服务

如果之前已经安装的nginx,请不要使用以前安装的nginx,使用OpenResty下的nginx

/usr/local/Cellar/openresty/1.13.6.2/nginx/sbin/nginx -c /Users/xjune/Documents/nginx-workspace/conf/nginx.conf

请求服务

 curl localhost:8080

nginx 调试

 ngx.log(ngx.STDERR, 'key:'..key)

Keepalive

Keepalive 简介

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。

Keepalive 工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

Keepalive 安装

  1. 下载keepalive
    去keepalived官网下载你所需要的版本,下载地址 http://www.keepalived.org/download.html
wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
tar -zxv -f  keepalived-2.0.7.tar.gz
  1. 创建安装目录
mkdir /usr/local/keepalived
  1. 安装keepalived
  • 配置keepalived安装目录
cd keepalived-2.0.7/
./configure --prefix=/usr/local/keepalived --sysconf=/etc
  • 编译keepalived
make && make install
  • 期间有可能碰到警告,使用如下方式解决,并且重新configure
yum -y install libnl libnl-devel  
yum install -y libnfnetlink-devel  
 ./configure --prefix=/usr/local/keepalived --sysconf=/etc
  1. 创建快捷方式
 --建立软链接
ln -s /usr/local/keepalived/sbin/keepalived /sbin/ 
cp //root/keepalived-2.0.7/keepalived/etc/init.d/keepalived /etc/init.d
  1. 启动服务
service keepalived start
  1. 增加nginx健康检查脚本
    文件路径:/usr/local/openresty/nginx/sbin/check_nginx_alive.sh
#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

A=`ps -C nginx --no-header |wc -l`

if [ $A -eq 0 ]
   then
     echo 'nginx server is died'
     killall keepalived
fi

授权

 chmod 777 /usr/local/openresty/nginx/sbin/check_nginx_alive.sh
  1. 修改配置文件实现主从配置

主节点:192.168.12.102
从节点:192.168.12.167

vi /etc/keepalived/keepalived.conf

  • Master keepalived.conf 配置
vrrp_script check_nginx_alive {
    script "/usr/local/openresty/nginx/sbin/check_nginx_alive.sh"
    interval 3
    weight -10
}
global_defs {
    ## 设置lvs的id,在一个网络内唯一
    router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    ## 主机配置,从机为BACKUP
    state MASTER
    ## 网卡名称
    interface ens3
    virtual_router_id 50
    ## 权重值,值越大,优先级越高,backup设置比master小,这样就能在master宕机后讲backup变为master,而master回复后就可以恢复.
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        ## 同一网段虚拟IP
        192.168.12.100
    }
    track_script {
        check_nginx_alive
    }
}

virtual_server 192.168.12.100 8090 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.12.102 80 {
        weight 1
        TCP_CHECK{
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
  • Slave keepalived.conf 配置
vrrp_script check_nginx_alive {
    script "/usr/local/openresty/nginx/sbin/check_nginx_alive.sh"
    interval 3
    weight -10
}
global_defs {
    ## 设置lvs的id,在一个网络内唯一
    router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    ## 主机配置,从机为BACKUP
    state MASTER
    ## 网卡名称
    interface ens3
    virtual_router_id 50
    ## 权重值,值越大,优先级越高,backup设置比master小,这样就能在master宕机后讲backup变为master,而master回复后就可以恢复.
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        ## 同一网段虚拟IP
        192.168.12.100
    }
    track_script {
        check_nginx_alive
    }
}

virtual_server 192.168.12.100 8090 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

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

nginx 如果服务停止,keepalive增加 track_script 机制配置说明如下

   script "killall -0 sshd"        # cheaper than pidof  删掉keepalive 进程
   interval 2                      # check every 2 seconds 
   weight -4                       # default prio: -4 if KO 测试失败权重-4
   fall 2                          # require 2 failures for KO 检测失败2次,才减去权重
   rise 2                          # require 2 successes for OK 检查两次成功,ok
  1. 测试
    访问 http://192.168.12.100:8090 返回结果
Welcome to OpenResty! Master

停止nginx

./sbin/nginx -s stop  

查看keepalive状态

 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 Mon 2018-08-27 21:17:32 CST; 8s ago

访问 http://192.168.12.100:8090 返回结果

Welcome to OpenResty! Backup

keepalive 日志

修改/etc/sysconfig/keepalived

vi /etc/sysconfig/keepalived

修改为:

KEEPALIVED_OPTIONS="-D -d -S 0"

“-D” 就是输出日志的选项 这里的“-S 0”表示local0.* 具体的还需要看一下/etc/syslog.conf文件

修改/etc/rsyslog.conf 在/etc/rsyslog.conf中添加以下代码:

local0.*  /var/log/keepalived.log

重新启动keepalived和rsyslog服务

service rsyslog restart
service keepalived restart

然后就可以查看keepalived的日志了:

tail -f /var/log/keepalived.log

参考

https://blog.csdn.net/u012410733/article/details/57078407
http://outofmemory.cn/wiki/keepalived-configuration
https://www.cnblogs.com/kevingrace/p/6138185.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值