实验拓扑图:
使用keepalived的双主模型实现nginx反向代理的高可用性_第1张图片
实验环境:
两台upstream server用于配置httpd服务,两台nginx反向代理服务器,同时将keepalived服务安装在两台反向代理服务器上面,用于实现高可用性
基础环境的准备:

关闭四台主机的防火墙及selinux,同时在两台upstream server主机上配置httpd服务并准备测试页面
systemctl stop firewalld
systemctl disable firewalld
vim /etc/selinux/config
selinux=disabled
四台主机做同样的设置
yum install -y httpd
systemctl start httpd
systemctl enable httpd
vim /var/www/html/index.html

This httpd-1 Page

另一台upstream server主机做同样配置

在两台负载均衡服务器上面安装nginx服务,在nginx配置文件的http字段中定义upstream,并且在location字段中调用,重新启动服务

yum install -y nginx    //注意nginx的rpm包是在epel源中提供的
vim  /etc/nginx/nginx.conf    //编辑配置文件
upstream webservs {          //在http字段中定义
                        server 192.168.153.7:80 weight=1;
                        server 192.168.153.8:80 weight=1;
                        }

location  /  {                         //在location中调用定义的upstream名称     
                        proxy_pass http://webservs/;
                        }
systemctl start nginx
systemctl enable nginx 

使用keepalived的双主模型实现nginx反向代理的高可用性_第2张图片

备注:nginx根据版本不同有时候就只有一个nginx.conf的主配置文件,有时候除了主配置文件还会存在/etc/nginx/conf.d/default.conf的附加配置文件。如果nginx安装完成后既有主配置文件又有附加配置文件,此时关于server字段以及location字段需要定义default.conf的附加配置文件中

使用netstat -tnlp查看确保80端口被nginx的master进程监听
使用keepalived的双主模型实现nginx反向代理的高可用性_第3张图片
使用客户端验证一下nginx的反向代理功能
使用keepalived的双主模型实现nginx反向代理的高可用性_第4张图片
使用keepalived的双主模型实现nginx反向代理的高可用性_第5张图片
将配置文件复制到第二个反向代理服务器节点,并进行测试
接下来配置keepalived的高可用性,这里我们先配置一组主备模式
对于keepalived来说通过判定nginx服务的在线状态的结果来判断这个主机是否可以成为主节点

yum install -y keepalived        //在反向代理服务器上安装keepalived,并设置开机自启
systemctl start keepalived
systemctl enable keepalived 
编辑keepalived,设置检测nginx是否在线的脚本
! Configuration File for keepalived

global_defs {
   notification_email {
     root@locahost
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
        script "/etc/keepalived/chk_file.sh"      //定义脚本
                interval 1                                             //判断命令返回结果
            weight -10                                           //权重减10    
}

vrrp_instance VI_1 {
    state MASTER                                      //主节点
    interface ens33                                     //VIP配置到哪个接口的别名上
    virtual_router_id 43                               //虚拟路由ID 
    priority 100                                           //设置权重
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass poiu
    }
    virtual_ipaddress {
        192.168.153.200/32 dev ens33 label ens33:0   //设置VIP地址,配置的ens33网卡的第一个别名上
    }
 track_script {
        chk_nginx            //调用脚本
        }
}

配置完毕后重新启动服务并将配置文件复制到第二个节点上面
同时修改第二个节点上面的配置文件 state 改成BACKUP,priority改成99
创建检测脚本
在/etc/keepalived目录下创建chk_file.sh文件
内容为killall -0 nginx &> /dev/null,并更改文件为可执行状态
然后查看主节点的IP地址信息

使用keepalived的双主模型实现nginx反向代理的高可用性_第6张图片
使用客户端请求
使用keepalived的双主模型实现nginx反向代理的高可用性_第7张图片
使用keepalived的双主模型实现nginx反向代理的高可用性_第8张图片
现在我们手动停止主节点的nginx服务,然后查看备用节点的IP地址信息
使用keepalived的双主模型实现nginx反向代理的高可用性_第9张图片
此时访问正常,重新启动主节点的nginx服务后,VIP被重新争抢回主节点
接下来配置keepalived的双主模型实现nginx反向代理的高可用性
在主节点的keepalived的配置文件中添加以下配置信息

vrrp_instance VI_2 {        //instance名称更改为2
    state BACKUP            //模式改为备用
    interface ens33
    virtual_router_id 34     //虚拟路由ID任意更改,不能跟上面的VI_1一样
    priority 99                   //权重设置为99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass poiuytre  
    }
    virtual_ipaddress {
        192.168.153.201/32 dev ens33 label ens33:1     //将VIP192.168.153.201配置到ens33网卡的第二个别名上面
    }
track_script {
        chk_nginx
        }
}

将新添加的配置信息复制到备用节点,并作相应的修改state更改成MSASTER,priority改成100
查看两台主机的ip地址信息
第一主节点IP信息为:

使用keepalived的双主模型实现nginx反向代理的高可用性_第10张图片
第二主节点IP信息为:
使用keepalived的双主模型实现nginx反向代理的高可用性_第11张图片
使用客户端进行访问验证第二个主节点是否正常运行
使用keepalived的双主模型实现nginx反向代理的高可用性_第12张图片
使用keepalived的双主模型实现nginx反向代理的高可用性_第13张图片
手动停止第一台高可用服务器的nginx服务,查看第二台高可用服务器的IP信息用来验证双主模型是否成功
使用keepalived的双主模型实现nginx反向代理的高可用性_第14张图片
此时基于keepalived的双主模型实现nginx反向代理的高可用性配置完毕,在实际生产环境中可以将两个VIP地址配置在DNS服务器中,在DNS服务器的配置文件中做两条A记录指向,即可实现请求的负载均衡