OpenResty&Keepalive
OpenResty简介
OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
流程图:
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 安装
- 下载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
- 创建安装目录
mkdir /usr/local/keepalived
- 安装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
- 创建快捷方式
--建立软链接
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
cp //root/keepalived-2.0.7/keepalived/etc/init.d/keepalived /etc/init.d
- 启动服务
service keepalived start
- 增加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
- 修改配置文件实现主从配置
主节点: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
- 测试
访问 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
推荐阅读