目录
一、项目初步环境的搭建
9台8核4G的centos7-3.10.0服务器,其中包括3台backup服务器,2台负载均衡器,1台配置了prometheus的监控服务器,1台NFS服务器,1台DNS服务器和1台压力测试机器;nginx版本为nginx-1.22.1;keepalived
二、项目描述
构建一个基于nginx的7层负载均衡web集群,模拟企业的业务项目环境实现高并发、高可用的web集群,通过ab进行压力测试整个集群的性能,并不断进行改进
三、项目步骤
0.对本次集群项目进行网络规划,搭建好9台centos7服务器,配置好网络。
(web1的配置,其余机器按此方法进行同样的配置,注意IP地址的分配)
1.首先构建3台为真正提供web服务的后端服务器(backend server),使用脚本安装部署nginx软件,实现web服务功能,配置了状态统计模块,负载均衡,https等功能模块,使用nginx实现了7层负载均衡(也可以实现4层负载均衡)。
安装脚本:
#!bin/bash/
#解决软件的依赖关系,需要安装的依赖包
yum install epel-release -y
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make psmisc net-tools lsof vim wget -y#新建用户和组
useradd luojie -s /sbin/nologin#下载nginx软件
mkdir /usr/local/luojie99 -p
cd /usr/local/luojie99
wget http://nginx.org/download/nginx-1.22.1.tar.gz#解压文件
tar xf nginx-1.22.1.tar.gz
#进入解压后的文件
cd nginx-1.22.1#编译前的配置
./configure --prefix=/usr/local/scluojie99 --user=luojie --group=luojie --with-http_ssl_module --with-threads --with-http_v2_module --with-http_stub_status_module --with-stream --with-http_gunzip_module#编译,编译安装
make && make install#修改PATH变量
echo "PATH=$PATH:/usr/local/scluojie99/sbin" >>/root/.bashrc
#执行修改了环境变量的脚本
source /root/.bashrc
#stop firewalld 设置下次开机不启动firewalld
service firewalld stop
systemctl disable firewalld#临时停止selinux和永久停止seLiunx
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config#开机启动
chmod +x /etc/rc.d/rc.local
echo "/usr/local/scluojie99/sbin/nginx" >>/etc/rc.local#启动nginx
/usr/local/scluojie99/sbin/nginx
2.搭建2台负载均衡器LB1,LB2,使用脚本配置好nginx服务,使用Keepalived实现高可用,搭建双vip的负载均衡高可用系统,同时在2台负载均衡器上开启健康检测功能。
①负载均衡功能的实现:在负载均衡器LB上配置upstream模块,添加后端主机。
②keepalived实现高可用的VIP飘移配置:
双VIP配置:
③健康检测功能:定义一个健康检测脚本,当负载均衡服务器挂了的时候,关闭该负载均衡器的nginx服务
3.搭建nfs服务器来解决web集群数据一致性的问题,同时3台backend server挂载nfs文件系统共享的文件并设置开机自动挂载。
①nfs服务器
1.安装nfs服务
[root@nfs ~]# yum install nfs-utils -y
2.启动nfs服务
[root@nfs ~]# service nfs restart
Redirecting to /bin/systemctl restart nfs.service3.编辑共享文件的配置文件
[root@nfs ~]# vim /etc/exports[root@nfs~]# cat /etc/exports
/data 192.168.205.0/24(rw,no_root_squash,no_all_squash,sync)
#共享/data出去,允许102.168.205.0/24网段的机器能过来访问,只有只读的权限
4.创建共享出去的文件夹
[root@nfs ~]#mkdir /data
[root@nfs ~]#cd /data
[root@nfs ~]#vim index.html #定义共享主页
[root@nfs data]# exportfs -rv
exporting 192.168.205.0/24:/data[root@nfs data]# service nfs restart
Redirecting to /bin/systemctl restart nfs.service5.关闭防火墙防止其他的机器能访问过来
[root@nfs data]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
②web服务器配置:将nfs共享的目录,挂载到nginx提供网页服务的目录/usr/local/scluojie99/html/
0.每台挂载使用nfs共享目录的客户机都需要安装nfs
yum install nfs-utils -y1.在后端服务器挂载共享文件(三台后端服务器相同的操作)
[root@web1 network-scripts]# mount 192.168.205.136:/data /usr/local/scluojie99/html/
2.df命令查看是否挂载成功
[root@web1 network-scripts]# df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 919500 0 919500 0% /dev
tmpfs 931516 0 931516 0% /dev/shm
tmpfs 931516 9784 921732 2% /run
tmpfs 931516 0 931516 0% /sys/fs/cgroup
/dev/mapper/centos-root 17811456 1762316 16049140 10% /
/dev/sda1 1038336 153680 884656 15% /boot
tmpfs 186304 0 186304 0% /run/user/0
192.168.205.136:/data 17811456 1583616 16227840 9% /usr/local/scluojie99/html!!! 这显示了表示挂载上了
4.搭建了内部dns服务,进行域名解析。
0.准备工作:关闭防火墙和selinux
[root@dns ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service[root@dns ~]# systemctl disable firewalld
[root@dns ~]# iptables -L #查看防火墙规则
Chain INPUT (policy ACCEPT)
target prot opt source destinationChain FORWARD (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destination[root@dns ~]# getenforce
Enforcing[root@dns ~]# vim /etc/selinux/config
[root@dns ~]# cat /etc/selinux/config# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled #改这里
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted1.安装bind软件实现dns域名解析
[root@dns ~]# yum install bind* -y
2.设置named服务开机启动,并且立马启动DNS服务(named 是dns的服务的名字)
[root@dns ~]# systemctl enable named
[root@dns ~]# systemctl start named3.修改配置文件,配置dns服务地址
[root@dns ~]# vim /etc/resolv.conf
[root@dns ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.205.24.修改配置文件,重启服务器允许其他电脑能过来查询dns域名
[root@dns ~]# vim /etc/named.conf[root@dns ~]# cat /etc/named.conf
options {
listen-on port 53 { any; }; 修改
listen-on-v6 port 53 { any; }; 修改
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; 修改
[root@nameserver ~]# service named restart #重启named服务
主配置文件: /etc/named.conf
次要配置文件:/etc/named.rfc1912.zones###为web后端三台服务器提供域名解析服务的配置
1.修改配置文件,告诉named为sc.com提供域名解析
[root@dns named]# vim /etc/named.rfc1912.zoneszone "sc.com" IN {
type master;
file "sc.com.zone";
allow-update { none; };
};2./var/named/ 存放dns域名解析的数据文件的 --> 创建sc.com的数据文件
named.ca 存放13台根服务器的ip地址
[root@dns named]# cp -a named.localhost sc.com.zone复制产生一个sc.com的数据文件
[root@LB named]# cat sc.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 192.168.2.197
www A 192.168.2.197
vue A 192.168.2.88
ftp A 192.168.2.120
tongtong A 192.168.2.136
tiankai A 112.1.1.1
kaikai CNAME tiankai
5.搭建基于prometheus+grafana的监控系统,对整个web集群的进行数据采集及监控,选择grafana合适的模板以图表的方式展示数据。
安装promethues的方式:
①源码安装
②配置成一个服务安装
安装和启动node-exporter
步骤:
1.启动prometheus server的容器
2.到后端linux server上安装exporter,并且启动
3.在prometheus server的配置文件里添加被监控的服务器
4.重启prometheus server对应的容器
5.查看效果(访问promethues机器的网址)
安装garafana,添加数据源并配置出图模板
监控的数据:磁盘读写速度(IOPS),网络Socket连接信息,CPU使用率,内存使用率,网络流量等
6.使用ab软件对整个web集群进行压力测试,测试整个集群的并发连接数及性能。
ab -n 100 -c 10 http://test.com/
其中-n表示请求数,-c表示并发数[root@ab ~]# yum install httpd-tools -y
7.对nginx的参数及linux系统的内核参数进行优化,考虑增加nginx的缓存功能、配置rewite模块等。