基于Keepalived的Web集群项目

目录

1.服务器拓扑图

2.项目描述

3.项目环境

4.项目步骤

4.1 集群整体规划

4.2 安装Nginx

4.2 搭建DNS服务器

4.3 Nginx实现负载均衡

realip问题

4层/7层负载均衡

4.4 NFS实现文件共享

4.5 压力测试ab

4.6 Keepalived双vip实现高可用

4.7 Prometheus+Grafana监控数据

5.项目总结


1.服务器拓扑图

2.项目描述

      本项目是基于Nginx做负载均衡,Keepalived的双vip实现高可用,NFS实现文件共享,同时使用Prometheus+Grafana进行Web服务器监控的项目。考虑到企业对于高并发和高可用的追求,本项目模拟企业的业务环境构建一个Web集群,并通过压力测试来检验其性能,寻找优化的可能。

3.项目环境

   Centos7.9(1核2G)8台服务器,Nginx1.23.2,Keepalived1.3.5,NFS4,Prometheus2.34.0,

Grafana9.3.2。

4.项目步骤

4.1 集群整体规划

客户机:192.168.237.136

LB1:192.168.237.130     

LB2: 192.168.237.129

Web1:192.168.237.131

Web2:192.168.237.132

Web3:192.168.237.133

NFS:192.168.237.134

Prometheus:192.168.237.135

4.2 安装Nginx

   1.编写Nginx一键安装脚本,脚本名:onekey_install_nginx.sh。

#!/bin/bash#新建一个文件夹用来存放下载的nginx源码包
mkdir  -p  /nginx
cd  /nginx#新建用户
useradd  -s /sbin/nologin  hehe#下载nginx
curl -O http://nginx.org/download/nginx-1.23.2.tar.gz#解压nginx源码包
tar  xf  nginx-1.23.2.tar.gz#解决依赖关系
yum  install  gcc  openssl openssl-devel  pcre pcre-devel automake make -y#编译前的配置
cd nginx-1.23.2./configure  --prefix=/usr/local/nginx99   --user=hehe  --with-http_ssl_module  --with-http_v2_module   --with-threads    --with-http_stub_status_module   --with-stream #编译,开启两个进程同时编译,速度更快
make -j 2 #安装
make install#启动nginx
/usr/local/nginx99/sbin/nginx#修改PATH变量
#临时修改
PATH=$PATH:/usr/local/nginx99/sbin
#永久修改
echo "PATH=$PATH:/usr/local/nginx99/sbin" >>/root/.bashrc#设置nginx的开机启动
echo "/usr/local/nginx99/sbin/nginx"  >>/etc/rc.local
chmod +x /etc/rc.d/rc.local #selinux和firewalld防火墙都关闭
service firewalld stop
systemctl disable firewalld#临时关闭selinux
setenforce 0
#永久关闭selinux
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config 

2.查看nginx是否启动成功

[root@lb nginx]# ps aux|grep nginx
root       1557  0.0  0.0  69936  1472 ?        Ss   14:41   0:00 nginx: master process nginx
hehe       1558  0.0  0.1  70880  2376 ?        S    14:41   0:00 nginx: worker process
hehe       1559  0.0  0.1  70880  2624 ?        S    14:41   0:00 nginx: worker process
hehe       1560  0.0  0.1  70880  2376 ?        S    14:41   0:00 nginx: worker process
hehe       1561  0.0  0.1  70880  2864 ?        S    14:41   0:00 nginx: worker process
root       1606  0.0  0.0 112824   980 pts/0    S+   15:41   0:00 grep --color=auto nginx

[root@lb nginx]# netstat -anplut|grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1557/nginx: master  
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1557/nginx: master 

3.浏览器进行访问,默认显示Nginx的欢迎页面,这里使用自定义页面:

 4.为了防止漏洞攻击,可以对Nginx的版本进行隐藏。

   使用 core_module/server_tokens 模块,在 nginx.conf 文件中:

 查看效果:

 5.Nginx里有许多模块可以实现许多功能,如状态统计、访问控制、下载功能、限制连接数等,这里碍于篇幅不再赘述。

4.2 搭建DNS服务器

1.准备工作:关闭防火墙服务和selinux

service firewalld stop
systemctl disable firewalld

2.安装软件bind

yum install bind* -y

3.设置named服务开机启动,并且启动DNS服务

#开机激活named
systemctl enable named

#开机立马启动named进程
ystemctl start named  


#查看是否启动成功
 ps aux|grep named
netstat -anplut|grep named    

4.修改配置文件,重启服务器允许其他电脑能过来查询dns域名

[root@lb ~]# vim /etc/named.conf
options {
        listen-on port 53 { any; };       #修改为any
        listen-on-v6 port 53 { any; };   #修改为any
         ...
        allow-query     { any; };     #修改为any
        

#重启named服务
[root@lb ~]# service named restart       

#修改本机的dns解析文件,增加本机dns服务器地址
[root@lb ~]# vim /etc/resolv.conf
# Generated by NetworkManager
#nameserver 114.114.114.114
nameserver 192.168.237.130

5.测试是否搭建成功

[root@lb conf]# nslookup
> www.baidu.com
Server:        192.168.237.2
Address:    192.168.237.2#53

Non-authoritative answer:
Name:    www.baidu.com
Address: 14.215.177.38
Name:    www.baidu.com
Address: 14.119.104.189
www.baidu.com    canonical name = www.a.shifen.com.

4.3 Nginx实现负载均衡

1.以LB1为例,在 nginx.conf 文件中:

2.查看页面效果

注意到此时权重值相同,按照默认的轮询算法,会依次显示三个Web服务器的index.html页面

 

 3.这里是默认是轮询算法,Nginx还有其他两种算法,如:最小连接数、ip-hash。

使用时在 nginx.conf 文件中添加一条语句即可。

1.默认是轮询, #单纯的轮询可以不指定权值
2.轮询还包含加权轮询,需要指定权值,权值大的转到该页面的概率更大
3.需要使用哪个轮询算法,指明即可

realip问题

Q:后端的real server不知道前端真正访问的ip地址,只是知道负载均衡的ip地址,如何让后端的real server知道前端真正的用户的ip地址?

A:1.在负载均衡器上修改http请求报文头部字段,添加一个X-Real-IP字段

2.在后端real server上使用这个x_real_ip这个字段

 

 3.查看是否能获取到前端的ip地址

在后端服务器的 access.log 里:

4层/7层负载均衡

  • 7层负载均衡:使用nginx作为7层负载均衡。nginx是根据http协议来做负载均衡的,而http协议工作在应用层,是web服务的一部分,按照OSI7层网络参考模型,属于第7层。只能对http协议做负载均衡。

  • 4层负载均衡:传输层完成所有工作。是根据端口号来区分不同的业务。支持的服务数量多:可以支持非http服务。效率高,因为做的事情要少一些。

由于篇幅限制,这里只展示4层负载均衡的过程:

在 nginx.conf 文件中:

stream {upstream dns_servers {least_conn;server 192.168.136.130:53;server 192.168.136.131:53;server 192.168.136.132:53;}upstream web_servers {server 192.168.237.131:80;server 192.168.237.132:80;server 192.168.237.133:80;}server {listen     53 udp;proxy_pass dns_servers;}server {listen   80  ;proxy_pass web_servers;}
}events {worker_connections  1024;
}worker_processes  2;

此时访问服务器,仍然可以实现负载均衡。

4.4 NFS实现文件共享

1.安装并启动NFS

yum install nfs-utils -y

service nfs restart

2.添加exports配置

共享出去的目录建议在根目录下,方便寻找,路径简洁

#共享web出去,允许192.168.237.0/24网段的机器能过来访问,只有只读的权限。

[root@nfs /]# cat /etc/exports
/web    192.168.237.0/24(ro,all_squash,sync)

查看共享目录 /web

[root@nfs web]# ll
总用量 4
drwxr-xr-x 2 root root  6 3月  22 16:41 cs
-rw-r--r-- 1 root root 26 3月  19 15:21 index.html

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

[root@nfs web]# exportfs -rv  
exporting 192.168.237.0/24:/web

3.刷新NFS服务

service nfs restart

4.关闭 selinux 和防火墙

#nfs服务器上:
[root@nfs web]# getenforce
Disabled
#关闭防火墙
[root@nfs web]# service firewalld stop

5.在其他的web服务器上挂载使用共享目录(共享文件夹)

#安装并启动NFS

yum install nfs-utils -y

service nfs restart

#挂载

mount  192.168.237.134:/web  /usr/local/nginx99/html/

6.访问页面查看效果

4.5 压力测试ab

 前期工作: 记得启动nginx!!

1.准备一台虚拟机,进行测试。
2.yum install httpd-tools -y  得到ab命令

开始压力测试:

#-c:并发数   -n:请求数

ab -c 100 -n 1000 http://192.168.237.130/

#一步一步增加并发数和请求数

#最终发现当并发数为1000,请求数为1000的时候,效果最好

ab -c 1000 -n 1000 http://192.168.237.130/

结果如下:

 下面对以上参数进行解释:

Requests per second:吞吐率,最关心的指标之一,相当于 LR 中的每秒事务数,后面括号中的 mean 表示这是一个平均值。

Time per request:用户平均请求等待时间,最关心的指标之二,相当于 LR 中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值。

Time per request: 服务器平均请求处理时间,最关心的指标之三。

4.6 Keepalived双vip实现高可用

vip是虚拟的ip地址,真正对外提供业务ip地址,可以告诉用户的。

首先,明确一个问题,为什么需要使用双vip呢?

启动2个vrrp实例,每台机器上都启用2个vrrp实例,一个做master,一个做backup,启用2个vip,每台机器上都会有一个vip,这2个vip都对外提供服务,这样就可以避免单vip的情况下,一个很忙一个很闲。  可以提升设备的使用率。

1.负载均衡器上都需要安装nginx,使用nginx做7层负载均衡

2.安装keepalived软件,在2台负载均衡上都安装

yum install keepalived -y

3.修改配置文件

LB1:/etc/keepalived/keepalived.conf 文件

LB2:/etc/keepalived/keepalived.conf 文件

4.重启keepalvied

service keepalived restart

5.实现效果:会在LB1服务器和LB2服务器上看见vip

4.7 Prometheus+Grafana监控数据

在Prometheus服务器上安装:

1.安装prometheus server

#1.上传下载的源码包到linux服务器

#2.解压源码包

tar xf prometheus-2.34.0.linux-amd64.tar.gz

#3.修改解压后的压缩包名字

mv prometheus-2.34.0.linux-amd64 prometheus

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

PATH=/prom/prometheus:$PATH

vim /root/.bashrc

PATH=/prom/prometheus:$PATH        #添加

2.执行prometheus程序

nohup prometheus  --config.file=/prom/prometheus/prometheus.yml &

#查看prometheus的进程和端口号

ps aux|grep prome

netstat -anplut|grep prome      #端口号为9090

#关闭服务器上的firewalld服务并设置永久不启动

 service firewalld stop

systemctl disable firewalld

3.查看效果:访问http://192.168.237.135:9090

在node节点服务器上

1.安装exporter程序

#1.下载node_exporter-1.4.0-rc.0.linux-amd64.tar.gz源码,上传到节点服务器上

#2.解压

tar xf node_exporter-1.4.0-rc.0.linux-amd64.tar.gz

#3.修改解压后的压缩包名字

mv node_exporter-1.4.0-rc.0.linux-amd64 /node_exporter

#4.临时和永久修改PATH变量,添加node exporter的路径

PATH=/node_exporter/:$PATH

 vim /root/.bashrc

PATH=/node_exporter/:$PATH     #添加

2.执行node exporter 代理程序agent

#具体的端口号,可以自己定义,只要不和其他的服务冲突就可以

nohup node_exporter --web.listen-address 0.0.0.0:8090  &

3.实现效果:访问 http://192.168.237.130:8090/和http://192.168.237.129:8090/

 将Grafana和Prometheus安装在同一台机器上(wb1)

1.安装Grafana

wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.3.2-1.x86_64.rpm
yum install grafana-enterprise-9.3.2-1.x86_64.rpm

2.启动Grafana

service grafana-server start
#监听的端口号是3000

#设置grafana开机启动
[root@web1 grafana]# systemctl enable grafana-server

3.查看效果:访问 http://192.168.237.135:3000

4.导入Grafana模板,与Prometheus结合进行监控

图形化界面显示了服务器各种数据,如CPU使用率,内存使用率等,方便运维人员对服务器的状态有更好的了解和把控。

5.项目总结

1.实现了一键部署和安装,明白运维自动化的重要性;

2.对高性能和高可用有了更深刻的认识,并争取对系统进行更好的优化;

3.了解到了DNS负载均衡,4层/7层负载均衡的原理并进行了应用;

4.在压力测试下,看到了本服务器能承受的最大并发数和连接数;

5.接触到了监控软件,对图形化界面展示数据有了更直观的感受


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部