剧情介绍

在传统的信息系统(比如小规模的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. ThinkJS框架入门详细教程(一)开发环境

    一.前端标配环境 1.nodeJS正确安装,可以参考:http://www.cnblogs.com/chengxs/p/6221393.html 2.git正确安装,可以参考:http://www.c ...

  2. JS组件系列——基于Bootstrap Ace模板的菜单Tab页效果优化

    前言:之前发表过一篇  JS组件系列——基于Bootstrap Ace模板的菜单和Tab页效果分享(你值得拥有) ,收到很多园友的反馈,当然也包括很多诟病,因为上篇只是将功能实现了,很多细节都没有处理 ...

  3. WebSocket 开发模拟客户端与有游戏服务器通信

    WebSocket 客户端测试功能 websocket是有标准的通信协议,在h2engine服务器引擎中继承了websocket通信协议,使用websocket通信协议的好处是很多语言或框架都内置了w ...

  4. linux学习笔记:1.基础知识和命令行基本操作

    初次学习linux系统,想在这里记录自己的学习痕迹,如发现有不足之处,希望能指出,谢谢啦,之后的学习是在虚拟机VMware 10下的Red Hat Enterprise linux 6 的操作. 一. ...

  5. Java并发/多线程系列——初识篇

    回到过去,电脑有一个CPU,一次只能执行一个程序.后来多任务处理意味着计算机可以同时执行多个程序(AKA任务或进程).这不是真的"同时".单个CPU在程序之间共享.操作系统将在运行 ...

  6. Java EE开发环境——MyEclipse2017破解 和 Tomcat服务器配置

    Java EE开发,我们可以搭建如下开发环境: 底层运行环境:jdk 和 jre. Web服务器:Tomcat 后台数据库:SQL Server 可视化集成开发环境:MyEclipse Java EE ...

  7. ajax url参数中文乱码解决方法

    较好的处理办法,对js的url中的中文参数值使用两次encodeURI(),即encodeURI(encodeURI("url的中文参数值")) JS代码: var name=&q ...

  8. Response.Write输出导致页面变形和页面白屏解决办法

    方法一:此方法应该是微软官方推荐的方法,但弹出时会造成页面白屏.Page.RegisterStartupScript("TestEvent", "<script&g ...

  9. FPGA IN 消费电子

    消费电子: 消费电子(Consumer electronics),指供日常消费者生活使用的电子产品.消费类电子产品是指用于个人和家庭与广播.电视有关的音频和视频产品,主要包括:电视机.影碟机(VCD. ...

  10. FPGA IN 金融领域

    何为金融: 金融指货币的发行.流通和回笼,贷款的发放和收回,存款的存入和提取,汇兑的往来等经济活动.金融(FIN)就是对现有资源进行重新整合之后,实现价值和利润的等效流通. 金融主要包括银行.证券.基 ...