基于DNS和Nginx的双vip高可用的web集群项目

项目名称:基于DNS和Nginx的双vip高可用的web集群项目

项目环境:Centos7或Ubuntu服务器8台,nginx,ab,keepalived

项目描述:构建一个基于dns和nginx的双vip负载均衡的web集群项目,通过nsf服务实现数据的统一,并部署监控服务,模拟企业活动中的用户量,实现高并发、高可用,并进行压力测试查看效果

项目步骤:

1、使用3台服务器做后端的real-server,提供真正的web服务,脚本一键安装部署并且配置好nginx长连接,并发数,和worker的进程数等。

2、使用2台服务器做双vip的负载均衡器,使用nginx的http负载均衡功能实现,调度算法使用加权轮询。

3、搭建nfs服务器,保障网站的数据一致性,并且设置后端的real-server开机自动挂载。

4、使用1台服务器做DNS域名解析服务器,搭建一个域名服务器,它所映射的IP地址是负载均衡器集群的双VIP,做到负载均衡的效果。

5、在客户机上使用ab软件进行压力测试,使用keepalived软件给负载均衡器做高可用,防止单点故障。

6、尝试优化整个web集群,使用脚本,隐藏nginx版本号防止攻击,配置页面缓存时间,设置超时连接等。

项目心得:

1、理解了集群的概念,对高性能、高可用、脑裂等现象有了具体的了解,构建了整体运维的框架。

2、明确用户量庞大时,压力测试对整个web集群的重要性,对优化集群有了更深刻的理解。

3、增加机器性能提升成本并不是提高效率方法的唯一方法,也不是最好的方法,运用所学解决问题才是。

4、学会使用脚本提高作业效率,大大节省重复时间提升自动化能力。

前期准备:

1.采用桥接的网络配置方式,配置好每一台机器的IP地址和主机名

2.关闭和禁用虚拟机防火墙

[root@nginx-kafka01 ~]# systemctl stop firewalld

[root@nginx-kafka01 ~]# systemctl disable firewalld

所有机器关闭selinux

临时关闭

[root@nginx-kafka01 ~]# getenforce 0

永久禁用

[root@nginx-kafka01 ~]# sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config

步骤一、使用3台服务器做后端的real-server,提供真正的web服务,脚本一键安装部署并且配置好nginx长连接,并发数,和worker的进程数等。(脚本如下)

[root@nginx-kafka01 ~]# cat onekey_install_nginx.sh

#!/bin/bash

#新建一个文件夹用来存放下载的nginx源码包

mkdir -p /shushan_nginx

cd /shushan_nginx

#新建用户

useradd -s /sbin/nologin tiankai

#下载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/scnginx88 --user=tiankai --with-http_ssl_module --with-http_v2_module --with-threads --with-http_stub_status_module --with-stream

#编译,开启2个进程同时编译,速度会快些

make -j 2

#安装

make install

#启动nginx

/usr/local/scnginx88/sbin/nginx

#修改PATH变量

PATH=$PATH:/usr/local/scnginx88/sbin

echo "PATH=$PATH:/usr/local/scnginx88/sbin" >>/root/.bashrc

#设置nginx的开机启动

echo "/usr/local/scnginx88/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台服务器做双vip的负载均衡器,使用nginx的http负载均衡功能实现,调度算法使用加权轮询。

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

[root@lb-1 conf]# yum install keepalived -y

[root@lb2 conf]# yum install keepalived -y

2.修改配置文件

[root@lb-1 conf]# cd /etc/keepalived/

[root@lb-1 keepalived]# ls

keepalived.conf

[root@lb-1 keepalived]# cat 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

interface ens33

virtual_router_id 58

priority 120

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.227.188

}

}

[root@lb2 keepalived]# cat 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

interface ens33

virtual_router_id 58

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.227.188

}

}

[root@lb-1 keepalived]# service keepalived restart

Redirecting to /bin/systemctl restart keepalived.service

[root@lb-1 keepalived]#

[root@lb2 keepalived]# service keepalived restart

Redirecting to /bin/systemctl restart keepalived.service

在LB1服务器上我们看到vip

[root@lb-1 keepalived]# ip add

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:0c:29:37:fb:39 brd ff:ff:ff:ff:ff:ff

inet 192.168.227.144/24 brd 192.168.227.255 scope global noprefixroute dynamic ens33

valid_lft 1075sec preferred_lft 1075sec

inet 192.168.227.188/32 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::fa78:740d:a3e5:50c4/64 scope link tentative noprefixroute dadfailed

valid_lft forever preferred_lft forever

inet6 fe80::7e6:9c4b:c52f:f311/64 scope link noprefixroute

valid_lft forever preferred_lft forever

vip漂移:master 挂了,vip会漂到backup服务器上

这时候在master上关闭下keepalived服务就可以了,在backup上查看是否有vip地址

[root@lb-1 keepalived]# service keepalived stop

步骤三、搭建nfs服务器,保障网站的数据一致性,并且设置后端的real-server开机自动挂载。

1.安装nfs的相关软件

[root@nfs-server ~]# yum install nfs-utils -y

2.启动nfs-server服务

[root@nfs-server ~]# service nfs-server start

Redirecting to /bin/systemctl start nfs-server.service

nfs自己并没有去对外监听某个端口号,而是外包给了rpc服务,rpc帮助nfs去监听端口,然后告诉客户机和本机的那个进程对应的端口连续

3.共享文件,编辑/etc/exports文件,写好具体的共享的目录和权限

[root@nfs-server ~]# vim /etc/exports

[root@nfs-server web]# cat /etc/exports

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

/download 192.168.0.0/24(rw,all_squash,sync)

/download 192.168.0.190(rw,all_squash,sync)

/download 192.168.0.192(rw,all_squash,sync)

/download 192.168.0.180(rw,all_squash,sync)

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

/web 是我们共享的文件夹的路径--》使用绝对路径 --》需要自己新建

192.168.0.0/24 允许过来访问的客户机的ip地址网段

(rw,all_squash,sync) 表示权限的限制

rw 表示可读可写 read and write

ro 表示只能读 read-only

all_squash :任何客户机上的用户过来访问的时候,都把它认为是普通的用户

root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器匿名用户

no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员

sync 同时将数据写入到内存与硬盘中,保证不丢失数据

async 优先将数据保存到内存,然后再写入硬盘,效率更高,但可能丢失数据

4.新建/web文件

[root@nfs-server ~]# mkdir /web

[root@nfs-server ~]# cd /web

[root@nfs-server web]#vim index.html 创建首页文件,文件内存放自己想要的页面内容

5.刷新输出文件的列表

[root@nfs-server web]# exportfs -rv

exporting 192.168.0.0/24:/web

[root@nfs-server web]# mkdir /download 新建/download

[root@nfs-server web]# exportfs -rv

exporting 192.168.0.190:/download

exporting 192.168.0.192:/download

exporting 192.168.0.180:/download

exporting 192.168.0.0/24:/download

exporting 192.168.0.0/24:/web

复制一点点数据到/download目录下

[root@nfs-server download]# cp /etc/hosts .

[root@nfs-server download]# tar czf boot.tar.gz /boot

tar: 从成员名中删除开头的“/”

6.关闭防火墙

[root@nfs-server download]# service firewalld stop

Redirecting to /bin/systemctl stop firewalld.service

[root@nfs-server download]# systemctl disable firewalld

[root@nfs-server download]# getenforce

Disabled

7.在客户机上挂载nfs服务器上共享的/web和/download目录

[root@web-server2 ~]# yum install nfs-utils -y 安装nfs-utils软件,方便客户机上进行挂载,具有了相关命令了,例如:showmount

[root@web-server2 ~]# showmount -e 192.168.0.139 查看nfs服务器上共享输出了哪些文件夹

Export list for 192.168.0.139:

/web 192.168.0.0/24

/download 192.168.0.0/24

8.挂载nfs服务器上的目录到本机上

[root@web-server2 ~]# mkdir /web 在客户机的本地新建一个目录/web

[root@web-server2 ~]# mount 192.168.0.139:/web /web 将nfs服务器上的/web目录挂载到本地的/web目录,今后访问本地的/web目录,就是访问到nfs服务器上的/web目录

mount 是挂载的命令,可以理解为一种映射

语法: mount nfs服务器的目录 本地的目录

[root@web-server2 ~]# cd /web

[root@web-server2 web]# mkdir /download

[root@web-server2 web]# mount 192.168.0.139:/download /download

[root@web-server2 web]# cd /download/

[root@web-server2 download]# ls

boot.tar.gz hosts

[root@web-server2 download]#

客户机上能否有写的权限要看2种权限:

1.共享权限 --》/etc/exports文件里的权限,例如ro,rw

2.文件系统里的权限 --》/web 在linux里的权限

[root@nfs-server web]# ll -d /web

drwxrwxrwx. 3 root root 56 8月 2 11:55 /web

[root@nfs-server web]# ll -d /download

drwxr-xr-x 2 root root 38 8月 2 11:44 /download ---》nfs客户机挂载后,没有写的权限,因为其他人没有w权限

在nfs服务器上授权

[root@nfs-server web]# chmod a+w /download/

[root@nfs-server web]# ll -d /download

drwxrwxrwx 2 root root 38 8月 2 11:44 /download

在客户机上验证

[root@web-server2 web]# cd /download/

[root@web-server2 download]# mkdir fengdeyong

[root@web-server2 download]# ls

boot.tar.gz fengdeyong hosts

步骤四、使用1台服务器做DNS域名解析服务器,搭建一个域名服务器,它所映射的IP地址是负载均衡器集群的双VIP,将流量导入到不同的负载均衡器上。

关闭防火墙服务和selinux

[root@nameserver ~]# service firewalld stop

[root@nameserver ~]# systemctl disable firewalld

[root@nameserver ~]# cat /etc/selinux/config

SELINUX=disabled 修改disabled

1.安装软件bind,bind-utils 提供了很多的dns域名查询的命令

[root@nameserver ~]# yum install bind* -y

2.设置named服务开机启动,并且立马启动DNS服务

name deamon -- named 提供域名服务的进程的名字

named 是dns的服务的名字

[root@nameserver ~]# systemctl enable named

启动named进程

[root@nameserver ~]# systemctl start named

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

[root@nameserver ~]# vim /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服务

Redirecting to /bin/systemctl restart named.service

[root@dns-client ~]# cat /etc/resolv.conf 查看dns服务器地址

# Generated by NetworkManager

nameserver 192.168.254.134

步骤五、压力测试。

1.下载工具包,使用ab软件进行测试

yum install https-tools -y

2.测试结果

Benchmarking www.sc.com (be patient) Completed 100000 requests Completed 200000 requests Completed 300000 requests Completed 400000 requests Completed 500000 requests Completed 600000 requests Completed 700000 requests Completed 800000 requests Completed 900000 requests Completed 1000000 requests Finished 1000000 requests Server Software: nginx/1.21.1 Server Hostname: www.sc.com Server Port: 80 Document Path: /index.html Document Length: 10 bytes Concurrency Level: 100 Time taken for tests: 249.387 seconds Complete requests: 1000000 Failed requests: 0 Total transferred: 240000000 bytes HTML transferred: 10000000 bytes Requests per second: 4009.83[#/sec] (mean) Time per request: 24.939[ms](mean) Time per request: 0.249[ms](mean, across all concurrent requests) Transfer rate: 939.80[Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0510.141090 Processing: 12025.4181666 Waiting: 11825.3161663 Total: 12528.0231670 Percentage of the requests served within a certain time(ms)50% 2366% 2675% 2880% 2990% 3595% 4698% 6599% 85100% 1670(longest request)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值