基于nginx+keepalived的负载均衡、高可用web集群

这篇具有很好参考价值的文章主要介绍了基于nginx+keepalived的负载均衡、高可用web集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于nginx+keepalived的负载均衡、高可用web集群

项目描述:
本项目旨在构建一个高性能、高可用的web集群,使用ansible批量部署项目环境,nginx实现七层负载均衡,NFS实现web服务器机器的数据同源,keepalived搭建双VIP实现高可用,Prometheus+grafana实现对LB负载均衡服务器以及NFS服务器的监控。

项目环境:
CentOS 7.9、Nginx 1.25.2、Ansiblle 2.9.27、Prometheus 2.46.0、Grafana 10.1.1、NFS nfs v4、ApacheBenchmark 2.3

IP划分:

服务器 IP
LB1 192.168.232.161
LB2 192.168.232.165
Prometheus 192.168.232.166
web1 192.168.232.162
web2 192.168.232.163
web3 192.168.232.167
NFS 192.168.232.164
Ansible 192.168.232.168
AB 192.168.232.169

项目拓扑图:
基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡

关闭所有机器的相关服务

# 临时关闭selinux
setenforce 0
# 永久关闭SELINUX
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
# 关闭防火墙
service firewalld stop
systemctl disable firewalld

一、按照IP规划配置好静态IP。

查看IP地址

ip add

查看默认网关地址

ip route

default via 192.168.232.2

进入网卡文件的配置目录

cd  /etc/sysconfig/network-scripts
vim ifcfg-ens33

# 具体的配置如下
BOOTPROTO="none"      # none/static 表示静态配置ip地址  dhcp  # 表示动态获得ip地址
NAME="ens33"         # 网络连接的名字
DEVICE="ens33"       # 设备名字
ONBOOT="yes"         # 开机激活网卡  yes激活  no 禁用
IPADDR=192.168.232.161    # 具体的ip地址
PREFIX=24             # 子网掩码
NETMASK=255.255.255.0  # 子网掩码
GATEWAY=192.168.232.2    # 默认网关
DNS1=114.114.114.114   # 首选DNS服务器

刷新网络服务

service network restart

测试是否可以上网ping

二、建立免密通道,使用Ansible自动化批量部署软件环境

1、安装配置ansible

yum install epel-release -y
yum install ansible -y

2、编写主机清单

需要远程控制的清单

vim /etc/ansible/hosts

[web_servers]
192.168.232.162 # web1 
192.168.232.163 # web2
192.168.232.167 # web3
 
[lb_servers]
192.168.232.161 # lb1
192.168.232.165 # lb2
 
[nfs_server]
192.168.232.164 # NFS_server

3、在ansible上生成密钥对,并将公钥复制到其他主机上

ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@(其他IP)

4、编写一键安装nginx脚本

mkdir -p /etc/ansible/nginx
cd /etc/ansible/nginx
vim onekey_install_nginx.sh

#!/bin/bash

# 新建一个文件夹存放下载的nginx源码包
mkdir -p /nginx
cd /nginx

# 下载nginx
curl -O http://nginx.org/download/nginx-1.25.2.tar.gz

# 解压nginx源码包
tar xf nginx-1.25.2.tar.gz

# 解决依赖关系
yum install gcc gcc-c++ openssl openssl-devel pcre pcre-devel automake make psmisc  net-tools lsof vim geoip  geoip-devel wget  zlib zlib-devel-y

# 新建一个用户并来动nginx
useradd -s /sbin/nologin chen

# 编译前的配置
./configure --prefix=/usr/local/chennginx1 --user=chen --with-http_ssl_module --with-http_v2_module --with-threads --with-http_stub_status_module --with-stream

# 编译,开启1个进程编译
make -j 1

# 将编译好的二进制文件复制到指定安装路径目录下
make install

# 启动nginx
cd /usr/local/chennginx1/sbin
./nginx

#永久修改PATH变量
PATH=$PATH:/usr/local/chennginx1/sbin
echo "PATH=$PATH:/usr/local/chennginx1/sbin"  >>/root/.bashrc
#设置nginx的开机启动--手动添加
#在/etc/rc.local中添加启动命令
#/usr/local/chennginx1/sbin/nginx
echo "/usr/local/chennginx1/sbin/nginx"  >>/etc/rc.local
#给文件可执行权限
chmod +x /etc/rc.d/rc.local

5、编写一键安装node exporter脚本

mkdir -p /etc/ansible/node_exporter
cd /etc/ansible/node_exporter
vim onekey_install_node_exporter.sh

#!/bin/bash
cd ~
tar xf node_exporter-1.5.0.linux-amd64.tar.gz # 解压node_exporters源码包
mv node_exporter-1.5.0.linux-amd64 /node_exporter
cd /node_exporter
PATH=/node_exporter:$PATH #加入PATH环境变量
echo "PATH=/node_exporter:$PATH" >>/root/.bashrc # 加入开机启动
nohup node_exporter --web.listen-address 0.0.0.0:8090 & # 后台运行,监听8090端口

其中的压缩文件需要从官网https://prometheus.io/download/上下载,然后传到web_servers和lb_servers内的机器的/root根目录下

基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡

6、编写playbook批量部署nginx、keepalived等软件

mkdir /playbook
cd /playbook
vim software_install.yaml

- hosts: web_servers # web集群
  remote_user: root
  tasks:
  # web主机组中编译安装部署nginx集群
  - name: install nginx
    script:  /etc/ansible/nginx/onekey_install_nginx.sh # 调用本地一键安装部署nginx脚本,在远程主机上编译安装
    # web主机组中安装nfs,访问nfs服务器,实现数据同源
  - name: install nfs
    yum: name=nfs-utils state=installed
- hosts: lb_servers # 负载均衡服务器
  remote_user: root
  tasks:
    # lb主机组中编译安装nginx
  - name: install nginx
    script:  /etc/ansible/nginx/onekey_install_nginx.sh
    # lb主机组中安装keepalived,实现高可用
  - name: install keepalived
    yum: name=keepalived state=installed
- hosts: nfs_server # NFS服务器
  remote_user: root
  tasks:
  - name: install nfs
    yum: name=nfs-utils state=installed
# 调用本地onekey_install_node_exporter脚本,批量安装部署node_exporter,为prometheus采集数据
- hosts: web_servers lb_servers
  remote_user: root
  tasks: 
  - name: install node_exporters
    script: /etc/ansible/node_exporter/onekey_install_node_exporter.sh
    tags: install_exporter
  - name: start node_exporters #后台运行node_exporters
    shell: nohup node_exporter --web.listen-address 0.0.0.0:8090 &
    tags: start_exporters # 打标签,方便后面直接跳转到此处批量启动node_exporters

编写完成后执行

ansible-playbook software_install.yaml

三、配置LB服务器实现负载均衡load balance

参考:https://blog.csdn.net/qq_45742976/article/details/132645253?spm=1001.2014.3001.5502

修改LB的配置文件

用于cpu的核心是两个,所以可以修改配置文件中的进程数为2,并将应该worker的并发数修改为2048

worker_processes  2;

events {
    worker_connections  2048;
}

负载均衡器的配置

http {
	upstream chenapp1 {
        server 192.168.232.162;
        server 192.168.232.163;
		server 192.168.232.167;
    }
    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://chenapp1;
        }
}

修改web1和web2的页面显示,然后在浏览器中输入LB服务器的网址,反复刷新可以看见不同的页面

四、配置NFS服务器实现web集群的数据同源

参考:https://blog.csdn.net/qq_45742976/article/details/132653600?spm=1001.2014.3001.5502

1、配置NFS服务

开启NFS服务

service nfs restart

编辑共享文件的配置文件

vim /etc/exports

/web  192.168.232.0/24(rw,all_squash,sync)

/web是共享的文件夹的路径,不会自动产生,需要新建
192.168.232.0是允许来访问的客户机的IP地址段
(rw,all_squash,sync)表示权限的限制

修改完成之后要刷新服务

service nfs resart
或
exportfs -rv

2、在/web文件夹下新建一个HTML文件进行共享

这个HTML文件是做测试用,看是否共享数据成功

[root@nfs web]# cat index.html 
welcome to index!

在其他web服务器上挂载使用共享目录

mount 192.168.232.164:/web /usr/local/scnginx99/html/
		源路径文件(NFS)				本机的挂载点

这个时候再去访问,就会显示NFS服务器中的index.html页面

3、NFS文件系统的自动挂载

将这个命令写在/etc/rc.local目录下,授予执行权限,实现开机挂载

vim /etc/rc.local
	mount 192.168.232.164:/web /usr/local/scnginx99/html/

chmod +x /etc/rc.local

五、在LB服务器上使用keepalived实现双VIP的高可用

参考:https://blog.csdn.net/qq_45742976/article/details/132666585?spm=1001.2014.3001.5502

修改配置文件

修改主LB服务器的配置文件

cd /etc/keepalived/
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_skip_check_adv_addr
   #vrrp_strict    # 注释这一行
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER    # 主LB
    interface ens33
    virtual_router_id 58    # 虚拟路由器id
    priority 120    # 优先级(0~255)
    advert_int 1    # 宣告消息的间隔事件为1秒
    authentication {    # 认证
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {    # VIP
        192.168.232.111
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 59
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.232.112
    }
}

修改从LB的配置文件

cd /etc/keepalived/
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_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP    # 从LB
    interface ens33
    virtual_router_id 58
    priority 100    # 优先级要比主LB小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.232.111
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 59
    priority 120
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.232.112
    }
}

配置完成之后刷新服务

service keepalived restart

六、配置Prometheus+grafana对集群进行监控

1、Prometheus的安装和配置

参考:https://blog.csdn.net/qq_45742976/article/details/132686037?spm=1001.2014.3001.5502

1、安装和配置
  1. 在监控服务器(192.168.232.166)上编译安装

    首先在官网上下载源码包https://prometheus.io/download/
    基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡

    将下载好的源码包传到监控服务器,解压
    基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡

  2. 临时和永久修改PATH变量,添加prometheus路径

    PATH=/prom/prometheus:$PATH
    [root@prometheus prometheus]# cat /root/.bashrc
    # .bashrc
    
    # User specific aliases and functions
    
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
    	. /etc/bashrc
    fi
    PATH=/prom/prometheus:$PATH    # 添加的信息
    
  3. 启动prometheus服务,并让他在后台运行,不受到终端关闭的影响(Prometheus监听9090端口)

    nohup prometheus --config.file=/prom/prometheus/prometheus.yml &
    
  4. 关闭防火墙,并设置永久关闭。然后就可以在服务器上输入192.168.232.166:9090看到监控页面了

    service firewalld stop
    systemctl disable firewalld
    
  5. 将源码二进制安装的Prometheus配置成一个服务,便于管理

    [root@prometheus prometheus]# cat /usr/lib/systemd/system/prometheus.service
    [Unit]
    Description=prometheus
    [Service]
    ExecStart=/prom/prometheus/prometheus --config.file=/prom/prometheus/prometheus.yml
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
    
    # 重新加载systemd相关的服务
    [root@prometheus prometheus]# systemctl daemon-reload
    
    

    将之前使用nohup方式启动的Prometheus服务杀死,再使用以下命令开启

    service prometheus start
    

容器安装prometheus:

docker run -d -p 9090:9090 --name sc-prom-1 prom/prometheus
2、将 NFS服务器和LB服务器作为exporter采集数据
  1. 在官网上下载node节点源码包,解压
    基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡

    tar xf node_exporter-1.6.1.linux-amd64.tar.gz
    mv node_exporter-1.6.1.linux-amd64 /node_exporter
    cd /node_exporter/
    
    
  2. 修改PATH变量

    PATH=/node_exporter/:$PATH
    
    [root@lb node_exporter]# cat /root/.bashrc
    # .bashrc
    
    # User specific aliases and functions
    
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    
    # Source global definitions
    if [ -f /etc/bashrc ]; then
    	. /etc/bashrc
    fi
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/scnginx99/sbin:/usr/local/scnginx99/sbin
    PATH=/node_exporter/:$PATH
    
    
  3. 启动exporter服务,并让他在后台运行,不受到终端关闭的影响(自定义exporter监听8090端口)

    nohup node_exporter --web.listen-address 0.0.0.0:8090 &
    
  4. 在浏览器上访问node节点上的metrics(指标)

    http://192.168.232.164:8090/metrics
    
3、在prometheus server里添加安装exporter程序的服务器
[root@prometheus prometheus]# pwd
/prom/prometheus
[root@prometheus prometheus]# cat prometheus.yml

# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
  - job_name: "LB1"
    static_configs:
      - targets: ["192.168.232.161:8090"]
  - job_name: "LB2"
    static_configs:
      - targets: ["192.168.232.165:8090"]
  - job_name: "NFS"
    static_configs:
      - targets: ["192.168.232.164:8090"]

修改完之后记得重启服务

然后再去浏览器查看监控页面,就可以看到LB和NFS的相关信息了
基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡

2、grafana出图工具

  1. 将grafana和prometheus安装在一台机器上

    官网https://dl.grafana.com/enterprise/release/grafana-enterprise-10.1.1-1.x86_64.rpm下载rpm包,传入prometheus服务器中

    [root@prometheus grafana]# ls
    grafana-enterprise-10.1.1-1.x86_64.rpm
    [root@prometheus grafana]# yum install grafana-enterprise-10.1.1-1.x86_64.rpm 
    
    service grafana-server start
    systemctl enable grafana-server
    

    grafana监听3000端口

    可以在浏览器上访问,用户和密码都为 admin

  2. 配置prometheus的数据源,导入模版
    基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡
    基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡

    这里输入Prometheus的IP地址和端口号
    基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡
    基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡

    导入出图模版
    基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡
    基于nginx+keepalived的负载均衡、高可用web集群,Nginx,项目,nginx,负载均衡

七、配置ApacheBenchmark压力测试

基本用法:

ab -n 请求总数 -c 并发数 URL

其中,-n 表示要发送的请求数,-c 表示并发请求数,URL 是你要测试的目标 URL

安装

yum insttall httpd-tools -y

测试

ab -c 150 -n 10000 http://192.168.232.111/

八、对系统性能资源进行调优,提升系统性能

1、提高系统的并发性能和吞吐量

设置用户打开文件描述符限制,可以使用户打开文件的数量变多。

在Linux系统中,每个进程可以打开的文件描述符数量是有限的,而这个限制在一些高负载的应用场景下可能会成为性能瓶颈。

通过将ulimit -n设置为较大的值,如65535,提高了进程能够同时打开的文件描述符数量,这样应用就能够更好地处理大量连接和文件操作,提高系统的并发性能和吞吐量。

ulimit -n 65535 
 
[root@nginx-lb1 ~]# ulimit -n 65535
[root@nginx-lb1 ~]# ulimit -a      #查看内核参数

2、交换分区调优

交换分区是从磁盘里划分出来的一块空间临时做内存使用的,当物理内存不足的时候,将不活跃的进程交换到swap分区里。但由于交换分区速度慢,尽量不使用文章来源地址https://www.toymoban.com/news/detail-700016.html

[root@lb-2 ~]# cat /proc/sys/vm/swappiness 
30
# 当物理内存只剩下30%的时候,开始使用交换分区,临时修改为0%
echo 0 >/proc/sys/vm/swappiness 

3、对nginx配置文件的参数调优

#user  nobody;
worker_processes  2; # 增加worker进程数量(可以与CPU数量一致)
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events { 
    worker_connections  2048; # 增加每个worker进程的最大并发连接数
}

到了这里,关于基于nginx+keepalived的负载均衡、高可用web集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高可用keepalived + Nginx 负载均衡器

    准备操作: [root@localhost ~]# systemctl stop firewalld  # 或 systemctl disable --now firewalld [root@localhost ~]# setenforce 0 [root@localhost ~]# cd /etc/yum.repos.d [root@localhost ~]# mv repo.bak/* ./ [root@localhost ~]# yum -y install epel-release [root@localhost ~]# yum install -y keepalived nginx         #epel下载的旧版nginx 没有str

    2024年02月01日
    浏览(47)
  • nginx+keepalived实现负载均衡和高可用

    环境准备 IP VIP 环境 客户端 192.168.134.174 Master 192.168.134.170 192.168.134.100 需要配置nginx负载均衡 Backup 192.168.134.172 192.168.134.100 需要配置nginx负载均衡 web1服务器 192.168.134.171 web2服务器 192.168.134.173 1、首先安装nginx服务器(此处采用yum安装) 2、修改nginx的配置文件(配置负载均衡)

    2024年02月13日
    浏览(42)
  • nginx+keepalived负载均衡和高可用配置

    nginx用来负载均衡,keepalived是用来实现VIP故障切换。 nginx+keepalived配置中,后端普通服务器不需要lvs实现负载均衡。 在主备节点上测试 配置nginx之前需要将keepalived停止 在keepalived的配置文件中配置vrrp_script进行实时监控。

    2024年02月12日
    浏览(54)
  • Docker搭建Nginx+keepalived高可用负载均衡服务器

    一、背景 1.nginx高可用 在生产环境下,Nginx作为流量的入口,如果Nginx不能正常工作或服务器宕机,将导致整个微服务架构的不可用。所以负责负载均衡、反向代理的服务(Nginx)为了提高处理性能,高可用,也需要集群部署。本期咋们采用 keepalived 和 Nginx实现高可用。 2.Kee

    2024年04月22日
    浏览(51)
  • nginx两台负载均衡服务器之间使用keepalived实现高可用

    单点故障:某个重要的功能只有一份,如果他出现问题,会导致全局不能使用 “高可用性”(High Availability,缩写为HA)用于描述系统或服务在面临故障、硬件或软件问题时能够继续正常运行的能力。高可用性的目标是最大程度地减少系统中断或停机时间,确保用户可以随时

    2024年02月09日
    浏览(52)
  • web集群学习:基于nginx的反向代理和负载均衡

    目录 一,反向代理 1,环境准备 2,配置代理服务器 3,在物理机上一管理员身份打开文本编辑器,编辑C:WindowsSystem32driversetc目录下的hosts文件 4,访问测试 5,查看日志,并记录客户端真实ip地址 二,负载均衡 1,upstream模块 2,实现配置简单的负载均衡 3,实现backup功能 4,

    2024年02月13日
    浏览(86)
  • LVS-DR模式+keepalived+nginx+tomcat实现动静分离、负载均衡、高可用实验

    实验条件: test2——20.0.0.20——主服务器——ipvsadm、keepalived服务 test3——20.0.0.30——备服务器——ipvsadm、keepalived服务 nginx5——20.0.0.51——后端真实服务器1(tomcat的代理服务器)——nginx服务 nginx6——20.0.0.61——后端真实服务器2(tomcat的代理服务器)——nginx服务 tomcat——

    2024年02月08日
    浏览(68)
  • web集群学习--基于CentOS构建LVS-DR集群、配置nginx负载均衡

    环境准备 配置 1.关闭防火墙和SELinux 2.在node3和node4上安装httpd服务并配置默认访问页面 3.配置LVS负载均衡服务并增加两台RS 4.在node3和node4上绑定VIP并添加本机访问VIP的路由 5.抑制ARP响应 PS:也可以使用arptables实现抑制arp 6.测试访问VIP 至此,基于CentOS构建LVS-DR集群实验完成 环境

    2024年02月13日
    浏览(41)
  • 集群、负载均衡集群、高可用集群简介,LVS模式和haproxy/nginx模式拓扑介绍

    目录 一.集群的定义 1.定义 2.分类 (1)负载均衡集群(LBC/LB) (2)高可用集群(HAC) 二.使用集群的意义 1.高性价比和性能比 2.高可用性 3.可伸缩性强 4.持久和透明性高 三.常见的两种集群模式拓扑 1.LVS(-DR)集群模式 (1)工作架构 (2)LVS下的相关术语 (3)LVS的工作模式

    2024年02月13日
    浏览(43)
  • LVS+KeepAlived高可用负载均衡集群

    高可用集群只需要在调度器上多进行一台或两台(服务器本身的价格比较昂贵,一般备用的服务器的数量会和当前业务创造的价值对等)的设置,就可避免因调度器瘫痪业务中断的风险,所以实现了真正的高可用的效果。 1.普通群集 普通的群集的部署是通过一台度器控制调配

    2024年02月09日
    浏览(80)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包