Nginx+Keepalived实现web服务器高可用
1、Nginx
业务背景
现公司需求快速搭建web服务器,对外提供给用户web服务。
需求拆分
需要基于http协议的软件,搭建服务实现
1.1、介绍
常见用法:
1) web服务器软件 httpd http协议
同类的web服务器软件:apache(老牌) nginx(俄罗斯) IIS(微软)
2)代理服务器 反向代理
3)邮箱代理服务器 IMAP POP3 SMTP
4)负载均衡功能 LB loadblance
Nginx架构的特点:
①高可靠:稳定性 master进程 管理调度请求分发到哪一个worker=> worker进程 响应请求 一master多worker
②热部署 :(1)平滑升级 (2)可以快速重载配置
③高并发:可以同时响应更多的请求 事件 epoll模型 几万
④响应快:尤其在处理静态文件上,响应速度很快 sendfile
⑤低消耗:cpu和内存 1w个请求 内存2-3MB
⑥分布式支持 :反向代理 七层负载均衡
官方网址:http://nginx.org/
1.2、安装
常见安装方式:
①yum安装配置,需使用Nginx官方源或者EPEL源
②源码编译
?#添加运行用户 ?
shell > useradd -s/sbin/nologin -M www ?
#安装依赖
shell > yum -y install pcre-devel zlib-devel openssl-devel
#编译安装 ?
shell > cd /root/soft ?
shell > tar xvf nginx-1.14.2.tar.gz
shell > cd nginx-1.14.2 ?
shell > ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module && make && make install
编译参数说明
1.3、目录介绍
查看安装目录/usr/local/nginx
1.4、软件操作参数
查看nginx的二进制可执行文件的相关参数
?shell > cd /usr/local/nginx/sbin ?
shell > ./nginx -h
执行后显示
?nginx version: nginx/1.14.2
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives] ? ?
Options: ?
#查看帮助 ? ?
-?,-h ? ? ? ? : this help
#查看版本并退出 ?
-v ? ? ? ? ?? : show version and exit ?
#查看版本和配置选项并退出 ?
-V ? ? ? ? ?? : show version and configure options then exit ?
#检测配置文件语法并退出 ? ?
-t ? ? ? ? ?? : test configuration and exit ?
#检测配置文件语法打印它并退出 ? ?
-T ? ? ? ? ?? : test configuration, dump it and exit ?
#在配置测试期间禁止显示非错误信息 ? ?
-q ? ? ? ? ?? : suppress non-error messages during configuration testing ?
#发送信号给主进程? stop强制退出? quit优雅的退出? reopen重开日志 ? reload重载配置 ? ?
-s signal ? ? : send signal to a master process: stop, quit, reopen, reload ?
#设置nginx目录? $prefix路径 ? ?
-p prefix ? ? : set prefix path (default: /usr/local/nginx/) ?
#指定启动使用的配置文件 ? ?
-c filename ? : set configuration file (default: conf/nginx.conf) ?
#在配置文件之外设置全局指令 ? ?
-g directives : set global directives out of configuration file
一般主要使用:
-s参数控制管理nginx服务
-V参数查看nginx开启的模块和编译参数
-t参数检测配置文件是否有错误
2、Keepalived实现高可用
业务背景
单例web服务器能够满足业务基本需求,提供web服务。但是,存在单点故障的问题,即当服务器宕机后,用户将无法获取到服务响应。
为了能够提高用户体验度,能够持续得给用户提供优质的服务,当web服务器不可用时,可以有备用服务器接替web服务器的工作,继续为用户提供响应。其中,还要解决一个问题,需要备用服务器能够快速自动切换过来。
一般将以上业务需求,称为实现服务的高可用HA。
需求拆分
也就是高可用的实现核心:
①冗余服务器(备份服务器)
②自动切换 可以通过绑定虚拟IP的方式 用户通过VIP访问服务
2.1、介绍
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
keepalived主要使用三个模块,分别是core、check和vrrp。
core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
check负责健康检查,包括常见的各种检查方式。
vrrp模块是来实现VRRP协议的。
2.2、安装
master和backup都需要进行安装,也就是server01和server03机器
?#安装keepalived ?
shell > yum -y install keepalived
keepalived需要使用的目录和文件:
2.3、配置
①备份主备服务器的配置文件
shell > cd? /etc/keepalived ?
shell > cp keepalived.conf keepalived.conf_bak
②分别修改主备服务器配置文件
?shell?>?vim?keepalived.conf
示例配置文件说明
?! Configuration File for keepalived ?
#发送邮件的配置 ?
global_defs { ? ?
notification_email { ? ?
acassen@firewall.loc ? ? ?
failover@firewall.loc ? ? ?
sysadmin@firewall.loc ? ?
} ? ?
notification_email_from Alexandre.Cassen@firewall.loc ? ?
smtp_server 192.168.200.1 ? ?
smtp_connect_timeout 30 ? ?
router_id LVS_DEVEL ?
} ?
#vrrp协议的配置 ?
vrrp_instance VI_1 { ? ? ?
#工作模式 ? ??
state MASTER ? ?
#监听的网卡 ? ??
interface eth0 ? ? ?
#虚拟路由id 需要和备服务器一致 ? ??
virtual_router_id 51 ? ? ?
#权重 优先级 ? ??
priority 100 ? ? ?
#vrrp包的发送周期? 1s ? ??
advert_int 1 ? ? ?
#权限验证 ? ??
authentication { ? ? ? ??
auth_type PASS ? ? ? ??
auth_pass 1111 ? ??
} ? ? ?
#需要绑定切换的VIP ? ??
virtual_ipaddress { ? ? ? ? ?
192.168.200.16 ? ? ? ? ?
192.168.200.17 ? ? ? ? ?
192.168.200.18 ? ??
}
}
主服务器
?! Configuration File for keepalived ?
global_defs { ? ?
notification_email { ? ? ?
acassen@firewall.loc ? ? ?
failover@firewall.loc ? ? ?
sysadmin@firewall.loc ? ?
} ? ?
notification_email_from Alexandre.Cassen@firewall.loc ? ?
smtp_server 192.168.200.1 ? ?
smtp_connect_timeout 30 ? ?
router_id LVS_DEVEL
} ?
vrrp_instance VI_1 { ? ??
state MASTER ? ??
interface eth0 ? ??
virtual_router_id 51 ? ??
priority 100 ? ??
advert_int 1 ? ??
authentication { ? ? ? ??
auth_type PASS ? ? ? ??
auth_pass 1111 ? ??
} ? ?
#master默认只需要修改使用VIP即可 ? ??
virtual_ipaddress { ? ? ? ? ?
192.168.17.200 ? ??
} ?
}
备服务器
?! Configuration File for keepalived ?
global_defs { ? ?
notification_email { ? ? ?
acassen@firewall.loc ? ? ?
failover@firewall.loc ? ? ?
sysadmin@firewall.loc ? ?
} ? ?
notification_email_from Alexandre.Cassen@firewall.loc ? ?
smtp_server 192.168.200.1 ? ?
smtp_connect_timeout 30 ? ?
router_id LVS_DEVEL
} ?
vrrp_instance VI_1 { ? ? ?
#修改工作模式为备 ? ??
state BACKUP ? ??
interface eth0 ? ??
virtual_router_id 51 ? ??
priority 100 ? ??
advert_int 1 ? ??
authentication { ? ? ? ??
auth_type PASS ? ? ? ??
auth_pass 1111 ? ??
} ? ?
#注意修改VIP ? ??
virtual_ipaddress { ? ? ? ? ?
192.168.17.200 ? ??
}
}
③分别按照顺序启动主服务器和备服务器的keepalived
?shell?>?service?keepalived?start
④查看主备服务器的网卡信息
?#需要通过ip a命令查看? 分别在server01和server03查看
shell > ip a
2.4、模拟故障
模拟服务器故障宕机,查看是否可以切换服务器备用机器。
模拟宕机,关闭server01 master服务器,VIP自动切换到server03 backup服务器
?#抓包vrrp
shell > yum -y install tcpdump
shell > tcpdump vrrp -n