CentOS7.9搭建nginx+keepalived 高可用(主备+双主模式)

一:keepalived简介
nginx+keepalived如下图所示:
CentOS7.9搭建nginx+keepalived 高可用(主备+双主模式)_第1张图片

Keepalived:
是Linux下面实现VRRP备份路由的高可靠性运行件。基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接。
VRRP协议:全称 Virtual Router Redundancy Protocol
即虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(RouterGroup),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。

高可用有2种方式:
1、Nginx+keepalived 主从配置
这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。

2、Nginx+keepalived 双主配置
这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于当前架构环境。
如下图所示:
CentOS7.9搭建nginx+keepalived 高可用(主备+双主模式)_第2张图片

服务器列表:

主机名 角色 IP
Nginx1 nginx+keepalived 192.168.218.133
Nginx2 nginx+keepalived 192.168.218.134

二:安装Nginx
1、安装依赖库

yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel openssl-devel

2、下载nginx-1.14.0.tar.gz
http://nginx.org/download/

3、将压缩包文件复制到/usr下

4、解压

cd /usr
tar -zxvf nginx-1.14.0.tar.gz

5、配置安装

cd /usr/nginx-1.14.0
./configure
make && make install
如果需要stream ,则configure命令使用以下
./configure --with-stream

6、查看文件夹/usr/local中如果有nginx文件夹,则表示安装成功
CentOS7.9搭建nginx+keepalived 高可用(主备+双主模式)_第3张图片

7、nginx启停
使用以下命令进行启停nginx
启动nginx:
/usr/local/nginx/sbin/nginx
重启nginx:
#/usr/local/nginx/sbin/nginx -s reload :修改配置后重载
#/usr/local/nginx/sbin/nginx -s reopen :重新打开日志文件
#/usr/local/nginx/sbin/nginx -t 测试nginx配置文件是否正确
关闭nginx:
#/usr/local/nginx/sbin/nginx -s stop :快速停止nginx
#/usr/local/nginx/sbin/nginx quit :完整有序的停止nginx

其他的停止nginx 方式:
ps -ef | grep nginx
kill -QUIT 主进程号 :从容停止Nginx
kill -TERM 主进程号 :快速停止Nginx
pkill -9 nginx :强制停止Nginx

8、配置文件地址
/usr/local/nginx/conf/nginx.conf
访问地址:
http://192.168.218.133/

CentOS7.9搭建nginx+keepalived 高可用(主备+双主模式)_第4张图片
9、部署vue工程

 location / {
            root   html;
            index  index.html index.htm;
			try_files  $uri $uri/ /index.html;#设置界面刷新
        }
		location /prod-api/{
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header REMOTE-HOST $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://localhost:8080/; #设置监控后端启动的端口
        }

CentOS7.9搭建nginx+keepalived 高可用(主备+双主模式)_第5张图片

三:安装keepalived2.0.0

yum --showduplicates list keepalived

1、下载
https://www.keepalived.org/download.html
2、下载编译所需工具

yum install curl gcc openssl-devel libnl3-devel net-snmp-devel libnfnetlink-devel libnl libnl-devel -y
查看依赖安装情况
rpm -qa curl gcc openssl-devel libnl3-devel net-snmp-devel libnl libnl-devel 

3、将压缩包文件复制到/usr下

4、解压

cd /usr
tar -zxvf keepalived-2.0.0.tar.gz

5、安装

cd /usr/keepalived-2.0.0
./configure --prefix=/usr/local/keepalived
make && make install

#将配置文件copy到系统对应目录下

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

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/init.d/keepalived

#在/etc/keepalived下创建一个nginx_check.sh脚本文件 内容如下(主从都需要这个文件)

vi /etc/keepalived/nginx_check.sh

CentOS7.9搭建nginx+keepalived 高可用(主备+双主模式)_第6张图片


#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx #尝试重新启动nginx
    sleep 2 #睡眠2秒
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
    fi

#添加执行权限
cd /etc/keepalived
chmod +x nginx_check.sh

6、配置文件

#修改配置文件–将master主机配置文件内容替换为以下内容
vi /etc/keepalived/keepalived.conf

CentOS7.9搭建nginx+keepalived 高可用(主备+双主模式)_第7张图片

! Configuration File for keepalived
global_defs {
    router_id tomcat.pro
}
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.31.180
    }
    track_script {
        chk_nginx
    }
}

#修改配置文件–将backup主机配置文件内容替换为以下内容

vim /etc/keepalived/keepalived.conf
CentOS7.9搭建nginx+keepalived 高可用(主备+双主模式)_第8张图片


! Configuration File for keepalived
global_defs {
    router_id tomcat.pro
}
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.31.180
    }
    track_script {
        chk_nginx
    }
}

7、启动命令

systemctl start keepalived
systemctl status keepalived

#访问虚拟IP查看是否成功(绑定的虚拟IP作为新的地址进行访问)

#使用ip addr命令查看网卡是否有绑定的虚拟IP,拥有虚拟IP的主机为MASTER主机。(如果都拥有虚拟IP即都为MASTER或者有两个及以上的主机为MASTER,可能的原因是防火墙问题

#全局定义块

1、email通知(notification_email、smtp_server、smtp_connect_timeout):用于服务有故障时发送邮件报警,可选项,不建议用。需要系统开启sendmail服务,建议用第三独立监控服务,如用nagios全面监控代替。

2、lvs_id:lvs负载均衡器标识,在一个网络内,它的值应该是唯一的。

3、router_id:用户标识本节点的名称,通常为hostname

4、花括号{}:用来分隔定义块,必须成对出现。如果写漏了,keepalived运行时不会得到预期的结果。由于定义块存在嵌套关系,因此很容易遗漏结尾处的花括号,这点需要特别注意。

#VRRP实例定义块

vrrp_sync_group:同步vrrp级,用于确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪

group:至少要包含一个vrrp实例,vrrp实例名称必须和vrrp_instance定义的一致

vrrp_instance:vrrp实例名

1> state:实例状态,只有MASTER 和 BACKUP两种状态,并且需要全部大写。抢占模式下,其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的服务会自动把它的状态由BACKUP切换到MASTER状态。当失效的MASTER所在的服务恢复时,BACKUP从MASTER恢复到BACKUP状态。

2> interface:对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。

3> mcast_src_ip:本机IP地址

4> virtual_router_id:虚拟路由的ID号,每个节点设置必须一样,可选择IP最后一段使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。

5> priority:节点优先级,取值范围0~254,MASTER要比BACKUP高

6> advert_int:MASTER与BACKUP节点间同步检查的时间间隔,单位为秒

7> lvs_sync_daemon_inteface:负载均衡器之间的监控接口,类似于 HA HeartBeat 的心跳线。但它的机制优于 Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。在 DR 模式中,lvs_sync_daemon_inteface与服务接口interface使用同一个网络接口

8> authentication:验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用PASS类型,据说AH使用时有问题。验证密码为明文,同一vrrp 实例MASTER与BACKUP使用相同的密码才能正常通信。

9> smtp_alert:有故障时是否激活邮件通知

10> nopreempt:禁止抢占服务。默认情况,当MASTER服务挂掉之后,BACKUP自动升级为MASTER并接替它的任务,当MASTER服务恢复后,升级为MASTER的BACKUP服务又自动降为BACKUP,把工作权交给原MASTER。当配置了nopreempt,MASTER从挂掉到恢复,不再将服务抢占过来。

11> virtual_ipaddress:虚拟IP地址池,可以有多个IP,每个IP占一行,不需要指定子网掩码。注意:这个IP必须与我们的设定的vip保持一致。

#虚拟服务器virtual_server定义块

virtual_server:定义一个虚拟服务器,这个ip是virtual_ipaddress中定义的其中一个,后面一个空格,然后加上虚拟服务的端口号。

1> delay_loop:健康检查时间间隔,单位:秒

2> lb_algo:负载均衡调度算法,互联网应用常用方式为wlc或rr

3> lb_kind:负载均衡转发规则。包括DR、NAT、TUN 3种,一般使用路由(DR)转发规则。

4> persistence_timeout:http服务会话保持时间,单位:秒

5> protocol:转发协议,分为TCP和UDP两种

real_server:真实服务器IP和端口,可以定义多个

1> weight:负载权重,值越大,转发的优先级越高

2> notify_down:服务停止后执行的脚本

3> TCP_CHECK:服务有效性检测

  • connect_port:服务连接端口

  • connect_timeout:服务连接超时时长,单位:秒

  • nb_get_retry:服务连接失败重试次数

  • delay_before_retry:重试连接间隔,单位:秒

#如果配置了ssl、并且配置了80自动转443、需要修改nginx.conf文件(将转到本机的IP设置为转到VIP)

server {
        listen 80;
        server_name localhost;
        rewrite ^/(.*)$ https://192.168.31.222:443/$1 permanent;
    }

参考资料:Linux搭建nginx+keepalived 高可用(主备+双主模式)
6.第五篇 安装keepalived与Nginx
nginx+keepalived 的安装
linux上的Keepalived下载安装
nginx+keepalived高可用详解配置
https://blog.csdn.net/snakeflash/article/details/105674368

你可能感兴趣的:(nginx)