欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenResty&Keepalive

程序员文章站 2024-03-21 09:47:16
...

OpenResty简介

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

流程图: OpenResty&Keepalive

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