Nginx+Keepalived实现双机主备的方法
时间:2020-03-29来源:电脑系统城作者:电脑系统城
前言
首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,起初是专为LVS负载均衡软件设计的,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现web服务端的高可用。
Keepalived以VRRP协议为实现基础,VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。
VRRP出现的目的就是为了解决静态路由的单点故障问题的,它能保证当个别节点宕机时,整个网络可以不间断地运行。
下面我们介绍一下nginx keepalived高可用方案的部署安装。
环境准备
在两台主机上准备如下压缩文件:
- keepalived-2.0.20.tar.gz
- nginx-1.16.1.tar.gz
虚拟IP
真实IP
nginx端口
主从
192.168.124.20
192.168.124.13
80
MASTER
192.168.124.20
192.168.124.14
80
BACKUP
安装nginx
新建一个用户:
- useradd tianyan
确定安装目录,我这里的安装目录是:/home/tianyan/tianyan_soft/nginx.install。
在这个目录下分别新建两个目录用于安装nginx和keepalived,解压两个压缩包。
执行安装命令:
- ./configure --prefix=/home/tianyan/tianyan_soft/nginx.install \
- --sbin-path=/home/tianyan/tianyan_soft/nginx.install/sbin/nginx --conf-path=/home/tianyan/tianyan_soft/nginx.install/conf/nginx.conf \
- --error-log-path=/home/tianyan/tianyan_soft/nginx.install/error.log \
- --http-log-path=/home/tianyan/tianyan_soft/nginx.install/access.log \
- --pid-path=/home/tianyan/tianyan_soft/nginx.install/nginx.pid \
- --lock-path=/home/tianyan/tianyan_soft/nginx.install/nginx.lock \
- --user=tianyan --group=tianyan \
- --with-http_stub_status_module \
- --with-http_gzip_static_module \
- --with-http_ssl_module \
- --with-http_realip_module \
- --with-threads \
- --with-pcre \
- --http-client-body-temp-path=/home/tianyan/tianyan_soft/nginx.install/client/ \
- --http-proxy-temp-path=/home/tianyan/tianyan_soft/nginx.install/proxy/ \
- --http-fastcgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/fcgi/ \
- --http-uwsgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/uwsgi \
- --http-scgi-temp-path=/home/tianyan/tianyan_soft/nginx.install/scgi
如果报错,记得安装相关依赖:
- yum install gcc gcc-c++
- nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)。
注:以非root权限启动时,会出现 nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied) 错误。
原因:Linux只有root用户可以使用1024一下的端口
解决办法:
1.按照root权限启动
2.将 /usr/local/nginx/conf/nginx.conf 文件中的80端口改为1024以上。
安装keepalived
- ./configure --prefix=/usr/local/keepalived
上述命令执行完毕后继续执行:
- make && make install
安装完毕后,目录是这个样子:
将配置文件拷贝到系统对应的目录下
- mkdir /etc/keepalived
- cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
- cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
编辑 master 节点的 keepalived.conf
- vim /etc/keepalived/keepalived.conf
内容参考如下:
- ! Configuration File for keepalived
-
- global_defs {
- #一个没重复的名字即可
- router_id hyq_slave
- }
-
-
- #ng是否运行
- vrrp_script chk_nginx {
- script "/etc/keepalived/nginx_check.sh"
- interval 2
- weight -20
- }
-
- vrrp_instance VI_1 {
- state BACKUP # 必填,可以是MASTER或BACKUP
-
- interface ens33
- virtual_router_id 101
- priority 90
- advert_int 1
-
- # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
- # 本机ip
- unicast_src_ip 192.168.124.14
- unicast_peer {
- # 其他机器ip
- 192.168.124.13
- }
- # 设置nopreempt防止抢占资源
- nopreempt
-
- authentication {
- auth_type PASS
- auth_pass 1111
- }
-
- # 与上方nginx运行状况检测呼应
- track_script {
- chk_nginx
- }
- virtual_ipaddress {
- 192.168.124.20
- }
- }
编辑 slave 节点的 keepalived.conf
- vim /etc/keepalived/keepalived.conf
- ! Configuration File for keepalived
-
- global_defs {
- #一个没重复的名字即可
- router_id hyq_slave
- }
-
-
- #ng是否运行
- vrrp_script chk_nginx {
- script "/etc/keepalived/nginx_check.sh"
- interval 2
- weight -20
- }
-
- vrrp_instance VI_1 {
- state BACKUP # 必填,可以是MASTER或BACKUP
-
-
- interface ens33
- virtual_router_id 101
- priority 90
- advert_int 1
-
- # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
- # 本机ip
- unicast_src_ip 192.168.124.14
- unicast_peer {
- # 其他机器ip
- 192.168.124.13
- }
- # 设置nopreempt防止抢占资源
- nopreempt
-
- authentication {
- auth_type PASS
- auth_pass 1111
- }
-
- # 与上方nginx运行状况检测呼应
- track_script {
- chk_nginx
- }
- virtual_ipaddress {
- 192.168.124.20
- }
- }
编写nginx_check.sh脚本
在/etc/keepalived目录下新建nginx_check.sh脚本
- touch nginx_check.sh
编辑其内容为:
- #!/bin/sh
- A=`ps -C nginx --no-header |wc -l`
- if [ $A -eq 0 ]
- then
- /usr/sbin/nginx
- sleep 1
- A2=`ps -C nginx --no-header |wc -l`
- if [ $A2 -eq 0 ]
- then
- systemctl stop keepalived
- fi
- fi
含义是:如果 nginx 停止运行,尝试启动,但是如果无法启动,则杀死本机的 keepalived 进程, keepalied将会把虚拟 ip 绑定到 BACKUP 机器上。 注意: /usr/sbin/nginx是nginx的启动命令,如果你安装到其他目录,则相应的替换。
相关信息
-
Nginx主机域名配置实现
一、配置多个端口访问不同文件
二、配置不同域名访问不同文件
三、配置不同域名访问同个文件...
2023-03-17
-
Nginx配置-日志格式配置方式
上线了一个小的预约程序,配置通过Nginx进行访问入口,默认的日志是没有请求时间的,因此需要配置一下,将每一次的请求的访问响应时间记录出来,备查与优化使用....
2023-03-17