剧情介绍

在传统的信息系统(比如小规模的ERP\MES系统),往往只是进行简单的应用服务器和数据库服务器的分布式部署,以此来提高应用系统的负载能力,而伴随着访问的增大,应用服务器层面除了做硬件和网络的扩容,很难应对【套路式开头】。


当然现在开源技术很多,不就是分布式么,应用服务器分布式、数据库读写分离、缓存服务器、认证服务器。。。的确方法很多。那么不买关子了,今天就应用服务器层面的负载均衡讲讲,可以动手练练的技术:Nginx,当然也包括缓存技术:redis。

初步的设想是这样的:通过nginx对局域网内多个相同应用服务器进行进行负载均衡,并且各个相同应用共享一个缓存服务器【表达的就是这么简单】。拉个效果图:

开始搭建【折腾】

1、操作系统准备

linux一台,当然一般为虚拟机,这里我安装了centos7,配置ip地址为:192.168.110.100,机器名就叫:centos。

可以运行asp.net mvc站点windows一台,比如windows10+iis8,配置ip地址为:192.168.110.1,机器名无所谓。

配置两台机器的hosts:

windows:C:\Windows\system32\drivers\etc\hosts

192.168.110.100  cluster.com

centos: vim /etc/hosts

192.168.110.100  cluster.com 

 2、安装Nginx

一般首先需要安装编译环境【反正不搞c,参照其他文章手动安装】,centos支持yum安装,一般就是yum install ,当然先su root下用root用户登录。

保证虚拟机联网,执行命令:yum install gcc-c++

本来以为可以直接安装nginx了,没想到还有三个依赖库要下载安装,套路一样:

下载安装包、解压安装包、进入配置目录,分别执行make 和make install。

当然这不是重点,直接说明:

其中本次下载版本:pcre-8.40.tar.gz、zlib-1.2.11.tar.gz、openssl-fips-2.0.10.tar.gz、nginx-1.12.2.tar.gz

> 安装pcre
         获取pcre编译安装包,ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz,拷贝到centos
         解压缩pcre-xx.tar.gz包。
         进入解压缩目录,分别执行 ./configure 、  make 、  make install

> 安装openssl
         获取openssl编译安装包,在https://www.openssl.org/source/openssl-fips-2.0.10.tar.gz,拷贝到centos

解压缩openssl-xx.tar.gz包。
         进入解压缩目录,分别执行./config、make 、  make install

> 安装zlib
         获取zlib编译安装包,在http://zlib.net/zlib-1.2.11.tar.gz,拷贝到centos
         解压缩openssl-xx.tar.gz包。
         进入解压缩目录,分别执行 ./configure 、 make  、 make install

> 安装nginx
        获取nginx,在http://nginx.org/download/nginx-1.12.2.tar.gz,拷贝到centos
         解压缩nginx-xx.tar.gz包。
         进入解压缩目录,分别执行 ./configure、  make 、  make install

3、配置nginx

按照第2部分,安装好nginx,当然 没有想过其他安装经验的,肯定会出现很多问题,建议百度自己搞定。我们可以在命令行里输入:whereis nginx

如果正常安装会出现nginx的按照目录:

[root@centos bin]# whereis nginx
nginx: /usr/local/nginx
[root@centos bin]# cd /usr/local/nginx
[root@centos nginx]# ls -l
总用量 0
drwx------ 2 nobody root 6 11月 2 14:08 client_body_temp
drwxr-xr-x 2 root root 333 11月 2 20:56 conf
drwx------ 2 nobody root 6 11月 2 14:08 fastcgi_temp
drwxr-xr-x 2 root root 40 11月 2 11:05 html
drwxr-xr-x 2 root root 58 11月 2 20:58 logs
drwx------ 2 nobody root 6 11月 2 14:08 proxy_temp
drwxr-xr-x 2 root root 19 11月 2 11:05 sbin
drwx------ 2 nobody root 6 11月 2 14:08 scgi_temp
drwx------ 2 nobody root 6 11月 2 14:08 uwsgi_temp

一般配置文件在conf文件夹下,名称叫nginx.conf,本次实验关键就是配置该文件,废话不说打开编辑:

[root@centos nginx]# vim ./conf/nginx.conf

我们修改以下点【192.168.110.1:9001和9002站点是 底下第5点部署的应用站点,这里提前说明。那为啥同一个ip呢,本地演示就丢一台IIS上了,端口不同就可以】:

 http {

     #....省略一些编码
#我们需要负载均衡的内部应用地址以及端口,其中weight为权重,这里就50% 各占一半了
5 upstream cluster.com{
6 server 192.168.110.1:9001 weight=1;
7 server 192.168.110.1:9002 weight=1;
8 } server {
listen ;
#需要负载的站点,这里就是本机设置的hosts站点
12 server_name cluster.com; #charset koi8-r; #access_log logs/host.access.log main; location / {
root html;
index index.html index.htm;
proxy_pass http://cluster.com;
22 #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
23 proxy_set_header X-Forwarded-Host $host;
24 proxy_set_header X-Forwarded-Server $host;
25 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
26 proxy_set_header X-Real-IP $remote_addr;
} #...省略一些编码
}

配置就是这么简单,在启动nginx之前建议关闭下centos的防火墙:

systemctl stop iptalbes.service

开启nginx,在nginx目录下执行,顺便检测下是否成功:

[root@centos nginx]# ./sbin/nginx

[root@centos nginx]# ps -ef | grep nginx
 root 1485 1 0 08:51 ? 00:00:00 nginx: master process ./sbin/nginx
 nobody 1486 1485 0 08:51 ? 00:00:00 nginx: worker process
 root 1663 1471 0 09:28 pts/0 00:00:00 grep --color=auto nginx

这个时候我们在windows电脑上 浏览器访问下 cluster.com 应该就可以看到 9001或者9002站点了:

是不是看不到到底访问了那台电脑,别急,我们先部署好redis再来写几个mvc请求服务就可以。

4、安装配置redis

和按照nginx一样的步骤,先下载,这里我下载了比较旧的版本redis-3.0.6.tar.gz,https://redis.io/download,当然你也可以下载最新的。

三板斧:解压文件、进入解压目录,执行make

然后进入子目录Src,可以看到一些执行文件【主要:redis-server\redis-cli】和一个redis.conf。我们最好在/usr/local下去建个redis目录,然后里面把几个主要的拷贝进去。

当然这里有个文件配置需要修改下:redis.cong下的是否后台开启:

vim redis.conf
#然后修改
daemonize yes
#同时注释掉bind 端,保证局域网都可以访问

开启redis:

 ./redis-server ./redis.conf
 [root@centos redis]# redis-cli
127.0.0.1:> set test "helloword"
OK
127.0.0.1:> get test
"helloword"
127.0.0.1:>

就是这么简单,测试也成功了,这里再次强调,关闭centos的防火墙。

5、编写并发布asp.net mvc 站点

通过上面的一步步安装,终于进入正题了,我们构建一个简单的asp.net mvc站点,这里就不废话了,然后把站点部署到本地iis,部署两个站点,端口后分别为9001和9002。

这里需要说明的是,windows的防火墙如果开启了,那么请在防火墙里面开启对端口9001和9002的进出站限制。

同时为了开发连接redis进行缓存服务,还需要安装api包,功能在这里:

输入:Install-Package StackExchange.Redis

在HomeController里添加以下服务:

 public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
/// <summary>
/// 获取服务请求地址
/// </summary>
/// <returns></returns>
public JsonResult GetServerInfo()
{
var server = HttpContext.Request.Url.Host + " " + HttpContext.Request.Url.Port;
return Json(server, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 设置缓存
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public JsonResult SetRedisValue(string key, string value)
{
RedisClient client = new RedisClient("192.168.110.100", ); client.SetValue(key,value); var server = HttpContext.Request.Url.Host + " " + HttpContext.Request.Url.Port; return Json($"访问服务器:{server},设置缓存键{key}的值为{value}", JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 读取缓存
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public JsonResult GetRedisValue(string key)
{
RedisClient client = new RedisClient("192.168.110.100", );
var v =client.GetValue(key); var server = HttpContext.Request.Url.Host + " " + HttpContext.Request.Url.Port; return Json($"访问服务器:{server},获取缓存键{key}的值为{v}", JsonRequestBehavior.AllowGet);
}

6、测试运行

终于开始[项目验收]

第1步,首先访问地址:http://cluster.com/Home/GetServerInfo,并且不断的F5刷新页面,可以发现,会变化的出现"cluster.com 9002"、"cluster.com 9001"说明负载均衡成功了,9001和9002端口应用不断替换被用户访问。

第2步,写缓存http://cluster.com/Home/SetRedisValue?key=test&value=helloword  ,可以发现,会提示你:"访问服务器:cluster.com 9001,设置缓存键test的值为helloword"

第3步,请求缓存http://cluster.com/Home/GetRedisValue?key=test,可以发现,如果多次刷新,会变化出现:

"访问服务器:cluster.com 9002,获取缓存键test的值为helloword"
"访问服务器:cluster.com 9001,获取缓存键test的值为helloword"
说明,我们的试验成功了!

7、后感

回顾整个过程,其实真的只是小试验,仅此记录下学习的过程而已。这里当然还没有进行会话状态的同步、数据库层面的分布式。

基于Nginx+redis的Asp.net站点搭建的更多相关文章

  1. Nginx+redis的Asp.net

    基于Nginx+redis的Asp.net站点搭建   剧情介绍 在传统的信息系统(比如小规模的ERP\MES系统),往往只是进行简单的应用服务器和数据库服务器的分布式部署,以此来提高应用系统的负载能 ...

  2. 基于华为云服务器的FTP站点搭建

    前言 主要介绍了华为云上如何使用弹性云服务器的Linux实例使用vsftpd软件搭建FTP站点.vsftpd全称是"very secure FTP daemon",是一款在Linu ...

  3. 基于Nginx的Rtmp流媒体服务器环境搭建

    一.编译安装 wget http://nginx.org/download/nginx-1.4.2.tar.gz wget https://github.com/arut/nginx-rtmp-mod ...

  4. Windows 环境下基于 nginx 的本地 PyPI 源

    Windows 环境下基于 nginx 的本地 PyPI 源的搭建: 1.登录 nginx 官网,下载安装包

  5. CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点 以下 ...

  6. 基于Nginx dyups模块的站点动态上下线并实现简单服务治理

    简介 今天主要讨论一下,对于分布式服务,站点如何平滑的上下线问题. 分布式服务 在分布式服务下,我们会用nginx做负载均衡, 业务站点访问某服务站点的时候, 统一走nginx, 然后nginx根据一 ...

  7. 基于nginx tomcat redis分布式web应用的session共享配置

    一.前言 nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存.web server负载均衡等功能,由于其轻量级.高性能.高可靠等特点在互联网项目中有着非常普遍的应用,相关 ...

  8. 基于nginx+lua+redis高性能api应用实践

    基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...

  9. Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

    Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 最近因为项目关系,收朋友之托,想制作秀场网站,但是因为之前一直没有涉及到这 ...

随机推荐

  1. 1 Spring Cloud Eureka服务治理

    注:此随笔为读书笔记.<Spring Cloud微服务实战> 什么是微服务? 微服务是将一个原本独立的系统拆分成若干个小型服务(一般按照功能模块拆分),这些小型服务都在各自独立的进程中运行 ...

  2. Linux 安装 mysql 并配置

    1.下载 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 下载版本:我这里选择的5.6.33,通用版,linux下64位 也可 ...

  3. jQuery基礎知識

    jQuery基礎知識 $(function(){}) //jQuery先執行一遍再執行其他函數 $(document).ready(fn) //文檔加載完後觸發 1. 刪除$:jQuery.noCon ...

  4. 在有main函数的前提下 eclipse找不到主类

    有时候在测试类的时候eclipse会莫名奇妙的提示找不到主类   接下来分别有几种解决办法 1.在项目上右击> Builder Path -> Configure Build Path - ...

  5. 一篇搞定微信分享和line分享

    前言 在h5的页面开发中,分享是不可或缺的一部分,对于一些传播性比较强的页面,活动页之类的,分享功能极为重要.例如,京东等电商年末时会有一系列的总结h5在微信中传播,就不得不提到微信的分享机制. 微信 ...

  6. Oculus Store游戏下载默认路径修改方法

    最近在测试一款VR游戏,所以在硬件设备上选择了HTC Vive和Oculus两款眼镜.相对而言,HTC安装比较人性化:支持自定义安装路径,而且可在界面更改应用程序下载位置,如图所示: 这下替我节省了不 ...

  7. js中的||与&&用法

    &&和||在JQuery源代码内尤为使用广泛,由网上找了些例子作为参考,对其用法研究了一下: &&: function a(){ alert("a" ...

  8. 利用ASP.netCore自带DI(DependencyInjection)实现批量依赖注入

    ASP.net Core自带DI(依赖注入),用法如下: services.AddScoped(typeof(IProductService), typeof(ProductService)); 如果 ...

  9. C#实现基于ffmepg加虹软的人脸识别

    关于人脸识别 目前的人脸识别已经相对成熟,有各种收费免费的商业方案和开源方案,其中OpenCV很早就支持了人脸识别,在我选择人脸识别开发库时,也横向对比了三种库,包括在线识别的百度.开源的OpenCV ...

  10. Tensorflow卷积神经网络

    卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络, 在计算机视觉等领域被广泛应用. 本文将简单介绍其原理并分析Tensorflow官方提供的示例. ...