• 转:Custom linux boot up screen

    Displaying an image during boot instead of the default command line scrolling text

    This is based on the guide here.
    This solution works but there are a few seconds of text shown before the boot image appears.

    Install fbi
    
    sudo apt-get install fbi
    
    Copy the splashscreen image to be used

    Copy your custom splash image into: /etc/ and name it “splash.png”.
    Presumably the resolution to use is 1920x1080px.
    Create A Script

    
    sudo nano
    

    Paste the following into the text editor:

    
    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          asplashscreen
    # Required-Start:
    # Required-Stop:
    # Should-Start:
    # Default-Start:     S
    # Default-Stop:
    # Short-Description: Show custom splashscreen
    # Description:       Show custom splashscreen
    ### END INIT INFO
    do_start () {
        /usr/bin/fbi -T 1 -noverbose -a /etc/splash.png
        exit 0
    }
    case "$1" in
      start|"")
        do_start
        ;;
      restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
      stop)
        # No-op
        ;;
      status)
        exit 0
        ;;
      *)
        echo "Usage: asplashscreen [start|stop]" >&2
        exit 3
        ;;
    esac
    :
    

    IMPORTANT – If copying and pasting via SSH check it has pasted in correctly (pasting via FiseSSH for us caused the # lines and the esac line to be altered and need modifying back to be correct)
    Exit and save the file as: /etc/init.d/asplashscreen
    (using a name starting with ‘a’ will ensure it runs first)
    Finally make the script executable and install it for init mode:

    
    sudo chmod a+x /etc/init.d/asplashscreen
    sudo insserv /etc/init.d/asplashscreen
    

    Thats it:

    
    sudo reboot
    

     

    Getting Out Of Black Screen

    If you get a black screen at the end of booting (if you’ve not setup auto running the GUI etc) use CTRL + ALT + F2 to get the command prompt

  • 转:SQL Server 2012 各版本功能比较

    SQL Server 2012 各版本功能比较 – zock – 博客园

    有关不同版本的 SQL Server 2012 所支持的功能的详细信息。

    功能名称 Enterprise 商业智能 Standard Web Express with Advanced Services Express with Tools Express
    单个实例使用的最大计算能力(SQL Server 数据库引擎)1 操作系统最大值 限制为 4 个插槽或 16 核,取二者中的较小值 限制为 4 个插槽或 16 核,取二者中的较小值 限制为 4 个插槽或 16 核,取二者中的较小值 限制为 1 个插槽或 4 核,取二者中的较小值 限制为 1 个插槽或 4 核,取二者中的较小值 限制为 1 个插槽或 4 核,取二者中的较小值
    单个实例使用的最大计算能力(Analysis Services、Reporting Services)1 操作系统支持的最大值 操作系统支持的最大值 限制为 4 个插槽或 16 核,取二者中的较小值 限制为 4 个插槽或 16 核,取二者中的较小值 限制为 1 个插槽或 4 核,取二者中的较小值 限制为 1 个插槽或 4 核,取二者中的较小值 限制为 1 个插槽或 4 核,取二者中的较小值
    利用的最大内存(SQL Server 数据库引擎) 操作系统支持的最大值 64 GB 64 GB 64 GB 1 GB 1 GB 1 GB
    利用的最大内存 (Analysis Services) 操作系统支持的最大值 操作系统支持的最大值 64 GB 不适用 不适用 不适用 不适用
    利用的最大内存 (Reporting Services) 操作系统支持的最大值 操作系统支持的最大值 64 GB 64 GB 4 GB 不适用 不适用
    最大关系数据库大小 524 PB 524 PB 524 PB 524 PB 10 GB 10 GB 10 GB

    高可用性(始终启用)

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    服务器内核支持1

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    日志传送

    支持

    支持

    支持

    支持

    数据库镜像

    支持

    支持(仅支持“完全”安全级别)

    支持(仅支持“完全”安全级别)

    仅见证服务器

    仅见证服务器

    仅见证服务器

    仅见证服务器

    故障转移群集

    支持(节点支持:操作系统最大值)

    支持(节点支持:2)

    支持(节点支持:2)

    备份压缩

    支持

    支持

    支持

    数据库快照

    支持

    AlwaysOn 可用性组

    支持

    SQL Server 多子网群集

    支持

    连接控制器 (Connection Director)

    支持

    联机页面和文件还原

    支持

    联机索引

    支持

    联机架构更改

    支持

    快速恢复

    支持

    镜像备份

    支持

    热添加内存和 CPU2

    支持

     

    伸缩性和性能

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    多实例支持

    50

    50

    50

    50

    50

    50

    50

    表和索引分区

    支持

    数据压缩

    支持

    资源调控器

    支持

    分区表并行度

    支持

    多个 Filestream 容器

     

    安全性

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    基本审核

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    精细审核

    支持

    透明数据库加密

    支持

    可扩展的密钥管理

    支持

     

    复制

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    SQL Server 更改跟踪

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    合并复制

    支持

    支持

    支持

    支持(仅订阅服务器)

    支持(仅订阅服务器)

    支持(仅订阅服务器)

    支持(仅订阅服务器)

    事务复制

    支持

    支持

    支持

    支持(仅订阅服务器)

    支持(仅订阅服务器)

    支持(仅订阅服务器)

    支持(仅订阅服务器)

    快照复制

    支持

    支持

    支持

    支持(仅订阅服务器)

    支持(仅订阅服务器)

    支持(仅订阅服务器)

    支持(仅订阅服务器)

    异类订阅服务器

    支持

    支持

    支持

    Oracle 发布

    支持

    对等事务复制

    支持

     

    管理工具

    能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    SQL 管理对象 (SMO)

    支持

    支持

    支持1

    支持

    支持

    支持

    支持

    SQL 配置管理器

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    SQL CMD(命令提示工具)

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    SQL Server Management Studio

    支持

    支持

    支持

    支持

    支持

    支持

    分布式重播 – 管理工具

    支持

    支持

    支持

    支持

    支持

    支持

    分布式重播 – 客户端

    支持

    支持

    支持

    支持

    分布式重播 – 控制器

    支持(Enterprise 版支持最多 16 个客户端、Developer 版仅支持 1 个客户端)

    支持(仅支持 1 个客户端)

    支持(仅支持 1 个客户端)

    支持(仅支持 1 个客户端)

    SQL Profiler

    支持

    支持

    支持

    不支持2

    不支持2

    不支持2

    不支持2

    SQL Server 代理

    支持

    支持

    支持

    支持

    Microsoft System Center Operations Manager 管理包

    支持

    支持

    支持

    支持

    数据库优化顾问 (DTA)

    支持

    支持

    支持3

    支持3

     

    RDBMS 可管理性

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    用户实例

    支持

    支持

    支持

    专用管理连接

    支持

    支持

    支持

    支持

    支持(受跟踪标志控制)

    支持(受跟踪标志控制)

    支持(受跟踪标志控制)

    PowerShell 脚本支持

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    SysPrep 支持1

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    支持数据层应用程序组件操作 – 提取、部署、升级、删除

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    策略自动执行(检查计划和更改)

    支持

    支持

    支持

    支持

    性能数据收集器

    支持

    支持

    支持

    支持

    能够作为多实例管理中的托管实例注册

    支持

    支持

    支持

    支持

    标准性能报表

    支持

    支持

    支持

    支持

    计划指南和计划指南的计划冻结

    支持

    支持

    支持

    支持

    使用 NOEXPAND 提示的索引视图的直接查询

    支持

    支持

    支持

    支持

    自动的索引视图维护

    支持

    支持

    支持

    支持

    分布式分区视图

    支持

    部分支持。 不能更新分布式分区视图

    部分支持。 不能更新分布式分区视图

    部分支持。 不能更新分布式分区视图

    部分支持。 不能更新分布式分区视图

    部分支持。 不能更新分布式分区视图

    部分支持。 不能更新分布式分区视图

    并行索引操作

    支持

    查询优化器自动使用索引视图

    支持

    并行一致性检查

    支持

    SQL Server 实用工具控制点

    支持

    开发工具

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    Microsoft Visual Studio 集成

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    SQL Server Developer Studio

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    Intellisense(Transact-SQL 和 MDX)1

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    SQL Server 数据工具 (SSDT)

    支持

    支持

    支持

    支持

    支持

    SQL 查询编辑和设计工具1

    支持

    支持

    支持

    版本控制支持1

    支持

    支持

    支持

    MDX 编辑、调试和设计工具1

    支持

    支持

    支持

    可编程性

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    公共语言运行时 (CLR) 集成

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    本机 XML 支持

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    XML 索引

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    MERGE 和 UPSERT 功能

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    FILESTREAM 支持

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    FileTable

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    日期和时间数据类型

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    国际化支持

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    全文和语义搜索

    支持

    支持

    支持

    支持

    支持

    查询中的语言规范

    支持

    支持

    支持

    支持

    支持

    Service Broker(消息传递)

    支持

    支持

    支持

    不支持(仅客户端)

    不支持(仅客户端)

    不支持(仅客户端)

    不支持(仅客户端)

    Web 服务(HTTP/SOAP 端点)

    支持

    支持

    支持

    支持

    T-SQL 端点

    支持

    支持

    支持

    支持

     

    Integration Services

    功能

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    SQL Server 导入和导出向导

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    内置数据源连接器

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    SSIS 设计器和运行时

    支持

    支持

    支持

    基本转换

    支持

    支持

    支持

    基本数据探查工具

    支持

     

    Integration Services – 高级适配器

    能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    高性能 Oracle 目标

    支持

    高性能 Teradata 目标

    支持

    SAP BW 源和目标

    支持

    数据挖掘模型定型目标适配器

    支持

    维度处理目标适配器

    支持

    分区处理目标适配器

    支持

     

    Integration Services – 高级转换

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    持久性(高性能)查找

    支持

    数据挖掘查询转换

    支持

    模糊分组和查找转换

    支持

    术语提取和查找转换

    支持

     

    Master Data Services

    注意

    • Master Data Services 仅适用于 Business Intelligence 版和 Enterprise 版的 64 位版本。
    • 只有从 SQL Server 2008 R2 Enterprise 升级时 SQL Server 2012 Enterprise 才可用。

     

    功能

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    Master Data Services 数据库

    支持

    支持

    主数据管理器 Web 应用程序

    支持

    支持

     

    数据仓库

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    在无需数据库的情况下创建多维数据集

    支持

    支持

    支持

    自动生成临时和数据仓库架构

    支持

    支持

    支持

    变更数据捕获

    支持

    星型联接查询优化

    支持

    可扩展的只读 Analysis Services 配置

    支持

    主动缓存

    支持

    针对已分区表和索引的并行查询处理

    支持

    列存储索引

    支持

     

    Analysis Services

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    可扩展的共享数据库(附加/分离,只读数据库)

    支持

    支持

    高可用性

    支持

    支持

    支持

    可编程性(AMO、ADOMD.Net、OLEDB、XML/A、ASSL)

    支持

    支持

    支持

     

    BI 语义模型(多维)

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    半累加性度量值

    支持

    支持

    层次结构

    支持

    支持

    支持

    KPI

    支持

    支持

    支持

    透视

    支持

    支持

    操作

    支持

    支持

    支持

    帐户智能

    支持

    支持

    支持

    时间智能

    支持

    支持

    支持

    自定义汇总

    支持

    支持

    支持

    写回多维数据集

    支持

    支持

    支持

    写回维度

    支持

    支持

    写回单元

    支持

    支持

    支持

    钻取

    支持

    支持

    支持

    高级层次结构类型(父子、不规则层次结构)

    支持

    支持

    支持

    高级维度(引用维度、多对多维度)

    支持

    支持

    支持

    链接度量值和维度

    支持

    支持

    转换

    支持

    支持

    聚合

    支持

    支持

    支持

    多个分区

    支持

    支持

    支持,最多 3 个

    主动缓存

    支持

    支持

    自定义程序集(存储过程)

    支持

    支持

    支持

    MDX 查询和脚本

    支持

    支持

    支持

    基于角色的安全模型

    支持

    支持

    支持

    维度和单元级别的安全性

    支持

    支持

    支持

    可扩展字符串存储

    支持

    支持

    支持

    MOLAP、ROLAP、HOLAP 存储模式

    支持

    支持

    支持

    二进制和压缩的 XML 传输

    支持

    支持

    支持

    推送模式处理

    支持

    支持

    直接写回

    支持

    支持

    度量值表达式

    支持

    支持

     

    BI 语义模型(表格)

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    层次结构

    支持

    支持

    KPI

    支持

    支持

    半累加性度量值

    支持

    支持

    透视

    支持

    支持

    翻译

    支持

    支持

    DAX 计算、DAX 查询、MDX 查询

    支持

    支持

    行级安全性

    支持

    支持

    分区

    支持

    支持

    VertiPaq 和 DirectQuery 存储模式(仅限表格)

    支持

    支持

     

    PowerPivot for SharePoint

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    基于共享服务体系结构的 SharePoint 场集成

    支持

    支持

    用量报告

    支持

    支持

    运行状况监视规则

    支持

    支持

    PowerPivot 库

    支持

    支持

    PowerPivot 数据刷新

    支持

    支持

    PowerPivot 数据馈送

    支持

    支持

     

    数据挖掘

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    标准算法

    支持

    支持

    支持

    数据挖掘工具(向导、编辑器、查询生成器)

    支持

    支持

    支持

    交叉验证

    支持

    支持

    挖掘结构数据的筛选子集的模型

    支持

    支持

    时序:ARTXP 和 ARIMA 方法之间的自定义混和

    支持

    支持

    时序:使用新数据的预测

    支持

    支持

    无限制并发数据挖掘查询

    支持

    支持

    数据挖掘算法的高级配置和优化选项

    支持

    支持

    支持插件算法

    支持

    支持

    并行模型处理

    支持

    支持

    时序:跨序列预测

    支持

    支持

    关联规则的无限制属性

    支持

    支持

    序列预测

    支持

    支持

    Naïve Bayes、神经网络和逻辑回归的多个预测目标

    支持

    支持

     

    Reporting Services

    Reporting Services 的功能

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    支持的目录 DB SQL Server 版本

    Standard 或更高版本

    Standard 或更高版本

    Standard 或更高版本

    Web

    Express

    支持的数据源 SQL Server 版本

    所有 SQL Server 版本

    所有 SQL Server 版本

    所有 SQL Server 版本

    Web

    Express

    报表服务器

    支持

    支持

    支持

    支持

    支持

    报表设计器

    支持

    支持

    支持

    支持

    支持

    报表管理器

    支持

    支持

    支持

    支持

    支持

    基于角色的安全性

    支持

    支持

    支持

    支持

    Word 导出和 RTF 格式支持

    支持

    支持

    支持

    支持

    支持

    增强的仪表和图表

    支持

    支持

    支持

    支持

    支持

    导出到 Excel、PDF 和图像

    支持

    支持

    支持

    支持

    支持

    自定义身份验证

    支持

    支持

    支持

    支持

    支持

    作为数据馈送的报表

    支持

    支持

    支持

    支持

    支持

    模型支持

    支持

    支持

    支持

    支持

    为基于角色的安全性创建自定义角色

    支持

    支持

    支持

    模型项安全性

    支持

    支持

    支持

    无限制链接点击

    支持

    支持

    支持

    共享组件库

    支持

    支持

    支持

    电子邮件和文件共享订阅和计划

    支持

    支持

    支持

    报表历史记录、执行快照和缓存

    支持

    支持

    支持

    SharePoint 集成

    支持

    支持

    支持

    远程和非 SQL 数据源支持1

    支持

    支持

    支持

    数据源、传递和呈现、RDCE 可扩展性

    支持

    支持

    支持

    数据驱动报表订阅

    支持

    支持

    扩展部署(Web 场)

    支持

    支持

    警报2

    支持

    支持

    Power View2

    支持

    支持

     

    报表服务器数据库的服务器版本要求

    创建报表服务器数据库时,并非所有版本的 SQL Server 均可用来承载数据库。 下表显示了可用于特定 Reporting Services 版本的数据库引擎版本。

    对于此 SQL Server Reporting Services 版本

    使用此版本的数据库引擎实例来承载数据库

    Enterprise

    Standard Edition、Business Intelligence Enterprise Edition(本地或远程)

    商业智能

    Standard Edition、Business Intelligence Enterprise Edition(本地或远程)

    Standard

    Standard Edition、Enterprise Edition(本地或远程)

    Web

    Web Edition(仅用于本地)

    Express with Advanced Services

    Express with Advanced Services(仅用于本地)。

    Evaluation

    Evaluation

     

    商业智能客户端

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    报表生成器

    支持

    支持

    支持

    用于 Excel 和 Visio 2010 的数据挖掘外接程序

    支持

    支持

    支持

    PowerPivot for Excel 2010

    支持

    支持

    Master Data Services 用于 Excel 的外接程序

    支持

    支持

     

    空间和位置服务

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    空间索引

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    平面和大地测量数据类型

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    高级空间库

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    导入/导出业界标准的空间数据格式

    支持

    支持

    支持

    支持

    支持

    支持

    支持

     

    其他数据库服务

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    SQL Server Migration Assistant

    支持

    支持

    支持

    支持

    支持

    支持

    支持

    数据库邮件1

    支持

    支持

    支持

    支持

     
     

     

    其他组件

    功能名称

    Enterprise

    商业智能

    Standard

    Web

    Express with Advanced Services

    Express with Tools

    Express

    Data Quality Services

    支持

    支持

    StreamInsight

    StreamInsight Premium Edition

    StreamInsight Standard Edition

    StreamInsight Standard Edition

    StreamInsight Standard Edition

    StreamInsight HA

    StreamInsight Premium Edition

  • 转:使用Json Template在Azure China创建ARM类型的虚拟机

    前面几篇文章介绍过Azure的两种VM的模式,包括ASM和ARM。并且介绍了如何用Azure CLI和PowerShell创建虚拟机。本文将介绍如何采用Json的Template来创建基于ARM的VM。
    当然采用Json Template的方式创建虚拟机是几种方式中最好的,这样可以便于批量部署、Json文件可以重用。
    ARM的Template的格式采用的是Json的格式。其需要的几个部分如下:

    需要定义的有:parameters,variables,resources和outputs。但只有resources是必须的。
    由于Template的内容比较复杂,一般都采用复制已有的Template Jason文件修改的方式。
    目前,在Github上有大量的Azure ARM Jason Template,可以下载修改使用。
    具体的网址在:
    https://github.com/Azure/azure-quickstart-templates
    比如我们要创建一台CentOS 6.5的Linux虚拟机。在上面的链接中,没有相应的template。我们通过一台Ubuntu的Template进行修改。
    首先下载两个Jason文件:
    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-linux/azuredeploy.json
    https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-linux/azuredeploy.parameters.json
    第一个文件是部署文件,第二个文件是参数文件。
    我们首先看部署文件:
    一、修改parameter中的内容
    1 把Ubuntu版本改成CentOS版本:

    复制代码
        "ubuntuOSVersion": {
          "type": "string",
          "defaultValue": "14.04.2-LTS",
          "allowedValues": [
            "12.04.5-LTS",
            "14.04.2-LTS",
            "15.10"
          ],
    复制代码

     
    改成

    复制代码
        "CentOSVersion": {
          "type": "string",
          "defaultValue": "6.5",
          "allowedValues": [
            "6.5",
            "6.6",
            "7.0",
            "7.1"
          ],
    复制代码

     
    2 把metadata的描述更改

    "metadata": {
        "description": "The Ubuntu version for the VM. This will pick a fully patched image of this given Ubuntu version. Allowed values: 12.04.5-LTS, 14.04.2-LTS, 15.10."
    }

     
    改为:

    "metadata": {
        "description": "The CentOS version for the VM. This will pick a fully patched image of this given CentOS version. Allowed values: 6.5, 6.6, 7.0, 7.1."
    }

     
    二、修改variables中的内容
    原始的变量定义如下:

    复制代码
      "variables": {
        "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'salinuxvm')]",
        "dataDisk1VhdName": "datadisk1",
        "imagePublisher": "Canonical",
        "imageOffer": "UbuntuServer",
        "OSDiskName": "osdiskforlinuxsimple",
        "nicName": "myVMNic",
        "addressPrefix": "10.0.0.0/16",
        "subnetName": "Subnet",
        "subnetPrefix": "10.0.0.0/24",
        "storageAccountType": "Standard_LRS",
        "publicIPAddressName": "myPublicIP",
        "publicIPAddressType": "Dynamic",
        "vmStorageAccountContainerName": "vhds",
        "vmName": "MyUbuntuVM",
        "vmSize": "Standard_D1",
        "virtualNetworkName": "MyVNET",
        "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]",
        "subnetRef": "[concat(variables('vnetID'),'/subnets/',variables('subnetName'))]",
        "apiVersion": "2015-06-15"
      },
    复制代码

     
    更改为:

    复制代码
      "variables": {
        "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'salinuxvm')]",
        "dataDisk1VhdName": "datadisk1",
        "imagePublisher": "OpenLogic",
        "imageOffer": "CentOS",
        "OSDiskName": "osdiskforlinuxsimple",
        "nicName": "myVMNic",
        "addressPrefix": "10.0.0.0/16",
        "subnetName": "Subnet",
        "subnetPrefix": "10.0.0.0/24",
        "storageAccountType": "Standard_LRS",
        "publicIPAddressName": "myPublicIP",
        "publicIPAddressType": "Dynamic",
        "vmStorageAccountContainerName": "vhds",
        "vmName": "MyCentOSVM",
        "vmSize": "Standard_A1",
        "virtualNetworkName": "MyVNET",
        "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]",
        "subnetRef": "[concat(variables('vnetID'),'/subnets/',variables('subnetName'))]",
        "apiVersion": "2015-06-15"
      },
    复制代码

     
    修改完部署文件后,修改参数文件:
    参数文件如下:

    复制代码
    {
      "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "adminUsername": {
          "value": "azureUser"
        },
        "adminPassword": {
          "value": "GEN-PASSWORD"
        },
        "dnsLabelPrefix": {
          "value": "GEN-UNIQUE"
        },
        "ubuntuOSVersion": {
          "value": "14.04.2-LTS"
        }
      }
    }
    复制代码

     
    更改为:

    复制代码
    {
      "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "adminUsername": {
          "value": "hengwei"
        },
        "adminPassword": {
          "value": "abc@123456"
        },
        "dnsLabelPrefix": {
          "value": "hwvm"
        },
        "CentOSVersion": {
          "value": "6.5"
        }
      }
    }
    复制代码

     
     
    并把两个文件上传到Github上,链接如下:
    https://raw.githubusercontent.com/hengv/Hengwei/Azure/101-simple-linux/azuredeploy.json
    https://raw.githubusercontent.com/hengv/Hengwei/Azure/101-simple-linux/azuredeploy.parameters.json
    下面可以通过PowerShell命令通过Jason Template创建VM了:

    复制代码
    New-AzureRmResourceGroup -Name hw01 -Location chinaeast
    ResourceGroupName : hw01
    Location          : chinaeast
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/xxxxxxxx/resourceGroups/hw01
    复制代码
    复制代码
    New-AzureRmResourceGroupDeployment -Name hwvm01 -ResourceGroupName hw01 -TemplateUri https://raw.githubusercontent.com/hengv/Hengwei/Azure/101-simple-linux/azuredeploy.json -TemplateParameterUri https://raw.githubusercontent.com/hengv/Hengwei/Azure/101-simple-linux/azuredeploy.parameters.json -Mode Incremental
    DeploymentName          : hwvm01
    ResourceGroupName       : hw01
    ProvisioningState       : Succeeded
    Timestamp               : 2016/7/1 14:09:58
    Mode                    : Incremental
    TemplateLink            :
                              Uri            : https://raw.githubusercontent.com/hengv/Hengwei/Azure/101-simple-linux/azuredeploy.json
                              ContentVersion : 1.0.0.0
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              adminUsername    String                     hengwei
                              adminPassword    SecureString
                              dnsLabelPrefix   String                     hwvm
                              centOSVersion    String                     6.5
    Outputs                 :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              hostname         String                     hwvm.chinaeast.cloudapp.azure.com
                              sshCommand       String                     ssh hengwei@hwvm.chinaeast.cloudapp.azure.com
    DeploymentDebugLogLevel :
    复制代码

     
    创建成功。
    再通过下面的命令查看:

    复制代码
    get-azurermvm
    RequestId                         : afe8fb47-4e2f-434f-aa40-4d230a549598
    StatusCode                        : OK
    ResourceGroupName                 : HW01
    Id                                : /subscriptions/xxxxxxxx/resourceGroups/HW01/providers/Microsoft.Compute/virtualMachines/MyCentOSVM
    Name                              : MyCentOSVM
    Type                              : Microsoft.Rest.Azure.AzureOperationResponse`1[Microsoft.Rest.Azure.IPage`1[Microsoft.Azure.Management.Compute.Models.VirtualMachine]]
    Location                          : chinaeast
    Tags                              : {}
    DiagnosticsProfile                :
      BootDiagnostics                 :
        Enabled                       : True
        StorageUri                    : https://eyyvnizdwsddusalinuxvm.blob.core.chinacloudapi.cn/
    HardwareProfile                   :
      VmSize                          : Standard_A1
    NetworkProfile                    :
      NetworkInterfaces[0]            :
        Id                            : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic
    OSProfile                         :
      ComputerName                    : MyCentOSVM
      AdminUsername                   : hengwei
      LinuxConfiguration              :
        DisablePasswordAuthentication : False
    ProvisioningState                 : Succeeded
    StorageProfile                    :
      ImageReference                  :
        Publisher                     : OpenLogic
        Offer                         : CentOS
        Sku                           : 6.5
        Version                       : latest
      OsDisk                          :
        OsType                        : Linux
        Name                          : osdisk
        Vhd                           :
          Uri                         : https://eyyvnizdwsddusalinuxvm.blob.core.chinacloudapi.cn/vhds/osdiskforlinuxsimple.vhd
        Caching                       : ReadWrite
        CreateOption                  : FromImage
      DataDisks[0]                    :
        Lun                           : 0
        Name                          : datadisk1
        Vhd                           :
          Uri                         : https://eyyvnizdwsddusalinuxvm.blob.core.chinacloudapi.cn/vhds/datadisk1.vhd
        Caching                       : None
        CreateOption                  : Empty
        DiskSizeGB                    : 100
    DataDiskNames[0]                  : datadisk1
    NetworkInterfaceIDs[0]            : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic
    复制代码
    复制代码
    Get-AzureRmNetworkInterface
    Name                 : myVMNic
    ResourceGroupName    : hw01
    Location             : chinaeast
    Id                   : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic
    Etag                 : W/"1e379401-4980-42c6-ba83-9e26f19133bd"
    ResourceGuid         : c4e50ac6-fdb1-416c-a5b2-d71baace6b55
    ProvisioningState    : Succeeded
    Tags                 :
    VirtualMachine       : {
                             "Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Compute/virtualMachines/MyCentOSVM"
                           }
    IpConfigurations     : [
                             {
                               "Name": "ipconfig1",
                               "Etag": "W/\"1e379401-4980-42c6-ba83-9e26f19133bd\"",
                               "Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic/ipConfigurations/ipconfig1",
                               "PrivateIpAddress": "10.0.0.4",
                               "PrivateIpAllocationMethod": "Dynamic",
                               "Subnet": {
                                 "Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/virtualNetworks/MyVNET/subnets/Subnet"
                               },
                               "PublicIpAddress": {
                                 "Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/publicIPAddresses/myPublicIP"
                               },
                               "ProvisioningState": "Succeeded",
                               "LoadBalancerBackendAddressPools": [],
                               "LoadBalancerInboundNatRules": [],
                               "ApplicationGatewayBackendAddressPools": []
                             }
                           ]
    DnsSettings          : {
                             "DnsServers": [],
                             "AppliedDnsServers": []
                           }
    EnableIPForwarding   : False
    NetworkSecurityGroup : null
    Primary              : True
    复制代码
    复制代码
    Get-AzureRmPublicIpAddress
    Name                     : myPublicIP
    ResourceGroupName        : hw01
    Location                 : chinaeast
    Id                       : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/publicIPAddresses/myPublicIP
    Etag                     : W/"0d4e57f8-25a1-4bf7-bec9-e98785ed8179"
    ResourceGuid             : f8216ff0-06a6-478b-8270-f18fc717c0f7
    ProvisioningState        : Succeeded
    Tags                     :
    PublicIpAllocationMethod : Dynamic
    IpAddress                : 42.159.235.75
    IdleTimeoutInMinutes     : 4
    IpConfiguration          : {
                                 "Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic/ipConfigurations/ipconfig1"
                               }
    DnsSettings              : {
                                 "DomainNameLabel": "hwvm",
                                 "Fqdn": "hwvm.chinaeast.cloudapp.chinacloudapi.cn"
    复制代码

     

    复制代码
    Get-AzureRmVirtualNetwork
    Name              : MyVNET
    ResourceGroupName : hw01
    Location          : chinaeast
    Id                : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/virtualNetworks/MyVNET
    Etag              : W/"888d8b21-091b-4f40-b2ba-284f16c0f641"
    ResourceGuid      : a69ef02a-728e-4212-8c2a-7a7c0f4bb881
    ProvisioningState : Succeeded
    Tags              :
    AddressSpace      : {
                          "AddressPrefixes": [
                            "10.0.0.0/16"
                          ]
                        }
    DhcpOptions       : null
    Subnets           : [
                          {
                            "Name": "Subnet",
                            "Etag": "W/\"888d8b21-091b-4f40-b2ba-284f16c0f641\"",
                            "Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/virtualNetworks/MyVNET/subnets/Subnet",
                            "AddressPrefix": "10.0.0.0/24",
                            "IpConfigurations": [
                              {
                                "Id": "/subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Network/networkInterfaces/myVMNic/ipConfigurations/ipconfig1"
                              }
                            ],
                            "ProvisioningState": "Succeeded"
                          }
                        ]
    复制代码
    复制代码
    Get-AzureRmStorageAccount
    ResourceGroupName   : hw01
    StorageAccountName  : eyyvnizdwsddusalinuxvm
    Id                  : /subscriptions/xxxxxxxx/resourceGroups/hw01/providers/Microsoft.Storage/storageAccounts/eyyvnizdwsddusalinuxvm
    Location            : chinaeast
    Sku                 : Microsoft.Azure.Management.Storage.Models.Sku
    Kind                : Storage
    Encryption          :
    AccessTier          :
    CreationTime        : 2016/7/1 14:07:14
    CustomDomain        :
    LastGeoFailoverTime :
    PrimaryEndpoints    : Microsoft.Azure.Management.Storage.Models.Endpoints
    PrimaryLocation     : chinaeast
    ProvisioningState   : Succeeded
    SecondaryEndpoints  :
    SecondaryLocation   :
    StatusOfPrimary     : Available
    StatusOfSecondary   :
    Tags                : {}
    Context             : Microsoft.WindowsAzure.Commands.Common.Storage.AzureStorageContext
    复制代码

     

  • 转:ARM模式下从已有的VHD文件创建新的虚拟机

    Azure在ASM模式下可以通过Portal界面的Caputure或Save-AzureVMImage等方式创建VM的Image模板,实现对已有VM的快速重新部署。
    在Azure的ARM下,要实现类似的功能,可以通过采用JSON的Template部署的方式实现。本文将介绍这一方法。
    1 通过PowerShell列出需要复制的虚拟机,并记录其OSDisk的链接:

    复制代码
    get-azurermvm
    RequestId                         : 984a6daa-c8cf-4f4f-8edc-d9cceabf3d95
    StatusCode                        : OK
    ResourceGroupName                 : HWNOSQL
    Id                                : /subscriptions/xxxx/resourceGroups/HWNOSQL/providers/Microsoft.Compute/virtualMachines/hwnosql
    Name                              : hwnosql
    Type                              : Microsoft.Rest.Azure.AzureOperationResponse`1[Microsoft.Rest.Azure.IPage`1[Microsoft.Azure.Management.Compute.Models.VirtualMa
    chine]]
    Location                          : chinaeast
    Tags                              : {}
    DiagnosticsProfile                :
      BootDiagnostics                 :
        Enabled                       : True
        StorageUri                    : https://hwnosql969.blob.core.chinacloudapi.cn/
    Extensions[0]                     :
      Id                              : /subscriptions/xxxx/resourceGroups/HWNOSQL/providers/Microsoft.Compute/virtualMachines/hwnosql
    /extensions/Microsoft.Insights.VMDiagnosticsSettings
    HardwareProfile                   :
      VmSize                          : Standard_A1
    NetworkProfile                    :
      NetworkInterfaces[0]            :
        Id                            : /subscriptions/xxxx/resourceGroups/hwnosql/providers/Microsoft.Network/networkInterfaces/hwnos
    ql966
    OSProfile                         :
      ComputerName                    : hwnosql
      AdminUsername                   : hengwei
      LinuxConfiguration              :
        DisablePasswordAuthentication : False
    ProvisioningState                 : Succeeded
    StorageProfile                    :
      ImageReference                  :
        Publisher                     : OpenLogic
        Offer                         : CentOS
        Sku                           : 7.2
        Version                       : latest
      OsDisk                          :
        OsType                        : Linux
        Name                          : hwnosql
        Vhd                           :
          Uri                         : https://hw01sa01.blob.core.chinacloudapi.cn/vhds/hwnosql2016722122351.vhd
        Caching                       : ReadWrite
        CreateOption                  : FromImage
    NetworkInterfaceIDs[0]            : /subscriptions/xxxx/resourceGroups/hwnosql/providers/Microsoft.Network/networkInterfaces/hwnos
    ql966
    复制代码

     
    其中https://hw01sa01.blob.core.chinacloudapi.cn/vhds/hwnosql2016722122351.vhd 是其OSDisk的链接。
    2 用AzCopy复制此vhd文件到另外一个Container:

    复制代码
    C:\Users\hengz>set key="xxxxxxxxxxxx=="
    C:\Users\hengz>azcopy /source:https://hw01sa01.blob.core.chinacloudapi.cn/vhds /dest:https://hw01sa01.blob.core.chinacloudapi.cn/vhd /destkey:%key% /sourcekey:%key% /pattern:hwnosql2016722122351.vhd
    Finished 1 of total 1 file(s).
    [2016/08/25 16:55:00] Transfer summary:
    -----------------
    Total files transferred: 1
    Transfer successfully:   1
    Transfer skipped:        0
    Transfer failed:         0
    Elapsed time:            00.00:00:03
    复制代码

     
    3 在GitHub上的quickstart template找到相应的脚本:
    https://github.com/Azure/azure-quickstart-templates/tree/master/101-vm-from-user-image
    其中有两个文件是我们需要的,一个是azuredeploy.json, 另外一个是azuredeploy.parameters.json。
    浏览azuredeploy.json,没有什么需要我们更改的。
    浏览azuredeploy.parameters.json,更改所需内容:

    复制代码
    {
      "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "customVmName": {
          "value": "hwcopyimageVM"
        },
        "userImageStorageAccountName": {
          "value": "hw01sa01"
        },
        "adminUsername": {
          "value": "hengwei"
        },
        "adminPassword": {
          "value": "xxxxxxxx"
        },
        "osDiskVhdUri": {
          "value": "https://hw01sa01.blob.core.chinacloudapi.cn/vhd/hwnosql2016722122351.vhd"
        },
        "dnsLabelPrefix": {
          "value": "hwcopyimagevm"
        },
        "osType": {
          "value": "Linux"
        },
        "vmSize": {
          "value": "Standard_A1"
        },
        "newOrExistingVnet": {
          "value": "existing"
        },
        "newOrExistingVnetName": {
          "value": "hw01vnet"
        },
        "newOrExistingSubnetName": {
          "value": "Subnet-1"
        }
      }
    }
    复制代码

     
    4 通过PowerShell命令部署新的虚拟机:

    复制代码
    New-AzureRmResourceGroupDeployment -Name hwdpmt01 -ResourceGroupName hw01 -Mode Incremental -TemplateFile D:\Hengwei\Documents\GitHub\azure-quickstart-templates\101-vm-from-user-image\azuredeploy.json -TemplateParameterFile D:\Hengwei\Documents\GitHub\azure-quickstart-templates\101-vm-from-user-image\azuredeploy.parameters.json
    DeploymentName          : hwdpmt01
    ResourceGroupName       : hw01
    ProvisioningState       : Succeeded
    Timestamp               : 2016/8/25 9:10:23
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              customVmName     String                     hwcopyimageVM
                              userImageStorageAccountName  String                     hw01sa01
                              osDiskVhdUri     String                     https://hw01sa01.blob.core.chinacloudapi.cn/vhd/hwnosql2016722122351.vhd
                              dnsLabelPrefix   String                     hwcopyimagevm
                              adminUserName    String                     hengwei
                              adminPassword    SecureString
                              osType           String                     Linux
                              vmSize           String                     Standard_A1
                              newOrExistingVnet  String                     existing
                              newOrExistingVnetName  String                     hw01vnet
                              newOrExistingSubnetName  String                     Subnet-1
    Outputs                 :
    DeploymentDebugLogLevel :
    复制代码

     
    至此,部署完成。

  • 转:超详细的三部曲:搭建Nessus漏洞检测系统

    Nessus 被认为是目前全世界最多人使用的系统漏洞扫描与分析软件。总共有超过75,000个机构使用Nessus 作为扫描该机构电脑系统的软件。自从1998年开发至今已谕十年, 故为一架构成熟的软件
    需要的软件包如下:
    Nessus-3.2.0-es5.i386
    NessusClient-3.2.1-es5.i386
     
    安装软件包
    1 安装服务器端、客户端rpm包(安装过程中会初始化服务器端插件)
    wps_clip_image-8972

    2 添加执行程序路径、帮助文件路径。
    Nessus的相关执行程序默认位于/opt/nessus/sbin 和/opt/nessus/bin/目录,帮组文件默认位于/opt/nessus/man/目录。
    可分别调整环境变量PATH和MANPATH,以方便执行Nessus相关程序及查看帮助。
    这种是一次性的,也就是说重启后将不再生效
    wps_clip_image-28503
    下面这种是永久生效的:
     

    
    
    1. #vi ~/.bash_profile
    2. export PATH=/opt/nessus/sbin:/opt/nessus/bin:$PATH
    3. export MANPATH=/opt/nessus/man:’manpath’
    4. :wq!

     
    wps_clip_image-30806

    添加完以后,wq!强制保存退出

    配置服务端

    安装好nessus后,系统中将增加一个名为nessusd的服务。只需要添加一个用于扫描的用户,并启动nessusd服务,服务端就基本配置完成。
    Ps:Nessus还提供了一系列的脚本程序用于简化操作呢
    1启动Nessusd服务
    wps_clip_image-15080
    2 添加扫描用户
    执行nessus-adduser脚本,将会进入添加用户的交互式界面,需要依次指定用户名、认证方式、扫面规则等。主要步骤:
    a.输入新添加的用户名,该用户不需要是本地系统用户 (例如scaner1)
    b.选择认证方式(证书或密码),默认使用密码认证。
    c.如果选择使用密码认证,则重复输入两次密码确认 (例如pwd123)
    d.设置扫描权限规则(可以为空),即允许该用户扫描哪些网段或主机。每行设置一条扫描规则,一般使用”accept|deny IP/mask”的形式,“default deny|accept”的形式用于定义默认规则。规则设置完毕后,按ctrl+D 组合键提交。
    f.再次确认以上信息无误后,直接回车完成用户的添加。
    wps_clip_image-9457

    3管理扫描用户
    Nessus-rmuser脚本可用于删除用户,而nessus-chpasswd用于修改用户密码。
    —————–至此,Nessus已经配置完毕,可以使用了——————————

    使用Nessus用户端

    1运行客户端
    用户端需要在x-window图形环境中运行。
    确认当前在图形界面,执行命令:NessusClient& ,(注意大小写)即可打开用户端。
    wps_clip_image-12871
    wps_clip_image-17896

    2连接服务端
    单机左下方的“connect”,在弹出的对话框中点击左下方的“+”号按钮,设置好连接名称、需要登陆的NessusD服务器地址,以及使用的扫描用户名、密码。单击”save”保存。如下图所示:
    wps_clip_image-159453添加扫描目标
    选择“connection Manger”对话框中,选择刚刚创建的New connection进行连接。连接成功后,在scan选项卡中,单击“network(s) to scan”栏下方的“+”号按钮,设置需要扫描的主机或网络地址,如单个主机192.168.1.10,单击save保存。
    wps_clip_image-18634
    4执行漏洞扫描
    返回到scan选项卡,从左侧列表中选择刚设置的扫描用户,在右侧列表中选择Default scan policy 默认扫描策略,单机下方的scan now 按钮。如下图
    wps_clip_image-26127
    wps_clip_image-20690
    5获取及分析漏洞检测报告
    扫描完成后,可以通过“report”选项卡查看检测结果。针对目标主机的灭一个的每一项扫描内容,都可以获取摘要信息、具体描述、风险、建议解决方法等。如下图
    wps_clip_image-7679
    对于风险程度较高的安全隐患,会以高亮的颜色标出(橙色、红色)。Nessus会根据已知的风险评估给出相应的解决办法。
    例如主机开启了pop3服务,会建议关闭服务。
    单击右侧的“export”按钮可以将检测的结果到导出为html文件保存,方便在浏览器中查看

  • 转:Windows Azure Application Gateway 应用程序网关

    原文:http://winhe.blog.51cto.com/7547741/1742487

     本文主要介绍Windows Azure 应用程序网关三种主要功能介绍:Http负载平衡基于cookie会话连接SSL卸载

    技术分享
    Azure应用程序网关(Azure Application Gateway
    基础环境准备,在虚拟网络中为应用程序网关创建一个子网,在本文中使用AppGateway-1子网。
    技术分享

    New-AzureApplicationGateway -Name WinAppGW -VnetName AppGatewayVnet -Subnets AppGateway-1

    #新建应用程序网关,命名为WinAppGW ,放置在虚拟网络AppGatewayVnet 子网AppGateway-1
    #此时不会开始计收网关的费用。计费将在后面已成功启动网关时开始
    技术分享

    Get-AzureApplicationGateway

    #获取网关的详细信息
    技术分享

    Start-AzureApplicationGateway -Name WinAppGW

    #尝试启动网关,提示“由于没有进行任何配置,无法启动”
    技术分享
    既然这样,我们先配置“Http负载平衡”的功能。
    Part.1HTTP load balancingHttp负载平衡)

    1.  对比Azure负载平衡器 VS Azure应用程序网关
    Azure Load Balancer,工作在传输层工作,TCP/UDP,提供4负载均衡
    Azure Application Gateway 提供Http流量的路由规则,进一步对7http流量进行负载均衡
    技术分享
    2.Application Gateway 通过配置,可以将Http流量路由至虚拟机、云服务、web app外部IP
    3.实验过程:
     
    使用两台虚拟机作为后端web服务器集群:winappgatevm-1(10.0.0.4)winappgatevm-2(10.0.1.4)
     
    技术分享
    管理配置应用程序网关需要使用xml文件,使用如下xml文件,配置80端口的负载平衡:

    <?xml version=”1.0″ encoding=”utf-8″?>

    <ApplicationGatewayConfiguration xmlns:i=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://schemas.microsoft.com/windowsazure”>

    <!–FrontendPorts用来定义应用程序网关上的公网端口,我们要测试http负载均衡,所以定义FrontendPort180端口–>

    <FrontendPorts>

            <FrontendPort>

                <Name>FrontendPort1</Name>

                <Port>80</Port>

            </FrontendPort>

        </FrontendPorts>

    <!–BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.410.0.1.4两个AzureVM–>

        <BackendAddressPools>

            <BackendAddressPool>

                <Name>BackendPool1</Name>

                <IPAddresses>

                    <IPAddress>10.0.0.4</IPAddress>

                    <IPAddress>10.0.1.4</IPAddress>

                </IPAddresses>

            </BackendAddressPool>

        </BackendAddressPools>

    <!–BackendHttpSettingsList用来定义端口、协议、cookie-based affinity,此处我们定义了BackendSetting1,它包含了web服务器80端口、使用http协议、禁用cookie-based affinity(如果启用Cookie Based Session Affinity,我的PC将会连续访问同一台后端的web服务器,将无法看出负载平衡的效果,所以暂时禁用)–>

        <BackendHttpSettingsList>

            <BackendHttpSettings>

                <Name>BackendSetting1</Name>

                <Port>80</Port>

                <Protocol>Http</Protocol>

                <CookieBasedAffinity>Disabled</CookieBasedAffinity>

            </BackendHttpSettings>

        </BackendHttpSettingsList>

        <!–HttpListeners用来定义监听器,它起到监听应用程序网关公网端口的作用,用来响应公网用户的请求,此处我们定义了HTTPListener1,监听FrontendPort180),使用Http协议–>

        <HttpListeners>

            <HttpListener>

                <Name>HTTPListener1</Name>

                <FrontendPort>FrontendPort1</FrontendPort>

                <Protocol>Http</Protocol>

            </HttpListener>

        </HttpListeners>

            <!–HttpLoadBalancingRules用来定义负载均衡规则,此处我们定义一个规则名为HttpLBRule1,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort180),使用Http协议),绑定BackendPool1(包含10.0.0.410.0.1.4两个AzureVM),所以HttpLoadBalancingRules可以说是所有信息的汇总->

        <HttpLoadBalancingRules>

            <HttpLoadBalancingRule>

                <Name>HttpLBRule1</Name>

                <Type>basic</Type>

                <BackendHttpSettings>BackendSetting1</BackendHttpSettings>

                <Listener>HTTPListener1</Listener>

                <BackendAddressPool>BackendPool1</BackendAddressPool>

            </HttpLoadBalancingRule>

        </HttpLoadBalancingRules>

    </ApplicationGatewayConfiguration>

    #通过Azure Powershell,使用如下命令上传xml文件到应用程序网关完成配置

    Set-AzureApplicationGatewayConfig -Name WinAppGW -ConfigFile D:\web-80app.xml

    #对应参数是应用程序网关的名字、xml文件的路径
    技术分享
    #网关设置好了之后,通过以下命令启动网关
    Start-AzureApplicationGateway -Name WinAppGW
    技术分享
     
    #获取网关详细信息,网关的公网IP已经生成:139.217.27.22
    Get-AzureApplicationGateway -Name WinAppGW
    技术分享
     
    我之前在winappgatevm-110.0.0.4)和winappgatevm-210.0.1.4)上分别配置了两个简单的网站,随着刷新页面,我们发现轮询的负载均衡已经生效。
     
    技术分享
    技术分享
    Part.2Cookie Based Session Affinity 基于cookie会话连接
    1.应用场景:某些应用需要相同用户需要连接到不变的后台虚拟机,例如购物车应用、网页邮件服务器,基于cookie会话连接功能,可以使同一个的客户端session请求route 到相同的后端服务器,实现此类需求。
    2.实验过程:
    为了测试基于cookie会话连接,我们使用如下xml文件:
    xml文件参考如下

    <?xml version=”1.0″ encoding=”utf-8″?>

    <ApplicationGatewayConfiguration xmlns:i=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://schemas.microsoft.com/windowsazure”>

    <!–FrontendPorts用来定义应用程序网关上的公网端口,我们要测试http负载均衡+Cookie Based Session Affinity ,所以定义FrontendPort180端口–>

    <FrontendPorts>

            <FrontendPort>

                <Name>FrontendPort1</Name>

                <Port>80</Port>

            </FrontendPort>

        </FrontendPorts>

    <!–BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.410.0.1.4两个AzureVM–>

        <BackendAddressPools>

            <BackendAddressPool>

                <Name>BackendPool1</Name>

                <IPAddresses>

                    <IPAddress>10.0.0.4</IPAddress>

                    <IPAddress>10.0.1.4</IPAddress>

                </IPAddresses>

            </BackendAddressPool>

        </BackendAddressPools>

    <!–BackendHttpSettingsList用来定义端口、协议、cookie-based affinity,此处我们定义了BackendSetting1,它包含了web服务器80端口、使用http协议、禁用cookie-based affinity(如果启用Cookie Based Session Affinity,我的PC将会连续访问同一台后端的web服务器,将无法看出负载平衡的效果,所以暂时禁用)–>

        <BackendHttpSettingsList>

            <BackendHttpSettings>

                <Name>BackendSetting1</Name>

                <Port>80</Port>

                <Protocol>Http</Protocol>

                <CookieBasedAffinity>Enabled</CookieBasedAffinity>

            </BackendHttpSettings>

        </BackendHttpSettingsList>

        <!–HttpListeners用来定义监听器,它起到监听应用程序网关公网端口的作用,用来响应公网用户的请求,此处我们定义了HTTPListener1,监听FrontendPort180),使用Http协议–>

        <HttpListeners>

            <HttpListener>

                <Name>HTTPListener1</Name>

                <FrontendPort>FrontendPort1</FrontendPort>

                <Protocol>Http</Protocol>

            </HttpListener>

        </HttpListeners>

            <!–HttpLoadBalancingRules用来定义负载均衡规则,此处我们定义一个规则名为HttpLBRule1,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort180),使用Http协议),绑定BackendPool1(包含10.0.0.410.0.1.4两个AzureVM),所以HttpLoadBalancingRules可以说是所有信息的汇总->

        <HttpLoadBalancingRules>

            <HttpLoadBalancingRule>

                <Name>HttpLBRule1</Name>

                <Type>basic</Type>

                <BackendHttpSettings>BackendSetting1</BackendHttpSettings>

                <Listener>HTTPListener1</Listener>

                <BackendAddressPool>BackendPool1</BackendAddressPool>

            </HttpLoadBalancingRule>

        </HttpLoadBalancingRules>

    </ApplicationGatewayConfiguration>

    按照Part.1Azure Powershell命令上传配置,我们发现我的PC可以访问139.217.27.22
    抓取访问139.217.27.22的数据包,返现服务器在三次握手后首次返回的http报文中带有Set-cookie的内容如下ARRAffinity=b2b030bd049b3ae07c0c65419246492734f60ad3ec994bb9cb6414062dc14199\r\n
    技术分享
    紧接着我再次访问139.217.27.22时,我的http请求中带着之前服务器给我返回的cookie,致使我不断的刷新也只会访问首次访问的服务器。Cookie依旧是 ARRAffinity=b2b030bd049b3ae07c0c65419246492734f60ad3ec994bb9cb6414062dc14199\r\n
    技术分享
    Part.3SSL OffloadSSL卸载)
    Application Gateway起到了SSL加解密的作用,客户端跟App Gateway之间SSL Session 交互,不需要跟后台的所有的web 服务器分别建立SSL session,所有的SSL行为和SSL证书统一在App Gateway 设备上统一管理维护,相当于为后端VM卸载掉SSL加密的任务量,释放了后端VM的消耗在SSL加密上的资源。
    首先你需要有一张CA颁发的服务器端的*.pfx证书,关于制作证书,不在此赘述。

    #上传证书到应用程序网关

    Add-AzureApplicationGatewaySslCertificate  -Name WinAppGW -CertificateName GWCert -Password qwer1234! -CertificateFile D:\httpscert.pfx

    #需要分别指定网关名称、证书名称、密码、证书路径
    技术分享
    接下来我们需要配置xml文件,参考如下:

    <?xml version=”1.0″ encoding=”utf-8″?>

    <ApplicationGatewayConfiguration xmlns:i=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://schemas.microsoft.com/windowsazure”>

       <FrontendIPConfigurations />

    <!–FrontendPorts用来定义应用程序网关上的公网端口,我们要测试SSL Offload,所以定义FrontendPort1443端口–>

        <FrontendPorts>

            <FrontendPort>

                <Name>FrontendPort1</Name>

                <Port>443</Port>

            </FrontendPort>

        </FrontendPorts>

    <!–BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.410.0.1.4两个AzureVM–>

        <BackendAddressPools>

            <BackendAddressPool>

                <Name>BackendPool1</Name>

                <IPAddresses>

                    <IPAddress>10.0.0.4</IPAddress>

                    <IPAddress>10.0.1.4</IPAddress>

                </IPAddresses>

            </BackendAddressPool>

        </BackendAddressPools>

    <!–BackendHttpSettingsList用来定义端口、协议、cookie-based affinity,此处我们定义了BackendSetting1,它包含了web服务器80端口、使用http协议、禁用cookie-based affinity–>

        <BackendHttpSettingsList>

            <BackendHttpSettings>

                <Name>BackendSetting1</Name>

                <Port>80</Port>

                <Protocol>Http</Protocol>

                <CookieBasedAffinity>Disabled</CookieBasedAffinity>

            </BackendHttpSettings>

        </BackendHttpSettingsList>

    <!–HttpListeners用来定义监听器,它起到监听应用程序网关公网端口的作用,用来响应公网用户的请求,此处我们定义了HTTPListener1,监听FrontendPort1443),使用Https协议、证书名字是GWCert–>

        <HttpListeners>

            <HttpListener>

                <Name>HTTPListener1</Name>

                <FrontendPort>FrontendPort1</FrontendPort>

                <Protocol>Https</Protocol>

                <SslCert>GWCert</SslCert>

            </HttpListener>

        </HttpListeners>

    <!–HttpLoadBalancingRules用来定义负载均衡规则,此处我们定义一个规则名为HttpLBRule1,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort1443),使用Https协议、证书名字是GWCert),绑定BackendPool1(包含10.0.0.410.0.1.4两个AzureVM),所以HttpLoadBalancingRules可以说是所有信息的汇总,让我们完成SSL Offload+负载均衡–>

        <HttpLoadBalancingRules>

            <HttpLoadBalancingRule>

                <Name>HttpLBRule1</Name>

                <Type>basic</Type>

                <BackendHttpSettings>BackendSetting1</BackendHttpSettings>

                <Listener>HTTPListener1</Listener>

                <BackendAddressPool>BackendPool1</BackendAddressPool>

            </HttpLoadBalancingRule>

        </HttpLoadBalancingRules>

    </ApplicationGatewayConfiguration>

    #通过修改好的xml配置应用程序网关,使我们的证书生效

    Set-AzureApplicationGatewayConfig -Name WinAppGW -ConfigFile D:\ssloffloadhttplb.xml

    技术分享
    访问 https://139.217.27.22/ ,已经可以访问,并且可以负载均衡。证书为自己手工制作的自签名证书,此处不受信可以也不影响https的测试访问。
    技术分享
    技术分享
    Part.4】细节强化
    1. 网关大小:Small, Medium and Large
    其中Small仅仅用于测试。
    2.限制
    Global:一个订阅50个应用程序网关,每个应用程序网关最多10个实例(此处实例是指后端的虚拟机个数)。
    China:一个订阅10个应用程序网关

    修改网关大小和后端实例实数参考:

    Update-AzureApplicationGateway -Name “WinAppGW” -InstanceCount 5 -GatewaySize “Large” -Description “Updated application gateway”

    技术分享
    3.监测
    应用程序网关每隔30秒发出probe报文来监视监控后端服务器的健康情况,返回code200-399确认http服务正常。如果发现某个后台服务器不能及时响应导致probe失败之后,此台后台的VM会从健康实例池中移除,直到其能及时响应probe探测为止。
    4.同时使 http 80负载平衡、https 443负载平衡生效的xml参考配置:

    <?xml version=”1.0″ encoding=”utf-8″?>

    <ApplicationGatewayConfiguration xmlns:i=”http://www.w3.org/2001/XMLSchema-instance” xmlns=”http://schemas.microsoft.com/windowsazure”>

    <!–FrontendPorts用来定义应用程序网关上的公网端口,我们定义了http80端口、https443端口–>

        <FrontendPorts>

            <FrontendPort>

                <Name>FrontendPort1</Name>

                <Port>80</Port>

            </FrontendPort>

            <FrontendPort>

                <Name>FrontendPort2</Name>

                <Port>443</Port>

            </FrontendPort>

        </FrontendPorts>

    <!–BackendAddressPools用来定义后端web服务器集群的地址群,我们定义了BackendPool1,它包含10.0.0.410.0.1.4两个AzureVM–>

        <BackendAddressPools>

            <BackendAddressPool>

                <Name>BackendPool1</Name>

                <IPAddresses>

                    <IPAddress>10.0.0.4</IPAddress>

                    <IPAddress>10.0.1.4</IPAddress>

                </IPAddresses>

            </BackendAddressPool>

        </BackendAddressPools>

    <!–BackendHttpSettingsList用来定义端口、协议、cookie-based affinity,此处我们定义了BackendSetting1,它包含了web服务器80端口、使用http协议、禁用cookie-based affinity–>

        <BackendHttpSettingsList>

            <BackendHttpSettings>

                <Name>BackendSetting1</Name>

                <Port>80</Port>

                <Protocol>Http</Protocol>

                <CookieBasedAffinity>Disabled</CookieBasedAffinity>

            </BackendHttpSettings>

        </BackendHttpSettingsList>

    <!–HttpListeners用来定义监听器,它起到监听应用程序网关公网端口的作用,用来响应公网用户的请求,此处我们定义了HTTPListener1,监听FrontendPort180),使用Http协议;HTTPListener1、监听FrontendPort2443),使用Https协议,证书名字是GWCert–>

        <HttpListeners>

            <HttpListener>

                <Name>HTTPListener1</Name>

                <FrontendPort>FrontendPort1</FrontendPort>

                <Protocol>Http</Protocol>

            </HttpListener>

            <HttpListener>

                <Name>HTTPListener2</Name>

                <FrontendPort>FrontendPort2</FrontendPort>

                <Protocol>Https</Protocol>

                <SslCert>GWCert</SslCert>

            </HttpListener>

        </HttpListeners>

    <!–HttpLoadBalancingRules用来定义负载均衡规则,此处我们定义一个规则名为HttpLBRule1,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener1(监听FrontendPort180),使用Http协议),绑定BackendPool1(包含10.0.0.410.0.1.4两个AzureVM;定义一个规则名为HttpLBRule2,它使用basic规则(轮询的负载分配机制),绑定BackendSetting1web服务器80端口、使用http协议、禁用cookie-based affinity),绑定HTTPListener2(监听FrontendPort1443),使用Https协议、证书名字是GWCert),绑定BackendPool1(包含10.0.0.410.0.1.4两个AzureVM. 所以HttpLoadBalancingRules可以说是所有信息的汇总,这两个规则可以完成 http 80网站负载均衡+SSL Offload负载均衡–>

        <HttpLoadBalancingRules>

           <HttpLoadBalancingRule>

                <Name>HttpLBRule1</Name>

                <Type>basic</Type>

                <BackendHttpSettings>BackendSetting1</BackendHttpSettings>

                <Listener>HTTPListener1</Listener>

                <BackendAddressPool>BackendPool1</BackendAddressPool>

            </HttpLoadBalancingRule>

            <HttpLoadBalancingRule>

                <Name>HttpLBRule2</Name>

                <Type>basic</Type>

                <BackendHttpSettings>BackendSetting1</BackendHttpSettings>

                <Listener>HTTPListener2</Listener>

                <BackendAddressPool>BackendPool1</BackendAddressPool>

            </HttpLoadBalancingRule>

        </HttpLoadBalancingRules>

    </ApplicationGatewayConfiguration>

  • 转:用Raspberry Pi搭建Azure(EventHub)

    Raspberry Pi是一款基于Linux的单板机电脑。它由英国的树莓派基金会所开发,目的是以低价硬件及自由软件刺激在学校的基本计算机科学教育。树莓派配备一枚博通(Broadcom)出产的ARM架构700MHz BCM2835处理器,256MB內存(B型已升级到512MB内存),使用SD卡当作存储媒体,且拥有一个Ethernet、两个USB接口、以及HDMI(支持声音输出)和RCA端子输出支持。树莓派只有一张信用卡大小,体积大概是一个火柴盒大小,可以运行像《雷神之锤III竞技场》的游戏和进行1080p视频的播放。操作系统采用开源的Linux系统如Debian、ArchLinux,自带的Iceweasel、KOffice等软件,能够满足基本的网络浏览、文字处理以及电脑学习的需要。
    当然Raspberry Pi也可以成为最佳的IOT的终端设备,通过传感器收集数据,以供后台系统进行分析等。
    在Bash Shell中编写Python2.7的程序,获得温度传感器数据:
    #!/usr/bin/python
    from sense_hat import SenseHat
    sense = SenseHat()
    sense.clear()
    temp = sense.get_temperature()
    print(temp)
    运行此程序,可以在屏幕上打印目前的温度。
    同样,可以通过get_humidity()和get_pressure()等方法获得其他传感器的数值。
    具体的Sense-hat的各种python方法,请参考:
    https://pythonhosted.org/sense-hat/api/
     
    二.在Azure上创建Event Hub、Stream Analytics和SQL Azure DB
    1.创建Event hub:

    选择Custom create:

    填写相应的信息后输入:

    这样就创建了Event Hub的一个PaaS的服务。在配置中,创建一个Shared Access Policies:

    Save以后可以获得其SharedAccessKey:

    2.创建SQL Azure Database
    在Azure管理界面中选择SQL DB。在Server中选择Add:

    输入用户名和密码。创建SQL Server。

    然后选择创建SQL Database:

    创建好后,把本机的地址加入SQL的白名单:

    使用SQL的客户端连接数据库:

    在Options中选择数据库:

    登陆后创建table:
    Create table [dbo].[hwtest1] (
    Time Datetime2 (6) Null,
    DeviceId Varchar (16) Null,
    Temperature Float (53) Null,
    Humidity Float (53) Null
    );
    GO
    Create clustered index [hwtest1] on [dbo].[hwtest1] ([DeviceId] ASC);
    3.创建Stream Analytics

    创建成功后,在Input中添加Input:

    选择Event Hub:

    然后添加Event Hub的设置:

    在事件格式中选择JSON和UTF8

    创建Output:

    选择SQL Database,添加SQL的配置:

    在Query的设置中加入下面的配置:

    这里的DeviceId,Temperature,Humidity等参数必须在Python程序、Stream Analytics和SQL中相同。否则数据将不能取到。
    Input、Output和Query设置好后就可以启动此Job了。
    三.将Raspberry Pi的数据上传到Azure的Event Hub
    在Raspberry Pi上安装Azure的SDK:
    pip install azure
    安装完成后,更改Azure Service Bus的endpoint。请参考:
    https://msdn.microsoft.com/en-us/library/azure/dn578439.aspx
    对于Python的endpoint更改:
    在/usr/local/lib/python2.7/dist-packages/azure/servicebus/constants.py
    修改31行的配置
    #SERVICE_BUS_HOST_BASE = ‘.servicebus.windows.net’
    SERVICE_BUS_HOST_BASE = ‘.servicebus.chinacloudapi.cn’
     
    创建Python程序:
    #!/usr/bin/python
    from azure.servicebus import ServiceBusService
    from sense_hat import SenseHat
    from time import sleep
    import json;
    sense = SenseHat()
    sbs = ServiceBusService(“hwtest”, shared_access_key_name=”hwtest”, shared_access_key_value=”xxxxxx=”)
    while True:
    temp1 = sense.get_temperature()
    humi = sense.get_humidity()
    press = sense.get_pressure()
    temp= {‘DeviceId’: ‘dev-01’, ‘Temperature’: temp1, ‘Humidity’: humi}
    sbs.send_event(‘hwtest’, json.dumps(temp))
    sleep(60)
    调试程序让其后台运行。
    四.查看数据
    Raspberry Pi运行后,数据将发送到Azure的Event Hub。
    在Pi上可以通过tcpdump查看是否有https的包发送:
    tcpdump port 443
     
    在Stream Analytics上可以查看事件的情况:

    如果既有input又有output,说明配置正常。
    在Sql客户端上查询:
    Select * from hwtest1;

    五.通过Excel和PowerBI对数据进行分析
    目前Raspberry Pi的数据已经上传到了Event Hub,经过Stream Analytics发送到了SQL Server的表中。用户的展现可以通过Exel,PowerBI实现。
    1.Exel的展现:
    在Excel中选择数据,选择”自其他来源”,选择”来自SQL Server”。

    设置SQL Server:

    选择相应的数据库和相应的表:

    导入数据后,可以选择”插入”,选择”数据透视图”:

    在进行相应的选择后,将显示数据透视图:

    2.通过PowerBI实现展现
    打开网站: http://powerbi.microsoft.com
    下载Desktop的软件,进行安装。
    在客户端软件上进行SQL的连接配置:


    此时可以看到SQL中的表:

    选择import:

    选择相应的配置,就可以把数据以折线的形式展现出来:

    至此,所有的工作结束。

  • 转:Web网站压力测试工具

    Web网站性能体现在并发用户数已经网站的吞吐量和时延。
    最简单的压力测试工具就是ab “Apache Benchmark”
    下面将介绍ab的安装和使用:
    1. ab的安装
    ab的安装非常简单,安装了httpd,就自带ab
    CentOS下的安装:
    yum install -y httpd
    Ubuntu下的安装:
    apt-get install apache2
    安装好后,就可以使用ab了。
    2. ab使用前的准备工作
    由于ab是压力测试工具,我们需要把允许打开文件的数量调大。可以修改/etc/security/limits.conf

    echo "* soft nofile 65535" >> /etc/security/limits.conf;echo "* hard nofile 65535" >> /etc/security/limits.conf

    更改了这个配置后,需要重新启动VM。
    或者采用临时命令:

    ulimit -n 65535

    这样更改不需要重启机器。
    3. 运行ab,或wrk
    网上有很多ab和wrk使用的介绍,这里就不细讲了。一般打流量的命令是:

    ab -c 5000 -r -n 40000000 http://xx.xx.xx.xx/

    其中-c表示并发连接数;-n表示总共的请求数量;-r表示出现错误不退出,这个参数可以保证测试的连续性。注意http链接最后一定要是”/”,否则报错。

    wrk -t1 -c6000 -d2000s http://x.x.x.x/

     
    4. 脚本
    为了保证测试的连续性,下面的小脚本可以检测ab测试程序是否在运行。如果有,表示正在测试,等待10s,继续检测;如果没有,表示ab已经测试结束,需要重新启动。具体脚本如下:

    复制代码
    #!/bin/bash
    while true
    do
      flag=`ps -ef | grep "ab -c" | grep -v grep| wc -l`
      [ "$flag" = 1 ] && continue || ab -c 5000 -r -n 40000000 http://x.x.x.x/
      sleep 10
    done
    复制代码

    wrk的脚本如下

    复制代码
    #!/bin/bash
    while true
    do
    flag=`ps -ef | grep "wrk -t" | grep -v grep| wc -l`
    [ "$flag" = 1 ] && continue || /root/wrk-master/wrk -t1 -c6000 -d2000s http://x.x.x.x/
    sleep 10
    done
    复制代码

     
    把此脚本后台运行。
    5. 时延测试
    在服务器压力上去后,服务器的带宽和时延的检测成为检测服务器能力的指标之一。
    带宽的检测,可以采用nload、Zabbix等工具。
    时延的检测,也可以采用Zabbix等带外方式。本文采用的是比较简单的time工具。
    由于time和一般的Shell命令不同,grep、awk等语句不能正常的抓取执行结果。我们一般采用把执行结果输出到文件,再检索文件的方式。并且time的重定向是stderr的定向。具体命令是:

    (time -p curl http://x.x.x.x > /dev/null) &>> out.txt

    然后再采用grep real out.txt来获取时延。
    6. 时延脚本
    可以通过下面的脚本收集时延:

    复制代码
    #!/bin/bash
    while true
      do
      (time -p curl http://x.x.x.x > /dev/null) &> out.txt
      grep real out.txt | awk '{print $0 "\t" strftime()}' >> delay.txt
      sleep 10
    done
    复制代码

    7. 服务器端查看同时在线人数的命令
    netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,”t”,state[key]}’
    结果如下:
    TIME_WAIT t 32502
    FIN_WAIT1 t 4171
    FIN_WAIT2 t 267
    ESTABLISHED t 993
    SYN_RECV t 610
    CLOSING t 274
    LAST_ACK t 1
    或者用下面的命令:
    netstat -s | grep “connections established”
    4288 connections established
    8. 通过curl统计时延插入数据库

    复制代码
    #!/bin/bash
    while true
    do
      (time -p curl http://x.x.x.x > /dev/null) &> out.txt
      grep real out.txt | awk '{print $0 "\t" strftime()}' >> delay.txt
      time=$(TZ=Asia/Shanghai date "+%Y-%m-%d %H:%M:%S")
      webDelay=`grep real out.txt | awk '{print $2}'`
      hostn=`hostname`
      mysql -hxxxx -uxxxx -pxxxx -e "use delay; insert into delay2 (delay, time, host) values($webDelay,'$time','$hostn');"
    sleep 20
    done
    复制代码

    8.1 通过python脚本把时延插入数据库

    复制代码
    #!/usr/bin/env python
    import StringIO
    import pycurl
    import sys
    import os
    import time
    import MySQLdb
    import socket
    def getHTTPTime(url):
        crl = pycurl.Curl()
        #crl.setopt(pycurl.VERBOSE,1)
        crl.setopt(pycurl.FOLLOWLOCATION, 1)
        crl.setopt(pycurl.MAXREDIRS, 5)
        crl.fp = StringIO.StringIO()
        crl.setopt(pycurl.URL, url)
        crl.setopt(crl.WRITEFUNCTION, crl.fp.write)
        p = crl.perform()
        time = crl.getinfo(pycurl.TOTAL_TIME)
        return time
    url = "http://xx.xx.xx.xx/"
    myhost = socket.gethostname()
    host="xxx.mysqldb.chinacloudapi.cn"
    user="xxx"
    passwd="xxxxxx"
    db="delay"
    port=3306
    try:
      conn=MySQLdb.connect(host=host,user=user,passwd=passwd,port=port)
      conn.select_db(db)
      conn.select_db(db)
      cur=conn.cursor()
      while True:
        curtime=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
        mytime = float(getHTTPTime(url))
        T = []
        T.append(mytime)
        T.append(curtime)
        T.append(myhost)
        cur.execute('insert into delay10  (delay, time, host) values(%s,%s,%s)',T);
        conn.commit()
        #aa=cur.execute('select id,delay,time from delay10')
        #print aa
        #for data in cur.fetchall():
        #  print data
        time.sleep(60)
    except MySQLdb.Error,e:
      print "Mysql Error %d: %s" % (e.args[0], e.args[1])
    复制代码

     
    9. 通过paping检测时延,并插入数据库

    复制代码
    #!/bin/bash
    while true
    do
      getDelay=`/root/paping -p 80 -c 1 x.x.x.x | grep time= | awk '{print $4}' | awk 'BEGIN{FS="="} {print $2}'`
      time=$(TZ=Asia/Shanghai date "+%Y-%m-%d %H:%M:%S")
      #webDelay=`echo ${a%ms*}`
      [ $getDelay ] && webDelay=$getDelay || webDelay=1000
      hostn=`hostname`
      mysql -hhwdelay.mysqldb.chinacloudapi.cn -uhwdelay%hengwei -pabc@123456 -e "use delay; insert into delay4 (delay, time, host) values('$webDelay','$time','$hostn');"
    sleep 20
    done
    复制代码

    10. php页面反应实际时延情况:

    复制代码
    <?php
        echo "xxx时延测试</br>";
        echo "大于1秒钟时延的统计";
        $mysql_server_name="xxxxxx"; //数据库服务器名称
        $mysql_username="xxxxx"; // 连接数据库用户名
        $mysql_password="xxxxx"; // 连接数据库密码
        $mysql_database="delay"; // 数据库的名字
        // 连接到数据库
        $conn=mysql_connect($mysql_server_name, $mysql_username,
                            $mysql_password);
         // 从表中提取信息的sql语句
        $strsql="select * from delay2 where delay > 1 order by id desc";
        // 执行sql查询
        $result=mysql_db_query($mysql_database, $strsql, $conn);
        // 获取查询结果
        $row=mysql_fetch_row($result);
        echo '<font face="verdana">';
        echo '<table border="1" cellpadding="1" cellspacing="2">';
        // 显示字段名称
        echo "</b><tr></b>";
        for ($i=0; $i<mysql_num_fields($result); $i++)
        {
          echo '<td bgcolor="#FF0000"><b>'.
          mysql_field_name($result, $i);
          echo "</b></td></b>";
        }
        echo "</tr></b>";
        // 定位到第一条记录
        mysql_data_seek($result, 0);
        // 循环取出记录
        while ($row=mysql_fetch_row($result))
        {
          echo "<tr></b>";
          for ($i=0; $i<mysql_num_fields($result); $i++ )
          {
            echo '<td bgcolor="#00FF00">';
            echo $row[$i];
            echo '</td>';
          }
          echo "</tr></b>";
        }
        echo "</table></b>";
        echo "</font>";
        // 释放资源
        mysql_free_result($result);
        // 关闭连接
        mysql_close($conn);
    ?>
    复制代码

    11. 多监测点合并网页:

    复制代码
    <!DOCTYPE html>
    <html>
      <head>
        <title>HWTEST.html</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"/>
        <meta http-equiv="description" content="this is my page"/>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <link rel="stylesheet" type="text/css" href="./test.css">
      </head>
      <body>
      <!-- Logo div -->
      <div class="logo">
       <h1>xxx时延测试比较页面</h1>
      </div>
      <!-- Adv div -->
      <div class="ad">
        <div class="stuad">
        <h4>Azure上海VM检测Azure北京VM时延</br></h4>
        <h4>大于1秒钟时延的统计</h4>
        <?php
          $mysql_server_name="xxx.chinacloudapi.cn"; //数据库服务器名称
          $mysql_username="xxx"; // 连接数据库用户名
          $mysql_password="xxx"; // 连接数据库密码
          $mysql_database="delay"; // 数据库的名字
          // 连接到数据库
          $conn=mysql_connect($mysql_server_name, $mysql_username,
                              $mysql_password);
           // 从表中提取信息的sql语句
          $strsql="select id,delay,time from delay2 where delay > 1 order by id desc";
          //$strsql="select * from delay2 where delay > 1 order by id desc";
          // 执行sql查询
          $result=mysql_db_query($mysql_database, $strsql, $conn);
          // 获取查询结果
          $row=mysql_fetch_row($result);
          echo '<font face="verdana">';
    //    echo '<table border="1" cellpadding="1" cellspacing="2">';
          echo '<table border="1" cellpadding="1" cellspacing="2" align="center">';
          // 显示字段名称
          echo "</b><tr></b>";
          for ($i=0; $i<mysql_num_fields($result); $i++)
          {
            echo '<td bgcolor="#FF0000"><b>'.
            mysql_field_name($result, $i);
            echo "</b></td></b>";
          }
          echo "</tr></b>";
          // 定位到第一条记录
          mysql_data_seek($result, 0);
          // 循环取出记录
          while ($row=mysql_fetch_row($result))
          {
            echo "<tr></b>";
            for ($i=0; $i<mysql_num_fields($result); $i++ )
            {
              echo '<td bgcolor="#00FF00">';
              echo $row[$i];
              echo '</td>';
            }
            echo "</tr></b>";
          }
          echo "</table></b>";
          echo "</font>";
          // 释放资源
          mysql_free_result($result);
          // 关闭连接
          mysql_close($conn);
      ?>
        </div>
        <div class="ad2">
        <h4>家中采用curl检测页面时延</br></h4>
        <h4>大于1秒钟时延的统计</h4>
        <?php
          $mysql_server_name="xxx.chinacloudapi.cn"; //数据库服务器名称
          $mysql_username="xxx"; // 连接数据库用户名
          $mysql_password="xxx"; // 连接数据库密码
          $mysql_database="delay"; // 数据库的名字
          // 连接到数据库
          $conn=mysql_connect($mysql_server_name, $mysql_username,
                              $mysql_password);
           // 从表中提取信息的sql语句
          $strsql="select id,delay,time from delay3 where delay > 1 order by id desc";
          // 执行sql查询
          $result=mysql_db_query($mysql_database, $strsql, $conn);
          // 获取查询结果
          $row=mysql_fetch_row($result);
          echo '<font face="verdana">';
    //    echo '<table border="1" cellpadding="1" cellspacing="2">';
          echo '<table border="1" cellpadding="1" cellspacing="2" align="center" >';
          // 显示字段名称
          echo "</b><tr></b>";
          for ($i=0; $i<mysql_num_fields($result); $i++)
          {
            echo '<td bgcolor="#FF0000"><b>'.
            mysql_field_name($result, $i);
            echo "</b></td></b>";
          }
          echo "</tr></b>";
          // 定位到第一条记录
          mysql_data_seek($result, 0);
          // 循环取出记录
          while ($row=mysql_fetch_row($result))
          {
            echo "<tr></b>";
            for ($i=0; $i<mysql_num_fields($result); $i++ )
            {
              echo '<td bgcolor="#00FF00">';
              echo $row[$i];
              echo '</td>';
            }
            echo "</tr></b>";
          }
          echo "</table></b>";
          echo "</font>";
          // 释放资源
          mysql_free_result($result);
          // 关闭连接
          mysql_close($conn);
      ?>
        </div>
        <div class="house">
        <h4>家中采用paping测试</br></h4>
        <h4>大于100ms时延的统计</h4>
        <?php
          $mysql_server_name="xxx.chinacloudapi.cn"; //数据库服务器名称
          $mysql_username="xxx"; // 连接数据库用户名
          $mysql_password="xxx"; // 连接数据库密码
          $mysql_database="delay"; // 数据库的名字
          // 连接到数据库
          $conn=mysql_connect($mysql_server_name, $mysql_username,
                              $mysql_password);
           // 从表中提取信息的sql语句
          $strsql="select id,delay,time from delay4 where delay > 100 order by id desc";
          // 执行sql查询
          $result=mysql_db_query($mysql_database, $strsql, $conn);
          // 获取查询结果
          $row=mysql_fetch_row($result);
          echo '<font face="verdana">';
    //    echo '<table border="1" cellpadding="1" cellspacing="2">';
          echo '<table border="1" cellpadding="1" cellspacing="2" align="center" >';
          // 显示字段名称
          echo "</b><tr></b>";
          for ($i=0; $i<mysql_num_fields($result); $i++)
          {
            echo '<td bgcolor="#FF0000"><b>'.
            mysql_field_name($result, $i);
            echo "</b></td></b>";
          }
          echo "</tr></b>";
          // 定位到第一条记录
          mysql_data_seek($result, 0);
          // 循环取出记录
          while ($row=mysql_fetch_row($result))
          {
            echo "<tr></b>";
            for ($i=0; $i<mysql_num_fields($result); $i++ )
            {
              echo '<td bgcolor="#00FF00">';
              echo $row[$i];
              echo '</td>';
            }
            echo "</tr></b>";
          }
          echo "</table></b>";
          echo "</font>";
          // 释放资源
          mysql_free_result($result);
          // 关闭连接
          mysql_close($conn);
      ?>
        </div>
      </div>
      </body>
    </html>
    复制代码

    CSS文件:

    复制代码
    body{
    width:950px;
    margin: 0 auto;
    background-color: white;
    border: 1px solid red;
    font-size: 16px;
    }
    .logo{
    width: 950px;
    height: 68px;
    background-color: yellow;
    float: left;
    margin-top: 5px;
    text-align: center;
    }
    .ad{
    width: 950px;
    /*height: 212px;*/
    /*background-color: pink;*/
    margin-top: 5px;
    float: left;
    }
    .stuad{
    width: 310px;
    /*height: 196px;*/
    float: left;
    background-color: #ADFEDC;
    margin: 4px 0 0 4px;
    text-align: center;
    }
    .ad2{
    width: 310px;
    /*height: 196px;*/
    float: left;
    background-color: #D2A2CC;
    margin: 4px 0 0 4px;
    text-align: center;
    }
    .house{
    width: 310px;
    /*height: 196px;*/
    float: left;
    background-color: #FC7E8C;
    margin: 4px 0 0 4px;
    text-align: center;
    }
    复制代码

    12. 检测程序是否运行的脚本

    复制代码
    #!/bin/bash
    while true
    do
    cflag=`ps -ef | grep delay.sh | grep -v grep | wc -l`
    pflag=`ps -ef | grep mypachk.sh | grep -v grep | wc -l`
    echo $cflag  $pflag
    #[ "$flag" = 1 ] && continue || /root/delay.sh &
    [ "$cflag" = 0 ] && /root/delay.sh  || echo "curl is ok" >> record.txt
    [ "$pflag" = 0 ] && /root/mypachk.sh  || echo "paping is ok" >> record.txt
    sleep 600
    done
    复制代码