热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)技术流ken...

前言最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客。数据库集群请参考《MySQL集群架构篇:MHAMySQL-PROXYL

 

前言

 

最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客。数据库集群请参考《MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken》下面是项目的一些简单介绍。

 

WEB集群项目简介

 

随着网站访问量的激增,势必会导致网站的负载增加,现需求搭载一套高性能,高负载,高可用的网站集群架构以保障网站的持续、高效、安全、稳定的运行。

针对以上需求,我们采用了如下的技术:

  • 使用负载均衡技术来实现网站请求的调度分发,减小后端服务器的压力。
  • 配置了KEEPALIVED解决单点故障问题。
  • 采用动静分离的技术,客户端请求会根据请求文件类型往不同的后端节点进行转发、调度,均衡每个节点的压力。
  • 数据库采用读写分离及级联复制的架构,使得数据的写入和读取更加的快捷。
  • 为了保障数据库的持续运行及安全,我们部署了MHA实现数据库的高可用,可实现即时报警及故障切换。
  • 为了保障数据的安全,定时做了数据库的完全备份以及增量备份。
  • 针对网站数据做了实时差异化备份,保证数据的一致性和完整性。
  • 分布式监控系统,实时监测各个节点的运行状况;邮件报警通知机制,做到实时报警通知,快速定位问题,解决问题。

  

WEB集群项目环境说明

 

² 系统版本:CentOS Linux release 7.5.1804 (Core)

² 内核版本:3.10.0-862.el7.x86_64

² SELinux关闭状态

² Firewalld关闭状态

 

WEB集群项目图片示例

 

 

WEB集群项目架构说明

 

第一部分:WEB集群

1.当用户请求经过路由器转发进网络中,由Keepalived+Lvs组成的一台服务器首先接收请求,根据配置好的调度规则转发至后端服务器节点。在这里准备了两台服务器,使用Keepalived解决单点故障问题,实现服务的高可用。

2.由Keepalived+Lvs转发过来的用户请求进入到缓存代理服务器当中。这里使用Nginx做了一个缓存服务器以及代理服务器,如果缓存中有用户请求的缓存数据,就会直接返回给客户端,如果没有用户请求数据的缓存就会根据文件类别进行往后方节点转发。

3.如果客户请求是静态文件就会被调度到静态服务器。静态服务器由apache构建,静态服务器提供静态文件,并由后方的文件共享服务器提供文件。

4.如果客户请求是动态文件就会被调度到动态服务器。动态服务器由nginx构建,动态服务器提供动态文件,这里做了一个apache,mysql,php分离的架构。

5.把需要部署的网站包放在文件共享服务器。文件共享服务器部署NFS。

6.对文件共享服务器做好备份,防止数据丢失。这里采用rsync+inotify实现数据的完全备份,保证数据的一致性。

 

第二部分:监控集群

1.监控采用zabbix,并使用分布式监控系统,减小主监控节点的压力。

2.两个mysql-proxy分别监控web集群和mysql集群,实时反应每个节点的状态信息,快速定位故障节点进行修复。

3.在zabbix服务器端一起配置了DNS以及NTP服务,分别提供内部服务器的网站域名解析服务,以及时间同步服务。

 

IP地址分配

 

主机名(角色)

IP地址

keepalived+lvs主

10.220.5.131

keepalived+lvs备

10.220.5.132

VIP

10.220.5.133

代理缓存1

10.220.5.134

代理缓存2

10.220.5.135

静态服务器

10.220.5.137

动态服务器

10.220.5.138

文件共享服务器

10.220.5.139

备份服务器

10.220.5.140

zabbix.ntp.dns

10.220.5.111

 

WEB集群架构脚本

 

上面的架构我已经写成了脚本,可以实现一键安装,脚本可以复用。先就针对每个脚本进行讲解

[root@ken ~]# ls
arp.sh fileshare.sh inotify7.sh keepalived.conf qimojiagou.tar.gz ssh1.sh zhengti.sh
dongtai5.sh huancun3.sh keep2.sh nginx.conf rsync6.sh static4.sh

 

第一步:秘钥自动批量分发

1.实现脚本一键安装第一步要做的就是秘钥的分发。

2.秘钥自动分发借助于expect来实现,所以脚本中第一步是要安装expect。

3.删除保存的秘钥信息,可以实现脚本的复用。

4.使用ssh-keygen来生成秘钥,借助于expect实现自动化。

5.使用一个for循环的语句,把你需要联系的节点的IP地址写进去,这样就可以实现免秘钥登录了。

[root@ken ~]# vim ssh1.sh
#
!/bin/bash
.
/etc/init.d/functions
#下载expect
yum install expect
-y &>/dev/null
if [ $? -eq 0 ];thenecho -n "download expect"successecho ""
elseecho -n "download expect"failureecho ""exit 8
fi
#删除保存的秘钥信息
if [ -f id_rsa -o -f id_rsa.pub -o known_hosts ];thenrm -rf /root/.ssh/id*rm -rf /root/.ssh/known*
fi
#自动生成秘钥对
/usr/bin/expect<<eof
spawn ssh
-keygen
expect {
"(/root/.ssh/id_rsa)" {send \r;exp_continue}
"passphrase" {send \r;exp_continue}
"again" {send \r}
}
expect eof
exit
eof
#在各个节点分发秘钥
for i in 31 32 34 35 37 38 39 40
do
ken
&#61;10.220.5.1$i
/usr/bin/expect<<eof
spawn ssh
-copy-id $ken
expect {
"yes/no" {send yes\r;exp_continue}
"password" {send o\r}
}
expect eof
exit
eof
done

 

第二步&#xff1a;配置keepalived&#43;lvs

1.在两个keepalived节点之上下载需要的软件

2.使用ssh结合命令在备节点执行下载操作

3.把/root/下的keepalived文件传到备节点之上

4.使用sed修改keepalived配置文件

5.做后端节点的arp抑制

[root&#64;ken ~]# vim keep2.sh
#
!/bin/bash
.
/etc/init.d/functions
bash
/root/ssh1.sh
yum install nginx keepalived ipvsadm libnl
* popt* -y &>/dev/null
if [ $? -ne 0 ];thenecho -n "download error at master"failureecho ""exit 4
fi
#keepalved备节点也下载软件
ssh
10.220.5.132 yum install keepalived ipvsadm libnl* popt* -y &>/dev/null
if [ $? -ne 0 ];thenecho -n "download error at slave"failureecho ""exit 2
fi#把准备好的从节点keepalived文件传送到备节点并启动
scp
-q /root/keepalived.conf 10.220.5.132:/etc/keepalived &>/dev/null
ssh
10.220.5.132 systemctl restart keepalived &>/dev/null#准备主keepalived文件并启动
cp
-f /root/keepalived.conf /etc/keepalived/
sed
-i &#39;s/router_id id2/router_id id1/&#39; /etc/keepalived/keepalived.conf &>/dev/null
sed
-i &#39;s/state SLAVE/state MASTER/&#39; /etc/keepalived/keepalived.conf &>/dev/null
sed
-i &#39;s/priority 100/priority 150/&#39; /etc/keepalived/keepalived.conf &>/dev/null
systemctl restart keepalived
&>/dev/null
#缓存1arp抑制
scp
-q /root/arp.sh 10.220.5.134:/root
ssh
10.220.5.134 bash /root/arp.sh#缓存2arp抑制
scp
-q /root/arp.sh 10.220.5.135:/root
ssh
10.220.5.135 bash /root/arp.shsystemctl restart nginx
ipvsadm
-L -n

 

第三步&#xff1a;配置代理缓存节点

1.在后端节点10.220.5.134,10.220.5.135安装nginx作为缓存代理服务器

2.把准备好的nginx配置文件发送到后端节点并进行重启生效

#!/bin/bash
.
/etc/init.d/functions#配置134代理缓存
ssh
10.220.5.134 yum install nginx -y &>/dev/null
if [ $? -ne 0 ];thenecho -n "download nginx"failureecho ""exit 5
fi
mkdir
/k &>/dev/null
mkdir
/kenken &>/dev/null
scp
-q /root/nginx.conf 10.220.5.134:/etc/nginx &>/dev/null
ssh
10.220.5.134 systemctl restart nginx &>/dev/null
#配置135代理缓存
ssh
10.220.5.135 yum install nginx -y &>/dev/null
if [ $? -ne 0 ];thenecho -n "download nginx"failureecho ""exit 5
fi
scp
-q /root/nginx.conf 10.220.5.135:/etc/nginx &>/dev/null
ssh
10.220.5.135 systemctl restart nginx &>/dev/null

 

第四步&#xff1a;配置静态服务器

1.安装httpd以及nfs组件

2.挂载共享服务器节点至本机的网站根目录

3.重启nginx使配置生效

[root&#64;ken ~]# vim static4.sh 
#!/bin/bash
.
/etc/init.d/functions
yum install httpd nfs
-utils -y &>/dev/null
#mkdir
-p /var/www/html/static &>/dev/null
mount
-t nfs 10.220.5.139:/ken /var/www/html &>/dev/null
systemctl restart httpd

 

第五步&#xff1a;配置动态服务器

1.安装配置lnmp环境

2.挂载共享服务器节点至本机的网站根目录之下

3.重启apache使配置生效

[root&#64;ken ~]# vim dongtai5.sh
#
!/bin/bash
yum install httpd php php
-mysql nfs-utils -y &>/dev/null
#mkdir
-p /var/www/html/dongtai &>/dev/null
mount
-t nfs 10.220.5.139:/ken /var/www/html/ &>/dev/null
systemctl restart httpd

 

第六步&#xff1a;配置rsync服务器

[root&#64;ken ~]# vim rsync6.sh
#!/bin/bash
.
/etc/init.d/functions
ruser
&#61;user1
vuser
&#61;kenken
file
&#61;/ken
hosts
&#61;10.220.5.139/24
yum install rsync
-y &>/dev/null
useradd
-r -u 333 -s /sbin/nologin $ruser &>/dev/null
if [ ! -e $file ];thenmkdir $file &>/dev/null
fi
chown
-R $ruser $file
cat
>/etc/rsyncd.conf<<eof
pid file
&#61;/var/lock/subsys/pidfile
lock file&#61;/var/lock/subsys/rsync
log file
&#61;/var/log/rsync
uid
&#61;333
gid
&#61;333
timeout
&#61;100
max connections
&#61;199
[ken]
path
&#61;/ken
list
&#61;yes
use chroot
&#61;yes
read only
&#61;no
auth users
&#61;kenken
secrets file
&#61;/etc/rsyncd.pwd
hosts allow
&#61;10.220.5.139/24
eof
echo
"$vuser:123" > /etc/rsyncd.pwd
chmod
600 /etc/rsyncd.pwd
rsync
--daemon &>/dev/null
if [ $? -eq 0 ];thenecho -n "start rsync..."successecho ""
elseecho -n "start rsync..."failureecho ""
fi

 

第七步&#xff1a;配置inotify

1.在本机安装inotify和rsync

2.监控/ken下的文件&#xff0c;如果发生更改就会被推送至rsync服务器端

[root&#64;ken ~]# vim inotify7.sh
#
!/bin/bash
.
/etc/init.d/functions
file
&#61;/ken
vuser
&#61;kenken
host
&#61;10.220.5.140
mname
&#61;ken
yum install inotify
-tools -y &>/dev/null
echo
"123" >/etc/rsync.pwd
chmod
600 /etc/rsync.pwd
inotifywait
-mrq --format "%w%f" -e create,delete,modify $file | while read line
do
rsync
-rz --delete $file $vuser&#64;$host::$mname --password-file&#61;/etc/rsync.pwd
done

 

第八步&#xff1a;配置nfs服务器端

1.把本机的/ken目录共享给10.220.5.137&#xff0c;10.220.5.138服务器端文件可以解压在本目录下即可

[root&#64;ken ~]# vim fileshare.sh
#!/bin/bash
.
/etc/init.d/functions
yum install nfs
-utils rpcbind -y &>/dev/null
mkdir
-p /ken/static &>/dev/null
mkdir
-p /ken/dongtai &>/dev/null
chown
-R nfsnobody.nfsnobody /ken
cat
>/etc/exports<<eof
/ken 10.220.5.137/24(rw,async,all_squash)
/ken 10.220.5.138/24(rw,async,all_squash)
eof
systemctl restart rpcbind
systemctl restart nfs

 

至此所有的脚本已经介绍完毕&#xff0c;下面来看一下nginx的配置文件。

# For more information on configuration, see:
#
* Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log
/var/log/nginx/error.log;
pid
/run/nginx.pid;# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include
/usr/share/nginx/modules/*.conf;events {worker_connections 1024;
}http {log_format main &#39;$remote_addr - $remote_user [$time_local] "$request" &#39;&#39;$status $body_bytes_sent "$http_referer" &#39;&#39;"$http_user_agent" "$http_x_forwarded_for"&#39;;access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;include /etc/nginx/mime.types;
default_type application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See
http://nginx.org/en/docs/ngx_core_module.html#include# for more information.proxy_cache_path /k levels&#61;1:2 keys_zone&#61;scache:30m; #定义静态文件的缓存fastcgi_cache_path /kenken levels&#61;1:2 keys_zone&#61;kenken:30m; #定义动态文件的缓存server {listen 80 default_server;listen [::]:80 default_server;server_name _;root /var/www/html;index index.html;# Load configuration files for the default server block.# include /etc/nginx/default.d/*.conf;location / {proxy_pass http://10.220.5.137; #静态文件会被代理到10.220.5.137proxy_set_header host $host;proxy_set_header realip $remote_addr;proxy_cache scache; #使scache缓存proxy_cache_valid any 10m; #定义缓存的类型及时间}location ~ \.php$ { proxy_pass http://10.220.5.138; #动态的文件会被缓存到10.220.5.138proxy_set_header host $host;proxy_set_header realip $remote_addr;fastcgi_cache kenken; #使用动态缓存fastcgi_cache_valid any 10m; fastcgi_cache_key http://$host$request_uri; #定义动态缓存的key}error_page 404 /404.html;location &#61; /40x.html {}error_page 500 502 503 504 /50x.html;location &#61; /50x.html {}}
}

 

最后来看一下整体的脚本&#xff0c;即执行的脚本

1.把写好的脚本及准备好的配置文件都存放在10.220.5.131的/root下

2.使用scp及ssh进行远程传送脚本及运行脚本

[root&#64;ken ~]# vim zhengti.sh
#!/bin/bash
.
/etc/init.d/functions#执行秘钥分发
bash
/root/ssh1.sh#实现keepalived&#43;LVS
bash
/root/keep2.sh#实现缓存代理
bash
/root/huancun3.sh#实现文件共享
scp
-q /root/fileshare.sh 10.220.5.139:/root
ssh
10.220.5.139 bash /root/fileshare.sh#实现静态服务器
scp
-q /root/static4.sh 10.220.5.137:/root
ssh
10.220.5.137 bash /root/static4.sh#实现动态服务器
scp
-q /root/dongtai5.sh 10.220.5.138:/root
ssh
10.220.5.138 bash /root/dongtai5.sh#实现备份服务器rsync
scp
-q /root/rsync6.sh 10.220.5.140:/root
ssh
10.220.5.140 bash /root/rsync6.sh#实现共享文件服务器inotify
scp
-q /root/inotify7.sh 10.220.5.139:/root
ssh
10.220.5.139 bash /root/inotify7.sh &iptables -F

 

运行脚本并测试

 

只要运行总的脚本即可&#xff0c;会自动调用其他脚本

[root&#64;ken ~]# bash zhengti.sh

 

第一步&#xff1a;在10.220.5.137主机创建静态测试文件

[root&#64;ken html]# cat index.html
test
for 137ddd

 

第二步:在10.220.5.138主机创建动态测试文件

[root&#64;ken html]# cat index.php
php
phpinfo();
?>

 

第三步&#xff1a;输入10.220.5.133/index.html&#xff0c;即虚拟IP 访问10.220.5.137主机的动态文件

第四步&#xff1a;输入10.220.5.133/index.php&#xff0c;即虚拟IP 访问10.220.5.138主机的动态文件

看到这些信息即表示成功

 

 

zabbix自动注册全网监控

 

实现全网监控首先需要给每个待监控的主机安装zabbix的客户端&#xff0c;可以使用如下脚本进行安装\

 

第一步&#xff1a;执行如下脚本

给每个待监控的客户端安装zabbix-agen客户端

还要确保开启主动模式及

ServerActive&#61;172.20.10.6  ##这个IP地址是你监控服务器的地址&#xff0c;客户端都要指向服务器端

#!/bin/bash
#author:技术流ken
#date:
2018-11-15
#desc:
this script for downloading zabbix-agent for clients
ip
&#61;10.220.5.1
for i in 31 32 34 35 37 38 39 40
dossh $ip$i yum install zabbix-agent -y &>/dev/nullssh $ip$i sed -i &#39;s/Server&#61;127.0.0.1/Server&#61;10.220.5.137/&#39; /etc/zabbix/zabbix_agentd.conf &>/dev/nullssh $ip$i systemctl restart zabbix-agent &>/dev/null
done

 

第二步&#xff1a;在zabbix服务器端开启自动注册

点击configuration>actions>选择右上角的auto redistration

 

点击creation action

选择如下动作

点击add保存

 

第三步&#xff1a;查看

点击configure>hosts即可查看自动注册到的主机

 

转:https://www.cnblogs.com/kenken2018/p/9931863.html



推荐阅读
  • mongodb复制集部署文档 ... [详细]
  • 目录结构如下:Nginx基础知识NginxHTTP服务器的特色及优点Nginx的主要企业功能Nginx作为web服务器的主要应用场景包括:Nginx的安装安装环境 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 开发网站你需要知晓的部分专用术语
      越来越多的企业和个人都在拥有属于自己的网站门户,首当其冲的就是你得知晓几个网站方面的专业术语,先是中就有好多的客户不明白这些,造成误会是正常的,那不如我们对它有个大致的了解,这样就不容易感觉 ... [详细]
  • SSL协议、TLS协议,使用哪一种更安全?
    在金融银行业,保护机密信息的安全至关重要。由于财务记录完全通过在线数据库维护,因此实施保护客户、银行和金融机构免受黑客攻击的安全功能比以往任何时候都更加重要。安全套接字层(SSL) ... [详细]
  • 6个常见的 PHP 安全性攻击实例和阻止方法_php实例
    这篇文章主要介绍了6个常见的PHP安全性攻击实例和阻止方法,有对这方面感兴趣的小伙伴 ... [详细]
  • delphi控件大全
    本文章已收录于:delphi控件查询:http:www.torry.nethttp:www.jrsoftware.orgTb97最有名的工具条(ToolBar) ... [详细]
  • Linux是一套免费使用和***传播的类UNIX操作系统,主要用于基于Intel x86系列CPU的计算机上。Linux系统是由全世界各地的成千上万的程序员合适的方式定制自己的Li ... [详细]
  •  在使用PHP多年之后,我对PHP的优势和劣势已经非常清楚,与后起之秀Golang相比,两者已经不在一个重量级。 PHP更像是70kg级别的选手,脚本语言,极速开发,部署方便,性能 ... [详细]
  • 高并发网站架构的核心原则其实就一句话“把所有的用户访问请求都尽量往前推“,即:能缓存在用户电脑本地的,就不要让他去访问CDN。能缓存CDN服务器上的,就不要让CDN去访问源(静态服 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 目录Atlas介绍Atlas部署Atlas基本管理Atlas结合MHA故障恢复读写分离建议Atlas介绍Atlas是由Qihoo360Web平台部基础架构团队开发维护的一个基于My ... [详细]
  • 一、生产服务器netstattcp连接状态 ... [详细]
  • 高可用架构_MySQL高可用架构设计
    文章来自于https:www.jianshu.compd3107bda2963PHP进阶学习交流QQ群:983229225Mysql复制功能介绍Mysql的复制功能提 ... [详细]
author-avatar
xda6962962
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有