nginx: 集群环境配置搭建

nginx详解 nginx简介 nginx概述 Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 nginx作为web服务器 Nginx 可以作为静态页面的 web 服务器,同时还支持 CGI 协议的动态语言,比... 阅读详情
AI摘要

本文详细介绍了如何使用Docker搭建Nginx集群,包括配置负载均衡器、服务拆分、网络设置以及高可用性设计的关键点。着重强调了集群规模、负载均衡策略、网络带宽和安全性等内容。

nginx 集群环境搭建


1 ) 概述

  • nginx 本身就应该选择性能强劲的机器
  • 同时为了满足更多流量的需求, 多台nginx 机器做集群来满足强大的需求
  • 故而,我们需要一个负载均衡器,以及多台nginx的机器
    • 这里负载均衡器应该有主从和热备,目前先使用一台来描述
  • 这里,我们先用docker来搭建单机版,后续可以选择用docker swarm 或 k8s 来部署到不同的机器上

2 ) 目录结构配置

nginx-cluster-project
├── docker-compose.yml                                # yml 配置文件
├── balancer                                          # 负载均衡器
│       ├── load-balancer.conf
│       ├── conf.d
│       │      ├── common.conf
│       │      ├── servers.conf
│       │	   └── upstreams.conf
│       └── logs
│              ├── access.log
│              └── error.log
├── deploy                                            # 单项nginx服务
│       ├── nginx.conf
│       ├── conf.d
│       │      ├── common
│       │      │       ├── common.conf
│       │      │       ├── gzip.conf
│       │      │       ├── header.cors.conf
│       │      │       ├── header.options.conf
│       │      │       ├── header.proxy.conf
│       │      │       └── log.conf
│       │      ├── servers
│       │      └── upstreams
│       ├── logs
│       │      ├── ng1
│       │      │    ├── error.log
│       │      │    ├── 80
│       │      │    │   ├── access.log
│       │      │    │   └── error.log
│       │      │    ├── 8500
│       │      │    │   ├── access.log
│       │      │    │   └── error.log
│       │      ├── ng2
│       │      │    ├── error.log
│       │      │    ├── 80
│       │      │    │   ├── access.log
│       │      │    │   └── error.log
│       │      │    ├── 8500
│       │      │    │   ├── access.log
│       │      │    │   └── error.log
│       │      └── ng3
│       │      │    ├── error.log
│       │      │    ├── 80
│       │      │    │   ├── access.log
│       │      │    │   └── error.log
│       │      │    ├── 8500
│       │      │    │   ├── access.log
│       │      │    │   └── error.log
│       └── static
│              └── default                              # 某一个项目的部署目录
├── ssl                                                 # 证书配置目录,(集中管理)
│    ├── certificate.crt
│    └── private.key;  
  • 从上面可以看到,docker-compose.yml 用于管理docker容器
  • balancer 是负载均衡器服务(本质上也是一项nginx服务)
    • 这里面的 load-balancer.conf 是用于监听和转发到其他nginx服务器上
    • 并且监听了所有服务的日志(访问日志和错误日志)
  • deploy 是单项nginx服务的配置目录
    • 从中可以看到, 配置文件是通用的,日志是分开管理的
    • 这里为 ng1, ng2, ng3 配置了不同的日志
    • 这里集群了多少台nginx服务器,就创建几份目录
    • 这里是现成的,也可以在docker-compose.yml中用命令创建
  • ssl 是用于集中管理证书的目录

关于 docker-compose.yml

version: '3'
services:
  load-balancer:
    image: nginx:latest
    ports:
      - "80:80"
      - "8500:8500"
    volumes:
      - ./balancer/load-balancer.conf:/etc/nginx/nginx.conf:ro
      - ./balancer/conf.d:/etc/nginx/conf.d:ro
      - ./balancer/logs:/var/log/nginx
      - ./ssl:/etc/nginx/ssl:ro
    depends_on:
      - ng-1
      - ng-2
      - ng-3
    networks:
      - light_network
  ng-1:
    image: nginx:latest
    volumes:
      - ./deploy/nginx.conf:/etc/nginx/nginx.conf
      - ./deploy/conf.d:/etc/nginx/conf.d
      - ./deploy/logs/ng1:/var/log/nginx
      - ./deploy/static:/usr/share/nginx/html
      - ./ssl:/etc/nginx/ssl
    networks:
      - light_network
  ng-2:
    image: nginx:latest
    volumes:
      - ./deploy/nginx.conf:/etc/nginx/nginx.conf
      - ./deploy/conf.d:/etc/nginx/conf.d
      - ./deploy/logs/ng2:/var/log/nginx
      - ./deploy/static:/usr/share/nginx/html
      - ./ssl:/etc/nginx/ssl
    networks:
      - light_network
  ng-3:
    image: nginx:latest
    volumes:
      - ./deploy/nginx.conf:/etc/nginx/nginx.conf
      - ./deploy/conf.d:/etc/nginx/conf.d
      - ./deploy/logs/ng3:/var/log/nginx
      - ./deploy/static:/usr/share/nginx/html
      - ./ssl:/etc/nginx/ssl
    networks:
      - light_network

networks:
  light_network:
    external: true

1 )网络

2 )服务

  • 这里定义了4个服务,分为 1个负载均衡器和3个nginx服务
  • 其实就是4个nginx服务,当然,如果需要更多nginx服务也可以继续进行创建
  • 在3个nginx服务中,都没有暴露端口,而端口是在负载均衡器中配置的
  • 在同一个docker网络中,docker容器都内都可以相互访问

3 )其他

  • 这里配置缺少了对 cpu, 内存,副本,重启等策略的定义
  • 这里为了保持集群的纯粹性,使用极简的配置,更多配置参考下面的链接

关于 deploy 中的服务


1 )nginx.conf

user  nginx;
worker_processes  auto;

pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;                        # mime.types 配置
    include       /etc/nginx/conf.d/common/common.conf;         # 通用 common 配置
    include       /etc/nginx/conf.d/common/gzip.conf;           # 通用 gzip 配置
    include       /etc/nginx/conf.d/common/log.conf;            # 通用 log 配置
    
    include       /etc/nginx/conf.d/upstreams/*.conf;           # 包含 upstream 定义
    include       /etc/nginx/conf.d/servers/*.conf;             # 包含 server 定义
}
  • 这里可以看到,核心文件都拆分到了不同的目录和文件中
  • 这样的拆分设计,让后续复杂的业务更加容易管理

2 ) conf.d/upstreams/consul.conf

upstream backend_consul {
        server  consul-client1-1:8500  weight=1;
        server  consul-client2-1:8500  weight=1;
}
  • 这里看到,consul-client1-1 是 consul 的服务名
  • 也就是在docker网络中,可以通过服务名来访问,而非动态的ip
  • 这里的意图,就是把2台consul客户端做一个负载均衡的处理
  • 一般设计consul集群的时候,会有2台客户端和3~5台服务端
  • 这里的consul的2台客户端,通过nginx的负载均衡处理,就保证高可用

3 )conf.d/servers/*.conf

3.1 index_80.conf

server {
    listen        80;
    server_name   _;
    index         index.html index.htm;
    root          /usr/share/nginx/html/default;
    access_log    /var/log/nginx/80/access.log  main;       # main 是 log 的格式
    error_log     /var/log/nginx/80/error.log   notice;     # notice 是 错误的级别 debug、info、notice、warn、error、crit、alert或emerg
    include       /etc/nginx/conf.d/common/header.cors.conf;   # 包含 cors 的处理
    include       /etc/nginx/conf.d/common/header.proxy.conf;  # 包含 proxy 的处理

    # 定义 首页
    location / {
        try_files                     $uri $uri/ =404;
        include                       /etc/nginx/conf.d/common/header.options.conf;           # 包含 options 的处理
    }
}

3.2 consul_8500.conf

server {
    listen        8500;
    server_name   _;
    access_log    /var/log/nginx/8500/access.log  main;       # main 是 log 的格式
    error_log     /var/log/nginx/8500/error.log   notice;     # notice 是 错误的级别 debug、info、notice、warn、error、crit、alert或emerg
    include       /etc/nginx/conf.d/common/header.cors.conf;   # 包含 cors 的处理
    include       /etc/nginx/conf.d/common/header.proxy.conf;  # 包含 proxy 的处理

    # 定义 首页
    location / {
        proxy_pass                    http://backend_consul$request_uri; 
    	proxy_connect_timeout         1s;                                                     # 代理超时,请求一台超过1s就会转发到其他ip
        include                       /etc/nginx/conf.d/common/header.options.conf;           # 包含 options 的处理
    }
}

… 其他可以继续配置
从这里可以看到,每个端口都可以自行配置管理

集群注意事项

在构建和管理NGINX集群时,有许多关键的注意事项,如下

1 ) 集群规模与业务需求:

  • 根据业务需求和系统负载情况,合理配置集群中服务器的数量
  • 过多的服务器可能导致资源浪费,而过少的服务器则可能无法应对高并发请求
  • 在评估集群规模时,需要考虑业务的增长趋势和未来的扩展需求。

2 )负载均衡策略

  • 选择合适的负载均衡策略对于集群的性能至关重要
  • 常见的策略包括轮询、最少连接数、IP哈希等
  • 根据业务场景的特点(如请求的分布、服务器的性能等)来选择合适的策略,以确保请求能够均匀、高效地分发到各个服务器上

3 )网络带宽与延迟

  • 确保集群中服务器之间的网络带宽足够,以保证请求分发的效率
  • 网络带宽不足可能导致请求处理速度下降,影响用户体验
  • 同时,要注意降低网络延迟,确保请求能够快速到达目标服务器并得到响应

4 )服务器的硬件与配置

  • 服务器的硬件配置对于集群的性能有着重要影响
  • 需要确保服务器具有足够的CPU、内存和存储空间来应对高并发请求
  • 同时,合理配置NGINX的参数(如worker_processes、worker_connections等)也是提升集群性能的关键

5 )安全性考虑

  • NGINX集群作为网络服务的核心组件,其安全性至关重要
  • 需要采取一系列安全措施来防范潜在的安全威胁,如使用HTTPS协议、限制访问权限、定期更新和修补安全漏洞等

6 )日志与监控

  • 启用并配置好NGINX的日志功能,以便收集和分析集群的运行状态
  • 通过查看访问日志和错误日志,可以及时发现和解决潜在的问题
  • 同时,建立有效的监控机制,对集群的性能指标进行实时监控和报警,确保集群的稳定运行

7 )高可用性设计

  • 在构建NGINX集群时,需要考虑高可用性设计
  • 例如,可以采用主从配置或热备方案来确保服务的连续性和可用性
  • 还需要制定故障转移和恢复策略,以便在服务器出现故障时能够迅速恢复服务

8 )维护与升级

  • 定期对NGINX集群进行维护和升级是必要的
  • 这包括更新软件版本、清理日志文件、优化配置参数等
  • 在进行升级或维护操作时,需要确保操作的安全性和稳定性,避免对集群的正常运行造成影响
  • 综上所述,构建和管理NGINX集群需要考虑多个方面的因素
  • 只有在充分考虑并处理好这些注意事项的基础上,才能确保集群的稳定性和性能达到最佳状态

关于 多台负载均衡器

  • 之前提到的集群配置中,如果仅有一台负载均衡器而没有相应的备份或冗余机制
  • 那么当这台负载均衡器出现故障时,整个集群将会受到影响,这并不能算作真正的高可用设计
  • 要实现高可用性的负载均衡,我们需要考虑以下几点:

1 )负载均衡器的冗余设计:

  • 部署多台负载均衡器,并通过某种机制(如VRRP、Keepalived等)实现它们之间的主备切换或负载均衡。
  • 这样,当主负载均衡器出现故障时,备用负载均衡器可以迅速接管工作,确保服务的连续性。

2 )健康检查与故障转移

  • 负载均衡器需要能够定期检查后端服务器的健康状态,一旦发现服务器出现故障或响应缓慢,应将其从负载均衡池中移除,并将请求转发到其他健康的服务器上。
  • 同时,负载均衡器之间也需要进行健康检查,以确保主备切换的顺利进行。

3 )数据同步与一致性

  • 如果负载均衡器涉及到会话保持或数据缓存等功能,需要确保在主备切换或负载均衡过程中,数据的同步和一致性得到保障,避免因为数据不一致导致的问题。

4 )网络设计与隔离:

  • 在网络层面,需要考虑负载均衡器与后端服务器之间的网络隔离和冗余设计
  • 例如,可以使用多个网络交换机或路由器来确保网络的稳定性和可靠性。

5 )监控与报警:

  • 建立完善的监控和报警机制,对负载均衡器和后端服务器的运行状态进行实时监控。
  • 一旦出现故障或异常情况,应能够及时发出报警通知,以便管理员迅速介入处理。

6 )综上所述

  • 要实现真正的高可用负载均衡设计,我们需要从多个方面进行考虑和规划
  • 确保在任何情况下都能保持服务的连续性和稳定性
  • 这不仅仅涉及到负载均衡器本身的设计,还需要考虑到整个集群的架构和配置

说明

源码地址

Nginx集群部署方案 阅读详情

相关推荐

Nginx+Tomcat集群环境搭建

提高服务的性能实际公司线上生产环境都会选择一台机器部署一个tomcat,多台机器完成集群,毕竟一台机器部署多个tomcat还是有一些共享瓶颈的,例如它们的网卡只有一个,内存和磁盘IO等都是共用的。而多台机器共同提供相同的服务,能够充分利用每一台机器的资源,自然能够提高服务的性能。并发能力很好理解,一台tomcat的http线程池是有限的,那么两台能承载的http线程自然是一台的2倍。高可用性简单理解在Nginx下面挂了多台tomcat节点,当其中一台tomcat挂掉的时候,那么我们可以把这个节点从Nginx

weixin_54919172的博客 3565

Nginx集群

在典型的负载均衡集群中,主要包括三个层次的组件。所谓集群,指一组(多台)相互独立的计算机利用高速通信网络组成的一个规模较大的计算机服务系统,每个集群节点(即集群中的一台服务器)都是运行各自服务的独立服务器。从负载均衡下面的节点服务器来看,接收到的请求还是来自访问负载均衡器的客户端的真实用户,而反向代理就不一样了,反向代理接收访问用户的请求后,会代理用户重新向代理下的节点服务器发起请求,最后把数据返回给客户端用户,在节点服务器看来,访问节点服务器的客户端用户就是反向代理服务器了,而非真实的网站访问用户。

m0_50818626的博客 5536

集群环境下的图片服务器搭建

       在做电商系统的过程中,在搭建图片服务器的过程中遇到了很多问题,整了很长时间,在这里总结一下,希望能加深自己影响,也希望能够帮助到一些学习中遇到问题的朋友。系统结构认识:       在设计传统项目的过程中,图片服务器的结构如下:       图片直接上传到一个工程下,访问也是在同一个工程下,这种结构设计原理相对简单,在这种结构下,可以直接通过jsp页面进行访问到上传的图片。     ...

任长江 5534

Nginx(搭建高可用集群)

注意:这里由于tomcat1在主Nginx上,一旦主Nginx崩溃,则这个tomcat就不可用,所以才需要在从Nginx也搭建一份,如果部署在独立主机上就不需要,就像这个tomcat2。

Sun的个人博客 8657

Nginx集群搭建

nginx集群搭建

star_apple的博客 1306

别再只改config了!YOLO/RT-DETR多通道输入实战:数据集结构、多卡训练与参数优先级避坑指南

本文详细解析了YOLO/RT-DETR模型在多通道输入(如8通道多光谱图像)中的实战应用,涵盖数据集结构优化、数据加载器改造、模型参数调优及多卡训练配置。针对常见的多通道输入报错问题,提供了系统的解决方案和性能优化技巧,帮助开发者高效实现非标准数据格式的适配与训练。

weixin_30955617的博客 397

nginx 配置集群

--------监控8000端口访问,则跳转到http://www.baidu.com worker_processes  1; events {     worker_connections  1024; } http {     include       mime.types;     default_type  application/octet-stream;     s

WOSHISUNXIANGFU的专栏 4522

车载测试面试题总结

首先确认是什么问题,如果是测试软件的问题就先确定自己的测试方法有没有问题,如果没有问题,那就是测试软件的问题,这时候就需要提bug 进行跟踪,(比如BCM测试的时候,先明确测试的输入,对输入)进行需求分析,然后设计测试用例,进行用例评审,评审完执行测试用例形成最终的版本,台架分为:hil(黑尔)台架,单个控制器的台架、整车台架、车身台架、动力系统台架等,主要验证其功能,或者实车无法满足的测试环境。这个人不可能一直,点击几千次或者多少次几个小时连续点击,人不可能一直在点。因为要模拟一下这个稳定性,

woaxiaoqing的博客 7818

Tomcat集群部署(nginx)

1.nginx + tomcat集群部署 1、下载Tomcat 1)两个Tomcat修改不同的端口号 (1)端口号 tomcat1 :端口号8086 tomcat2:端口号8089 2、下载nginx并安装 1)下载:https://nginx.org/en/download.html 2)安装包直接解压 3)启动等相关命令 nginx端口默认80。启动后查看是否存在nginx.exe的进程。若启动失败,可能是端口冲突,可再nginx.conf中修改端口号 cmd..

Lycoris_Red的博客 1140

使用ONNX Runtime在Java Web应用中部署深度学习模型

当应用场景需要集成深度学习模型进行推理时,直接在Java Web应用中集成深度学习框架可能会面临性能、兼容性等问题。为了将深度学习模型无缝集成到Java Web应用中,是一项广受认可且实用的方法。本篇文档将介绍如何将模型转换为ONNX格式,并通过ONNX Runtime Server进行部署,并通过Java Web应用调用以进行回归或预测任务。本方案的主要目标是实现以下功能:将PyTorch模型转换为ONNX格式。部署ONNX Runtime Server,加载ONNX模型并提供推理服务。

shysea2019的博客 8859

解决VMWare ESXi PCIe直通显卡导致的DevicePowerOn启动故障

本文详细解析了VMWare ESXi中PCIe直通显卡导致的DevicePowerOn启动故障,重点分析了MMIO空间不足的根本原因,并提供了完整的解决方案。通过修改.vmx文件中的关键参数,如pciPassthru.64bitMMIOSizeGB,可以有效解决显存分配问题。文章还涵盖了硬件兼容性检查、性能调优技巧及大规模部署的实战案例,帮助用户彻底解决显卡直通难题。

weixin_42537919的博客 577

SpringCloud-学习笔记(五)nacos集群环境搭建

我们首先使用MySQL数据库创建一个空的库,然后执行nacos压缩包的conf里面提供的nacos-conf.sql文件。官方的建议是使用MySQL组词给模式的高可用集群,这里为了方便演示,仅使用单点的数据库来测试使用。最后在浏览器访问:http://localhost/nacos即可。,然后将原来的文件的内容改为自己的ip和端口。修改集群配置(节点信息)、数据库配置。搭建MySQL集群并初始化数据库表。中数据库的配置,修改为自己的配置。然后我们下面开始配置nginx。分别启动多个nacos节点。

怕什么真理无穷,进一寸有一寸的欢喜。即使开了一辆老掉牙的破车,只要在前行就好,偶尔吹点小风,这就是幸 582

Linux系统之部署经典魔塔小游戏

Linux系统之部署经典魔塔小游戏

jks212454的博客 1818

图文并茂超详细搭建redis缓存服务器(nginx+tomcat+redis+mysql实现session会话共享)

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一、redis介绍 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset...

weixin_34366546的博客 103

Python 爬虫实战:爬取电商平台商品信息(价格 / 销量 / 评价)

摘要:本文详细介绍基于Python的电商商品信息爬取技术方案,以京东商品详情页为例,对比分析静态(BeautifulSoup)和动态(Selenium)两种爬取方式的实现逻辑。静态爬取适合获取基础信息,而动态爬取可解决JS渲染数据的获取问题。文章包含完整的代码实现、反爬规避策略及数据存储方案,涵盖商品名称、价格、销量、评价等核心数据提取。同时强调爬虫的合规使用,提供扩展方向建议,为电商数据采集提供实用技术参考。

2503_91057718的博客 2024

第14.7章 高翔博士最新开源框架Lightning-LM源码解读(七):PoseExtrapolator模块深度剖析,揭秘激光SLAM高频位姿外推核心技术

PoseExtrapolator是Lightning-LM框架中负责高频位姿外推的核心模块,通过融合DR(航位推算)、激光里程计和PGO(位姿图优化)数据实现精准实时定位。模块初始化依赖PGO数据,后续通过DR数据进行高频位姿更新,并利用PGO结果进行误差补偿。关键函数AddDRLocAndExtrapolate处理DR增量位姿,结合速度补偿机制逐步修正误差,保证高频输出的同时提升精度。该模块体现了多传感器融合思想,通过互补性数据(高频DR与低频高精PGO)实现鲁棒定位,代码中使用了SE3位姿表示、互斥锁保

行知SLAM 349

总结一下我所做过的项目

代表性的2类。 1 单机环境的搭建。 主要是nginx+php+mysql+php的扩展包括zend+ proftpd mysql验证+优化,基本上是主流的一套php的环境搭建,主要是各个细节处理好。必须写成脚本形式,本人记忆力不是特别好,手动搞的话时间上难以做判断。交付客户就显得你不专业。 2 简单集群的环境  主要是nginx 做前端均衡负载。之后是几台web 机器,一台环境写好,然后...

weixin_30762087的博客 196

基于SC、SCL、BP、SCAN和SSC的译码算法及Matlab代码

本文将介绍几种常见的译码算法,包括SC(Successive Cancellation)、SCL(Successive Cancellation List)、BP(Belief Propagation)、SCAN(Soft-Input Soft-Output Successive Cancellation)、SSC(Stacked Successive Cancellation)的原理,并提供相应的Matlab代码实现。以上是基于SC、SCL、BP、SCAN和SSC的译码算法的Matlab代码示例。

ByteWhisper的博客 947

Nginx+Tomcat集群环境

本篇文章主要讲解并配置Nginx+Tomcat集群环境

没有网络安全就没有国家安全 1171

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

nginx+nacos集群环境搭建

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

weixin_44988811的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LVS+keepalive+nginx集群环境搭建

LVS+keepalive+nginx集群环境搭建 安装nginx 我们在106、107两台机器上安装nginx nginx安装(使用yum安装)步骤: 新增nginx官网的yum安装源 sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 安装nginx yum install -y nginx 启动Nginx并设置开机自动运行 s

jiangzhou556的博客 583

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Nginx+Tomcat搭建集群环境

Nginx+Tomcat搭建集群环境 ZeroOne01关注0人评论33534人阅读2018-05-05 14:15:39 集群概述与架构介绍 Tomcat集群能带来什么: 提高服务的性能,例如计算处理能力、并发能力等,以及实现服务的高可用性 提供项目架构的横向扩展能力,增加集群中的机器就能提高集群的性能 Tomcat集群实现方式: Tomca...

weixin_30276935的博客 178

Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现session共享(一)

摘要:随着网站的访问量越来越多,所以就考虑给网站增加服务器了,现在比较流行的做法就是给网站做集群环境,下面我把我做的过程记录一下,方便日后查看,同时也希望可以帮助到有需要的朋友! 一:首先是环境: 1.jdk 1.6.0_45 2.tomcat 6.0.44 3.nginx 1.8.0 二:jdk,tomcat,nginx的安装: 1.jdk的安装请参考:点击打开链接 2.n

https://gitee.com/micai-code 1万+

FastDFS单机及集群环境搭建

能够完成FastDFS环境搭建(使用docker镜像即可) 在Docker 环境下安装FastDFS,集群FastDFS搭建

qq_21438267的博客 2776

Nginx安装配置与集群环境

1.是一个Web服务器,主要用于处理HTTP/HTTPS等协议,含SMTP/POP3/FTP等邮箱协议。与Apache类似。2.轻量、速度极快、支持高并发(号称支持50000并发请求),电脑和带宽得支持。用C语言编写(Apache、MySQL、PHP、Linux等,均由C语言编写),C语言是目前世界上已知的编程语言中,速度最快的,没有之一。3.Nginx是目前企业的标配,但是Nginx只能处理如HTTP协议等,不能解析PHP、Java((Tomcat)。

m0_57385165的博客 765

搭建一个Nacos集群环境

nacos集群环境搭建 结构图 解读:大致说一下这个图 ,“vip”是指虚拟ip,这里我们一般需要用Nginx来做代理,然后下面的三台nacos,都是连mysql的,如果有条件,可以搞一个mysql主从集群,这里我就用一个mysql好了(资源有限o(╥﹏╥)o) 需要环境 虚拟机、 Nginx: 三台nacos服务,我们先假设好nacos的端口 192.168.229.128:8848 192.168.229.128:8847 192.168.229.128:8846 开始干活 下载 下载地址:http

努力明天会更好的博客 871
上一篇: Nginx: proxy_set_header 与 add_header 区别
下一篇: consul: 集群搭建和数据中心通信
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值