大型网站后台架构的演变

随着用户访问量的不断增加,网站的后台也会不断变化以应对需求。本文主要从一个小型网站到大型网站的过度与变化来陈述。   1.1 网站后台架构 主要指由web server 、应用服务器、数据库、存储、监控等组成的网站后台系统。   1.2 架构演变 个人站点后台架构。如图2-1所示。 图2-1 单台一组 如图所示,如果是个人站点,访问量不大,一般都是将web server、应用服务器、数据库部署在一台物理服务器上。从图中也可以看到,一个网站最基本的后台需要web server、应用服务器、数据库三部分组成。   1.2.1 网站架构的进一步演变 考虑到网站访问量的不断增加,网站的后台架构也必须不断调整和优化,进一步实现功能分离。特别是随着访问量不断增加以及考虑到数据库的负载和数据的重要性,数据库需要分离出来。从web server到数据库实现各个层次的负载均衡。   1.2.1.1 数据库功能分离,数据库单台部署 考虑到数据库的安全性和处理性能,数据库单台部署。如图2-2-1-1所示。 图2-2-1-1 数据库分离 如图所示,数据库与web server 、应用服务器分离出来,单台部署。这样做有两个好处: (1)数据库服务器性能提高,不再和webserver 、应用服务器抢占资源。 (2)数据库服务器安全性能提高,不会因为一台服务器宕机而影响所有服务,特别是数据库服务。   1.2.1.2 前端负载均衡部署,用于缓解单台web server压力 随着访问量的不断增加,单台web server 负载会加大,甚至有宕机的危险,所以需要在前端增加负载均衡器,实现web server层的负载均衡。缓解压力。如图2-2-1-2所示。 2-2-1-2 前端负载均衡 如图所示,通过增加web server并用负载均衡器(load balance)来缓解前端的web server和应用服务器压力。并且,为了保证数据库的绝对安全,做了Master-Slave主从备份。这样当master db宕机之后,slave db可以立即启用。所以这样做有以下好处: (1) 前台web server 和 应用服务器压力减少,负载均衡器分流负载。 (2) 后端数据库安全性加强,出现故障后,业务可以很快切换到slave db 上。   1.2.1.3 增加缓存及数据库读写分离 随着访问量的不断增加,发现整个系统的读写比例很大,对用户而言,读操作多于写操作,而且比例很大,这就需要进一步改善架构,实现读写分离。 通过增加db proxy,实现读写分离。如图所示,2-2-1-3。 图2-2-1-3 考虑到读写比例大的特点,如图2-2-1-3所示,通过增加db…

Read More

Centos7下使用ELK(Elasticsearch + Logstash + Kibana)搭建日志集中分析平台

日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器,这时候就需要一个集中式的日志收集装置,对日志中的关键字进行监控,触发异常时进行报警,并且开发人员能够查看相关日志。logstash+elasticsearch+kibana3就是实现这样功能的一套系统,并且功能更强大。 Logstash:负责日志的收集,处理和储存 Elasticsearch:负责日志检索和分析 Kibana:负责日志的可视化 1、环境介绍 elkServer IP:192.168.7.27 OS:Centos7.1 FQDN:elk.server.com elkClient IP:192.168.31.23 OS:Centos7.1 2、下载准备 官网下载最新的安装包:https://www.elastic.co/downloads(目前有些版本的包可能下载不到了,请到该地址下载——链接:http://pan.baidu.com/s/1gfohO2Z 密码:5s1f) elasticsearch-1.7.3.noarch.rpm (server上安装) kibana-4.1.2-linux-x64.tar.gz (server上安装) logstash-1.5.4-1.noarch.rpm (server上安装) logstash-forwarder-0.4.0-1.x86_64.rpm (client上安装) 3、Server端安装 3.1安装jdk1.7 [root@localhost ~]# yum install java-1.7.0-openjdk Loaded plugins: fastestmirror, langpacks base | 3.6 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 Loading mirror speeds from cached hostfile * base: mirrors.btte.net * extras:…

Read More

CentOS7 安装ffmpeg

安装EPEL Release,因为安装需要使用其他的repo源,所以需要EPEL支持: yum install -y epel-release #如果出现缺少Code提示,可以: sudo rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 #安装完成之后,可以查看是否安装成功 yum repolist 安装Nux-Dextop源 #导入一个Code sudo rpm –import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro #安装nux-dextop 源 sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm #查看repo源是否安装成功 yum repolist yum安装ffmpeg: yum install -y ffmpeg 安装完成后检查ffmpeg 版本: ffmpeg -version   http://linux.it.net.cn/CentOS/course/2017/0116/25868.html 大道,在太极之上而不为高;在六极之下而不为深;先天地而不为久;长于上古而不为老

CentOS7 Tomcat 启动过程很慢,JVM上的随机数与熵池策略

1. CentOS7 Tomcat 启动过程很慢 在centos启动官方的tomcat时,启动过程很慢,需要几分钟,经过查看日志,发现耗时在这里:是session引起的随机数问题导致的: <code class=”hljs css has-numbering” style=”display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: ‘Source Code Pro’, monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;”>14<span class=”hljs-tag” style=”color: rgb(0, 0, 0); box-sizing: border-box;”>-Jul-2016</span> 04<span class=”hljs-pseudo” style=”color: rgb(0, 0, 0); box-sizing: border-box;”>:14</span><span class=”hljs-pseudo” style=”color: rgb(0, 0, 0); box-sizing: border-box;”>:22</span><span class=”hljs-class” style=”box-sizing: border-box; color: rgb(155, 112, 63);”>.900</span> <span…

Read More

linux tomcat 无法关闭 :8005端口未启动

配置tomcat的时候 发现了一个问题,tomcat启动的时候,8005端口未启动,故无法关闭tomcat,后经查询解决了,记录一下子 tomcat启动的时候看不出异常,关闭的时候回报错类似: Jul 17, 2015 9:47:54 AM org.apache.catalina.startup.Catalina stopServer SEVERE: Could not contact localhost:8005. Tomcat may not be running. Jul 17, 2015 9:47:54 AM org.apache.catalina.startup.Catalina stopServer SEVERE: Catalina.stop: java.net.ConnectException: Connection timed out at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:525) at java.net.Socket.connect(Socket.java:475) at java.net.Socket.(Socket.java:372) at java.net.Socket.(Socket.java:186) at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:498) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)…

Read More

dubbox服务监控与日志采集

继上一篇dubbox2.8.4的配置和使用后,我们要进一步考虑dubbox服务的部署和监控。 dubbox日志的采集方案 dubbox服务部署 采用的是ELK的日志采集方案(http://blog.csdn.net/u011282930/article/details/52771237),我们选择将dubbox的服务单独拆分为独立的部署jar包,在系统上部署。结构如下: logstash日志采集 其中,logstash就是用来收集运行的服务的日志,采用的是2.3.1版本,通过配置对应的解析文件来监控,我的解析文件如下 input { file { path => “F:\log.txt” ## 填写文件的绝对路径 start_position => “beginning” ## 从头开始进行收集 codec => multiline { ## 通过配置识别日志开头,来保证多行可以被合并 pattern => “^[\d{2}:\d{2}:\d{2}.\d+]” ## 正则匹配以什么作为日志开头标志 negate => true what => “previous” } } } filter { grok {## 常用的filter之一,用于对文本日志记录进行json格式化 match => { “message” => [ ## 多个正则格式数据 “(?<time>\d{2}:\d{2}:\d{2}.\d+)\s(?<thread>\[[^]]*\]{1})\s(?<level>\w+)\s\s(?<class>[\w|.]*)\s-{1}\s+(?<dubbo>\[[\w|\d|\-]*\]{1})\s(?<date>\[\d+-\d+-\d+\s\d+:\d+:\d+\])\s(?<customer>\d+.\d+.\d+.\d+):\d+\s-\>\s(?<producer>\d+.\d+.\d+.\d+:\d+)\s-\s(?<content>[\s|\S]*)”, “(?<time>\d{2}:\d{2}:\d{2}.\d+)\s(?<thread>\[[^]]*\]{1})\s(?<level>\w+)\s(?<content>[\s|\S]*)” ] } remove_field => [“message”]…

Read More

dubbo日志(二):部署dubbo-admain

上次部署过了zookeeper,今天写写部署dubbo-admin dubbo-admin部署起来非常简单,只要会部署java程序就好。 本文已tomcat作为实例。   首先不多说,先下载相应的包。 本人网盘中有相应需要的包,方便下载。百度网盘 首先嘛。上传tomcat并解压。 上传dubbo-admin-2.4.1.war 包至tomcat下webapps  并启动tomcat(最好将war包先改名后再启动) 启动完成后: 进入ROOT/WEB-INF/目录,修改dubbo.properties文件 将上篇文章配置的三个zookeeper相关信息写入。然后重启tomcat 出现上图则表示部署成功! 登录,进入系统

Zookeeper 设置自启动

因公司电脑下班后关闭,重启虚拟机时发现zookeeper不能自动启动,所以再开文章记录一下,以备后用。 本文已center os 7示例: 首先进入/etc/rc.d/init.d/目录 cd /etc/rc.d/init.d/ 1 创建zookeeper文件并授权 touch zookeeper chmod +x zookeeper vi zookeeper 1 2 3 写入以下代码 #!/bin/bash #chkconfig:2345 20 90 #description:zookeeper #processname:zookeeper case $1 in start) su root /root/zook/bin/zkServer.sh start;; stop) su root /root/zook/bin/zkServer.sh stop;; status) su root /root/zook/bin/zkServer.sh status;; restart) su root /root/zook/bin/zkServer.sh restart;; *) echo “require start|stop|status|restart” ;; esac 1 2 3 4 5…

Read More

dubbo日志(一):部署zookeeper

声明:本文为笔者随心所写,随意而为。文中介绍仅作参考。出了啥问题本人不负责! 先说说为啥写这东东吧,本人现已从业4年有余,工作以来也就是写写增删改查,调用/推出相应接口。感觉自身进入一个瓶颈了,所以就从网上找了下最近比较火的技术资料来看。   感觉相比大数据而言,学学分布式会相应简单一些。所以就开始学习dubbo了。 好了,不在废话了,开始进入正题吧。 首先呢。学dubbo嘛,就要先了解什么是分布式。 其实呢,分布式是一种很简单的概念。 说白了,就是拆程序。把一个整体的程序拆成大大小小的一块块,然后将他们分别部署到不同的机器上,然后通过一些网络协议将他们连接起来,为用户提供整套应用支持。 好了,说到这里也不多说了,一些基础理论啥的不是我的强项。说不来。 明白了分布式后,开始考虑如何把现有项目拆分,按什么模式拆分,中间用什么协议支撑。等等…… 在这个时候,朋友推荐了dubbo,  看了一些资料后,很感兴趣,所以开始研究。 开始正题! 因个人项目原本就是Spring MVC+Mybaties架构的。 所以拆项目选择了dubbo+zookeeper+Spring MVC+Mybaties 首先,部署zookeeper。 第一步,准备三台linux机器(Windows也可以使用,本文不做介绍,本文使用的是VMware虚拟机)。 192.168.10.94 192.168.10.95 192.168.10.96 第二步,下载zookeeper包。(文章后会附有本人百度网盘地址。) 登录192.168.10.94 上传zookeeper包机器 解压(为方便输入,更改下文件夹名) 进入zook下conf文件夹 将zoo_sample.cfg改名为zoo.cfg 配置zoo.cfg [html] view plain copy tickTime=2000 initLimit=5 syncLimit=2 dataDir=/root/zook/data dataLogDir=/root/zook/logs clientPort=2180 server.3=192.168.10.94:2888:3888 server.1=192.168.10.95:2888:3888 server.2=192.168.10.96:2888:3888 参数说明: tickTime: zookeeper中使用的基本时间单位, 毫秒值. dataDir: 数据目录. 可以是任意目录. dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置. clientPort: 监听client连接的端口号. initLimit: zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间.…

Read More

rsync命令

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。 语法 rsync [OPTION]… SRC DEST rsync [OPTION]… SRC [USER@]host:DEST rsync [OPTION]… [USER@]HOST:SRC DEST rsync [OPTION]… [USER@]HOST::SRC DEST rsync [OPTION]… SRC [USER@]HOST::DEST rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST] 对应于以上六种命令格式,rsync有六种不同的工作模式: 拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。如:rsync -a /data /backup 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。如:rsync -avz *.c foo:src 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。如:rsync -avz foo:src/bar /data 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。如:rsync -av root@192.168.78.192::www /databack 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。如:rsync -av /databack root@192.168.78.192::www 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://192.168.78.192/www 选项 -v, –verbose 详细模式输出。 -q, –quiet 精简输出模式。 -c, –checksum…

Read More