当前位置: 代码迷 >> 综合 >> keepalived+nginx负载均衡高可用集群
  详细解决方案

keepalived+nginx负载均衡高可用集群

热度:65   发布时间:2023-12-04 11:47:32.0

keepalived+nginx负载均衡高可用集群

  • 1. 什么是集群
  • 2. 集群的架构作用以及特点:
  • 3. 集群主要分成三大类:
  • 4. 集群图解
  • 5.环境说明:
    • 5.1 首先关闭防火墙和selinux
    • 5.2 挂载镜像
    • 5.3 源码安装nginx软件的依赖
    • 5.4 解压nginx源码包,可以去nginx官网下载源码包(www.nginx.org),解压完之后会生成一个目录,我么进入这个目录
    • 5.5 进入目录之后再对其进行编译
    • 5.6 安装nginx
    • 5.7 在两台web主机上修改nginx的文件
    • 5.8 修改完之后启动nginx服务
    • 5.9 修改nginx的配置文件
    • 5.10 下面模拟代理出现故障,通过keepalived实现将IP自动切换到另一台代理服务器上.在两台代理端上都安装keepalived.
    • 5.11 输入VIP地址之后就能看到下面的界面了
    • 5.12 验证keepalived会不会实现自动切换
    • 5.13 会出现以下界面

1. 什么是集群

  • 就是一组计算机,它们作为一个整体向用户提供一组网络资源,这些单个的计算机系统就是集群的节点.
  • 简单来说就是将单个计算机组合起来成为一个整体对外提供服务,就称之为集群.

2. 集群的架构作用以及特点:

  • 可扩展性:集群的性能不限于单一的服务实体,新的服务实体可以动态的加入到集群,从而增加集群的性能.
  • 高可用性: 当一台服务器出现故障时,这台服务器上所运行的程序将会被另一台服务器自动接管.
  • 负载均衡: 将任务比较均匀的分布到集群环境中,可以有效的减少资源的浪费和过剩,提高数据吞吐量.

3. 集群主要分成三大类:

  • HA: 高可用集群
  • LBC: 负载均衡集群/负载均衡系统
  • HPC: 科学计算集群/高性能计算集群

4. 集群图解

image.png

5.环境说明:

node1和node2为代理,node3和4提供网站服务

主机 IP地址
node1 192.168.182.137
node2 192.168.182.138
node3 192.168.182.139
node4 192.168.182.140

5.1 首先关闭防火墙和selinux

[root@node1 opt]# systemctl stop firewalld.service
[root@node1 opt]# systemctl disable firewalld.service
[root@node1 opt]# setenforce 0
[root@node1 opt]# getenforce 0

5.2 挂载镜像

先创建挂载点

[root@node1 opt]# mkdir /mnt/cdrom
将ISO镜像挂载到创建的目录下
[root@node1 opt]# mount /dev/sr0 /mnt/cdrom/
创建本地yum源
[root@node1 opt]# cat /etc/yum.repos.d/w.repo 
[BaseOS]
name=BaseOS
baseurl=file:///mnt/cdrom/BaseOS
gpgcheck=0
enabled=1
[AppStream]
name=AppStream
baseurl=file:///mnt/cdrom/AppStream
gpgcheck=0
enabled=1

5.3 源码安装nginx软件的依赖

[root@node1 nginx-1.18.0]# yum -y install gcc pcre-devel openssl-devel zlib

5.4 解压nginx源码包,可以去nginx官网下载源码包(www.nginx.org),解压完之后会生成一个目录,我么进入这个目录

[root@node1 opt]# tar -zxf nginx-1.18.0.tar.gz
[root@node1 opt]# cd nginx-1.18.0

5.5 进入目录之后再对其进行编译

这里可以指定编译安装的路径,这里我们放在/opt/nginx目录下

[root@node1 nginx-1.18.0]# ./configure --prefix=/opt/nginx

5.6 安装nginx

安装也是在此目录下

[root@node1 nginx-1.18.0]# make && make install

以上步骤每一台机器上都要执行.

5.7 在两台web主机上修改nginx的文件

[root@node3 ~]# cat /opt/nginx/html/index.html 
<marquee><font color=red><h1>web01<marquee>[root@node4 ~]# cat /opt/nginx/html/index.html 
<marquee><font color=red><h1>web02<marquee>

5.8 修改完之后启动nginx服务

[root@node3 ~]# /opt/nginx/sbin/nginx 
[root@node4 ~]# /opt/nginx/sbin/nginx

5.9 修改nginx的配置文件

在配置文件里面添加下面的内容
注意:这个两台代理端都需要做同样的配置,这样时为了防止137这个主机宕机时也还有第二个代理来提供服务,保证服务的正常运行.

#gzip  on;34     upstream webserver {     35        server 192.168.182.139;36        server 192.168.182.140;37 }   
// upstream的意思是定义集群,后面跟集群的名字;在下面写要的集群里的主机,一个server就代表着一个主机.集群定义完成之后,就要调用集群了.添加下面的内容用来定义集群
location / {47         proxy_pass http://webserver; //这里写要定义的集群名字.48             root   html;
修改完之后,启动nginx服务去访问
[root@node1 ~]# vim /opt/nginx/conf/nginx.conf
[root@node2 ~]# vim /opt/nginx/conf/nginx.conf

// 访问到下面的页面说明成功,并且每刷新一次就会在两个web端不停的跳转.
image.png

 - 说明:你去访问137这个代理主机,而出现的web页面是由web01,也就是139这个主机提供的.当你去访问137这个主机时,137这个代理主机就会将请求转给web01和web02这个两个主机,由这个来两个服务器来提供服务.

5.10 下面模拟代理出现故障,通过keepalived实现将IP自动切换到另一台代理服务器上.在两台代理端上都安装keepalived.

// keepalived实现故障的自动切换
// - keepalived通过VIP地址实现故障自动切换,这里的VIP地址一般为公网IP

[root@node1 nginx-1.18.0]# yum -y install keepalived
修改keepalived配置文件,注释掉 vrrp_strict这一行
1 ! Configuration File for keepalived2 3 global_defs {4    notification_email {5      acassen@firewall.loc6      failover@firewall.loc7      sysadmin@firewall.loc8    }
这几行的功能就是如果出现错误可以通过发邮件的方式告诉你10    smtp_server 192.168.200.111    smtp_connect_timeout 3012    router_id LVS_DEVEL13    vrrp_skip_check_adv_addr14    vrrp_strict15    vrrp_garp_interval 016    vrrp_gna_interval 017 }
这里是写发件人是谁主要修改下面的内容:
19 vrrp_instance VI_1 {20     state MASTER  //这一行表示当前服务器的身份21     interface eth0  //这一行将这个eth0 改为本机的网卡名称,当出现故障时能自动切换这里我们改为ens160,两台都改22     virtual_router_id 5123     priority 100  //这时当前主机的优先级,需要修改主机上的优先级,这里的数字越大优先级越高.24     advert_int 1  //心跳检测,每隔几秒检测一次25     authentication {   //这里主机间身份验证的方式,默认是用密码验证的方式26         auth_type PASS27         auth_pass 1111  //默认4个128     }29     virtual_ipaddress {   //这里用来指定VIP地址30         192.168.200.16   //这里我们用私网IP来模拟,按需求进行增减.31         192.168.200.17    /32         192.168.200.1833     }34 }
将备用的代理服务器也就是138的state MASTER这一行的MASER改为BACKUP;MASER代表主的意思,BACKUP就是备用的意思.virtual_ipaddress {30         192.168.182.100/24  //代理端此处保持一致.
这两个台主机都要写一样的IP地址.修改之后启动服务
[root@node1 ~]# systemctl start keepalived.service
[root@node2 ~]# systemctl start keepalived.service

启动服务之后,我们发现在ens160这个网卡下多了一个IP,这个IP就是刚才我们在配置文件里面所指定的VIP地址

image.png

5.11 输入VIP地址之后就能看到下面的界面了

image.png

5.12 验证keepalived会不会实现自动切换

先关闭keepalived服务,再输入VIP地址192.168.182.100

[root@node1 ~]# systemctl stop keepalived.service

5.13 会出现以下界面

image.png

// 当代理端出现问题就使用VIP地址进行访问,当代理端恢复之后就使用代理的IP

// 当nginx代理出现问题时实现自动切换
将nginx和keepalived进行绑定,当nginx代理出现问题也能进行切换
我们这里写一个脚本来进行实现

[root@node1 ~]# vim /etc/keepalived/nginx.sh
#!/bin/bash
content=`ps -C nginx | grep -vc PID`
if [ $content -eq 0 ];then/opt/nginx/sbin/nginxsleep 5
content= `ps -C nginx | grep -vc PID`
elif [ $content -eq 0 ];thensystemctl stop keepalived.service
elseecho "nice"
fi

// 验证
先关闭nginx服务,给脚本执行权限并执行脚本验证.

[root@node1 ~]# /opt/nginx/sbin/nginx -s stop
[root@node1 ~]# chmod +x /etc/keepalived/nginx.sh
[root@node1 ~]# /etc/keepalived/nginx.sh
[root@node1 ~]# ps -C nginxPID TTY          TIME CMD739623 ?        00:00:00 nginx739625 ?        00:00:00 nginx
nginx启动成功

// 让keepalived自动检测执行脚本
修改keepalived的配置文件,指定脚本路径,定义监控项,添加一下内容:

vrrp_script nginx {   //这是keepalived提供定义脚本监控项的模块,nginx是监控项的名字,可随意.script "/etc/keepalived/nginx.sh"   //这里是指定脚本的路径interval 2   //指定多久去检测脚本,这里是2秒
vrrp_instance VI_1 {  //在此行上方添加调用监控项
track_script {   //通过此参数来调用上面定义的监控项的名称.nginx
}virtual_ipaddress {  //在此行上面添加