本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou

JmilkFan:minxihou的技术博文方向是 算法&Openstack自动化 ,写得很好,值得推荐。 : )

目录

1.配置

通过devstack配置不同功能的openstack是通过修改local.conf配置文件来实现的。local.conf文件是一个可修改的INI格式文件,它通过在配置文件中对元数据包头的信息修改来间接修改对应配置文件的配置信息。

简单的样板提供在 devstack/samples

新的local.conf文件中元数据头文件非常类似于一个普通的INI格式包头只不过local.conf文件中包头格式用了双括号,在包头内需要添加两个内部字段,内部字段由管道符分隔开来。这里需要注意的是双括号中间没有空格,双括号和内部字段之间没有空格,同样的,在管道符和内部字段之间也没有空格。

'[[' <phase> '|' <config-file-name> ']]'

在phase字段中填入的是由stack.sh已经定义好的一系列值,在 中填入的是配置文件名。这个文件名和stack.sh中相匹配,这样在stack.sh环境中的所有变量都是可用的。强烈建议使用项目配置文件中的变量(可以参考NOVA_CONF的例子)。如果这个配置文件的路径没有存在你写的这条配置项将会被跳过,不应用到配置文件中。

定义的phases如下:

local - 在stackrc被加载前,从local.conf中提取localrc

post-config - 在二层服务配置之后,服务启动之前post-config将会执行

extra - 在各project中主服务启动之后然后在extra.d中的任何文件被执行之前

post-extra - 在extra.d文件被执行之后运行

local.conf文件是严格按照这个顺序来处理的,元数据可能将会被多次定义,如果任何值被重复设定了那么在文件中最后出现的将会被使用。

[[post-config|$NOVA_CONF]]
[DEFAULT]
use_syslog = True [osapi_v3]
enabled = False

一个比较特别的元数据是 local|localrc 它被用来提供默认localrc文件(实际上是.localrc.auto文件)。这允许devstack中的所有的自定义设置包含在一个文件中。如果localrc文件存在它将被用来保持向后面新版的local.conf文件兼容。

[[local|localrc]]
FIXED_RANGE=10.254.1.0/24
ADMIN_PASSWORD=speciale
LOGFILE=$DEST/logs/stack.sh.log

注意Q_PLUGIN_CONF_FILE独特之处在于它的配置项如果在前面不加/,那么这个配置项不会生效。所以为了生效添加一个/是有必要的。

[[post-config|/$Q_PLUGIN_CONF_FILE]]

同样需要注意的是localrc文件是作为shell脚本的一部分被加载的所以localrc必须要满足shell脚本的语法规范,特别需要注意的是等号的两边没有空格。

1.1openrc文件

openrc配置登录凭据,这项适用于使用openstack命令工具行来对openstack做各种操作时使用。在一开始的时候openrc会加载stackr(会依次的加载local.conf中localrc)为的就是获取到HOST_IP或者SERVICE_HOST来用作endpoint。下面例子给出的是值为默认值

OS_PROJECT_NAME(OS_TENANT_NAME)

keystone项目中规范了keystone项目的术语。但是在有些地方tenant仍然作为术语在被使用。project_name最好优先使用project_id。 OS_TENANT_NAME元数据出于兼容性依然可以在一些旧的工具中使用。

OS_PROJECT_NAME=demo

OS_USERNAME

除了拥有实体(项目),openstack需要调用user来执行实体对应的project。

OS_USERNAME=demo

OS_PASSWORD

keystone默认在做认证的时候认证需要提供密码。将密码放入环境变量中来使用这种行为需要谨慎,对大多数devstack用户而言出于测试目的在配置文件中写入密码也是无可厚非的。

OS_PASSWORD=secret

HOST_IP,SERVICE_HOST

设置API endpoint需要使用HOST_IP。SERVICE_HOST同样可以用来确定一个endpoint。这样方便一些local.conf的配置,通常,HOST_IP设置在loalrc中。

HOST_IP=127.0.0.1
SERVICE_HOST=$HOST_IP

OS_AUTH_URL

openstack的认证使用keystone服务返回一个令牌和服务目录。目录包含了所有用户/租户能访问的服务的端点包括Nova,Glance,Keystone和Swift.

OS_AUTH_URL=http://$SERVICE_HOST:5000/v2.0

KEYSTONECLIENT_DEBUG,NOVACLIENT_DEBUG

在命令行设置日志级别为DEBUG..默认情况下被注释掉了。

# export KEYSTONECLIENT_DEBUG=1
# export NOVACLIENT_DEBUG=1

2.最小化配置一个local.conf

当local.conf没有localrc单元节时运行stack.sh只需要设置少数的参数就足够了。这里给出了一个最小化配置的例子。例子中的参数是我们通常接触到的同时也是我们通常需要去设置的。

1.不记录日志

2.预先设置密码以防止交互提示来设置密码

3.从本地网络中移除网络环(FIXED_RANGE 和 FLOATING_RANGE 在下面被注释掉了)

4.如果觉得自动检测不可靠我们可以设置host_ip(HOST_IP在下面的示例中被注释掉了)

[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
#FIXED_RANGE=172.31.1.0/24
#FLOATING_RANGE=192.168.20.0/25
#HOST_IP=10.3.4.5

如果你这些密码都没有设置那么在执行stack.sh的时候需要我们交互式的输入这些密码。

网络环必须不能与宿主机上的已有的任何网段重叠。参考RFC-1918,重叠现象是非常少见的,私有环通常用于所有的本地网络,Nova的fixed和实例的前端网络。

在一开始运行stack.sh的时候HOST_IP会被自动检测到(意味着会自动检测本机的IP地址,并且将其作为HOST_IP的值),但是后来执行脚本HOST_IP就会经常检测不到,在运行完一次stack.sh之后宿主机IP从它本身的以太网接口移到了桥接网卡上。在这里设置也可用于openrc设置OS_AUTH_URL。 HOST_IP不是默认设置。

HOST_IPV6在第一次运行stack.sh的时候会被脚本自动的检测到。如果以太网接口上没有IPV6的地址那么脚本也不会配置IPV6地址。在HOST_IPV6中设置IPV6同样这个地址能够用于在openrc中设置OS_AUTH_URL。HOST_IPV6参数不是默认设置的。

3.历史注释

历史上devstack通过localrc文件来获取所有的本地配置和自定义项。在2013年10月,local.conf配置形式用来简化了这个过程(参考 46768)。

4.配置节点

4.1配置服务的repo源

Git网站上的repo源用于提供每个openstack服务的源。在devstack中每个openstack服务配置对应各自的源由一堆变量来完成。 *_REPO参数指向每个服务对应在Git上的repo仓库,*_BRANCH参数用来Git上选择哪个openstack的分支。这些参数值都可以在local.conf中修改用来测试不同的源,例如推荐的Gerrit分支。 GIT_BASE指向了GIT主源。

NOVA_REPO=$GIT_BASE/openstack/nova.git
NOVA_BRANCH=master

从Gerrit中直接拉取一个分支然后获取这个分支的repo源,从Gerrit回顾页中能够查到分支。

git fetch https://review.openstack.org/p/openstack/nova refs/changes/50/5050/1 && git checkout FETCH_HEAD

4.2安装路径

devstack安装路径是通过DEST参数来决定的。这个参数的默认值是/opt/stack。在localrc区你可以尽早的设置这个参数,这样为你以后参数配置可以做参考。它可能是有用的设置虽然显示定义并没有改变默认值。

DEST=/opt/stack

4.3日志

4.3.1启用记录日志

默认情况下stack.sh输出只显示它现在执行脚本跑到哪里了。通过设置LOGFILE参数可以直接将日志发送到除开显示输出控制端的日志文件当中。每次执行stack.sh脚本都会附加一个时间戳到这个日志文件名里面。

LOGFILE=$DEST/logs/stack.sh.log

老的日志文件将会被清除,如果LOGDAYS参数设置了时间,系统将会保留对应时间的老日志文件。假如设置为1,那么为你保留一天之内的日志文件。

LOGDAYS=1

有一些项目的日志文件(Nova,Cinder,etc),默认情况下会被彩色标置(如果SYSLOG没有设置);彩色化显示能够通过LOG_COLOR参数来设置。

LOG_COLOR=False

4.3.2记录服务输出日志

devstack在某个服务开启的时候将会记录日志并从标准输出设备来输出。当使用screen作为标准输出,会从屏幕窗口得到输出并得到一个输出文件。如果没有屏幕输出那么服务流程输出信息将会被重定向到LOGDIR指定的文件夹中。

LOGDIR=$DEST/logs

注意使用的DEST参数是定位到了安装路径上,这也是为什么我们要显示的在local.conf中定义DEST参数。

4.3.3启用系统日志

为了方便,我们将所有openstack服务的日志记录在一个单个的系统日志中。允许这样的操作我们需要将参数SYSLOG置成True。如果记录日志的主机不是本地主机,那我们需要使用SYSLOG_HOST和SYSLOG_PORT两个参数来指定哪个远程主机来记录日志。

SYSLOG=True
SYSLOG_HOST=$HOST_IP
SYSLOG_PORT=516

4.4后端数据库

后端可以支持很多数据库的种类。能够支持的数据库类型都在lib/databases目录中定义了。 mysql是默认的数据库,你也可以选择一个其他的数据库类型然后放入到localrc单元区中。

disable_service mysql
enable_service postgresql

4.5RPC Backend

支持包括RabbitMQ RPC消息协议的后端。后端可以通过拓展插件来实现不同的消息机制支持。通过ENABLED_SERVICES参数我们可以启用或者禁用掉RabbitMQ服务,当然也可以直接使用service命令行来启用或者停用。

在local.conf中举例如何停用RabbitMQ

disable_service rabbit

4.6Apache前端

Apache网络服务可以通过wsgi服务来开启,这样能够通过HTTPD+mod_wsgi模式来支持部署。默认设置推荐服务通过Apache下HTTPD+mod_wsgi模式部署。使用另一个部署策略(例如eventlet)支持替代HTTPD + mod_wsgi,需要在local.conf中设置ENABLE_HTTPD_MOD_WSGI_SERVICES为false。每一个服务都能运行在HTTPD+mod_wsgi,同样也能通过修改local.conf文件使用其他模式。

keystone节点运行在Apache下默认使用mod_wsgi

keystone示例

KEYSTONE_USE_MOD_WSGI="True"

nova示例

NOVA_USE_MOD_WSGI="True"

swift示例

SWIFT_USE_MOD_WSGI="True"

heat示例

HEAT_USE_MOD_WSGI="True"

cinder示例

CINDER_USE_MOD_WSGI="True"

4.7从git中获取元件库

devstack安装openstack组建的时候会默认从git中下载相应的Python包,然而实际上是从pypi上发布的版本中安装客户端的库在git。如果你从事服务器部署工作,但是你想知道一个未释放的openstack版本客户端如何影响系统的,你可以使用git来下载pypi中未发布的版本,或者通过LIB_FROM_GIT来指定从本地git树结构中特定的库。多元件库用逗号隔开。

LIBS_FROM_GIT=python-keystoneclient,oslo.config

设置ALL变量将会从库中下载所有的包。

4.8虚拟环境

使Python支持虚拟环境我们可以通过将USE_VENV置成True。这样会允许每个项目来创建venvs,在每个项目中由PROJECT_VENV来定义。每个项目的PROJECT_VENV都会包涵使用venv的目录文件名。条目值索引就是项目的名字。如果希望的话多个项目可以使用同样一个venv。

PROJECT_VENV["glance"]=${GLANCE_DIR}.venv

ADDITIONAL_VENV_PACKAGES参数可以安装一些附加的包到venv中,每个包之间用逗号隔开。通用的项目一般不会创建包列表在requirement.txt文件中,因为这个属于附加的需求了。例如,只需要对一些配置项做修改。默认情况下,当一个数据库被enabled的时候会自动加载绑定数据库所要的Python库。

ADDITIONAL_VENV_PACKAGES="python-foo, python-bar"

4.9干净安装

默认情况下当你定义在#DEST路径下没有文件时,devstack只会克隆相对应的project源码到安装路径下。如果条目值RECLONE设置成yes的时候,stack.sh脚本文件会在你每次运行这个脚本的时候刷新每个repo源。为了避免手动删除repo源为了获取到当前正确的分支从$GIT_BASE中。

RECLONE=yes

4.10通过pip来升级安装包

默认情况下,stack.sh脚本针对如果需求的Python版本没有安装或者当前系统的Python版本无法满足stack.sh指定的要求,则stack.sh会更新Python包。如果PIP_UPGRADE设置为True,并且在执行stack.sh脚本的时候有对Python包相应指定的需求,那么现有Python包将会被升级到最新的版本。

PIP_UPGRADE=True

4.11客户镜像

devstack中镜像通过IMAGE_URLS参数设置的URL来下载下来同时会上传到glance组件中。

默认的客户镜像已经在各个版本的hyperviosr中预定义好了,在stack.sh脚本中这些客户镜像会用来测试不同的性能。 通过设置DOWNLOAD_DEFAULT_IMAGES=False会阻止Devstack下载这些默认的镜像。在这种情况下你可以通过设置IMAGE_URLS参数来指定镜像地址,来下载你需要的镜像满足测试需求。

DOWNLOAD_DEFAULT_IMAGES=False
IMAGE_URLS="http://foo.bar.com/image.qcow,"
IMAGE_URLS+="http://foo.bar.com/image2.qcow"

4.12实例类型

DEFAULT_INSTANCE_TYPE条目值能够配置默认实例的类型。当这个参数没有指定特定值的时候,Devstack会创建附加micro和nano类型的卷用于针对samll实例的tempest测试。

当客户对实例有更大的内存需求时,在配置文件中我们则需要对DEFAULT_INSTANCE_TYPE指定特定的类型,这样Tempest测试则会选用你指定的类型来做测试。

KVM的需要使用QEMU2.4的话需要512内存来加载QEMU-2.4-PowerPC固件,这样的话用户在PPC64/PPC64LE上跑实例的时候可以通过这个选项来默认创建一个flavors.

DEFAULT_INSTANCE_TYPE=m1.tiny

4.13 IP类型

在Devstack中IP_VERSION能够设置多种类型的网络ipv4,ipv6或者对项目服务提供双类型传输的数据网络,你可以分别设置使用IPV4,IPV6和IPV4+6。这个功能需要neturn网络服务开启如下的功能。

disable_service n-net
enable_service q-svc q-agt q-dhcp q-l3

以下的变量可以用来改变默认的IPV6行为:

IPV6_RA_MODE=slaac
IPV6_ADDRESS_MODE=slaac
FIXED_RANGE_V6=fd$IPV6_GLOBAL_ID::/64
IPV6_PRIVATE_NETWORK_GATEWAY=fd$IPV6_GLOBAL_ID::1

注意:FIXED_RANGE_V6 和IPV6_PRIVATE_NETWORK_GATEWAY可以用来配置任何有效的IPV6前缀。由IPV6_GLOBAL_ID自动生成的默认值遵循RFC4193.

4.14每个服务对应设置IP类型

devstack可以允许服务器使用IPV4或者IPV6通过设定SERVICE_IP_VERSION条目值,SERVICE_IP_VERSION=4或者SERVICE_IP_VERSION=6

当设置为4的时候devstack服务将会打开套接字监听0.0.0.0地址,同时服务端点将会使用HOST_IP作为注册地址。

当设置为6的时候devstack服务将会打开套接字监听::地址,同时服务端点将会使用HOST_IPV6作为注册地地址。

默认情况下使用ipv4地址,支持双模式,但是现在不支持4+6这个格式,HOST_IPV6可以被用来改变默认的IPV6的地址。

HOST_IPV6=${some_local_ipv6_address}

4.15多节点设置

这个会单独再开一篇幅来翻译

5.Project

5.1网络节点

这个也会当独再开一篇来翻译(:зゝ∠)

5.2Swift节点

swift默认是关闭的。当swift开启的时候,需要配置的只有一个副本,用来避免samll规格的VM会超量IO内存。当只加载一个副本账户的时候,容器和对象服务将会在屏幕直接运行。其他类似于复制,更新或者审计服务则会在后台运行。

如果你想允许开启swift服务你可以在localrc中写入以下条目值:

enable_service s-proxy s-object s-container s-account

如果你想最小化安装swift仅包括swift和keystone,那么可以选用以下设置来替换之前的设置:

disable_all_services
enable_service key mysql s-proxy s-object s-container s-account

你也可以手动的来覆盖环使用特定的存储节点。例如当你想测试一个多节点的环境

如果你仅仅只想测试swift集群,你可以通过在localrc中配置SWIFT_REPLICAS自定义变量来实现。这种情况下你必须在localrc的SWIFT_STORAGE_IPS中写入存储节点的IP地址,地址之间用空格分离。

SWIFT_STORAGE_IPS="192.168.1.10 192.168.1.11 192.168.1.12"

5.3 Swift S3

在devstack中如果你在ENABLE_SERVICE条目值中允许了swift3服务,那么devstack则会去下载安装swift3中间件。swift将会为keystone来配置一个S3端点这样用来取代nova-objectstore。只有swift代理服务会在前端运行,其余的服务会在后端开启运行并且由swift-init工具来管理。

5.4 心跳服务

heat服务一开始默认是关闭的(详情见stackrc文件)。如果想要明确开启这个服务则需要在localrc中特别加入以下条目值。

enable_service heat h-api h-api-cfn h-api-cw h-eng

heat服务能够作为独立的服务,用来监控外部openstack。如果只想在本机只启动heat独立模式需要在localrc做以下配置:

disable_all_services
enable_service rabbit mysql heat h-api h-api-cfn h-api-cw h-eng
HEAT_STANDALONE=True
KEYSTONE_SERVICE_HOST=...
KEYSTONE_AUTH_HOST=...

5.5 Tempest测试

如果temapest已经成功的配置了,那么按照以下给出的指令我能能够做冒烟测试( “冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程)

$ cd /opt/stack/tempest
$ tox -efull tempest.scenario.test_network_basic_ops

默认情况下tempest是下载了并且生成了配置文件,但是tempest包没有安装在系统全局site-package中(包安装包括解决安装依赖性)。所以tempest测试不会再tox以外进行。如果你想安装tempest则将下列配置项加入localrc中:

INSTALL_TEMPEST=True

5.6XEN服务器

如果你想使用Xen服务器来作为hypervisor,请参照以下文档

./tools/xen/README.md

5.7Cell

Cell是一个替代选项。设置一个cell环境需要在你的localrc中添加以下参数:

enable_service n-cell

请注意在cell中有些功能缺失。在练习当中cell功能不支持使用。

5.8 Cinder

通过设置VOLUME_GROUP,逻辑卷组用来装Cinder-managed卷。逻辑卷名的前缀用VOLUME_NAME_PREFIX来设置,逻辑卷支持文件的大小通过VOLUME_BACKING_FILE_SIZE来设置。

VOLUME_GROUP="stack-volumes"
VOLUME_NAME_PREFIX="volume-"
VOLUME_BACKING_FILE_SIZE=10250M

5.9 Keystone

5.9.1 多区域设置

我们想设置两个devstack(regionOne和regionTwo)共享相同的keystone(相同的用户和服务)还有dashboard服务。keystone和horizon均配置在regionOne,完整的规范请见

https://wiki.openstack.org/wiki/Heat/Blueprints/Multi_Region_Support_for_Heat.

在regionOne上配置:

REGION_NAME=RegionOne

在regionTwo上配置:

disable_service horizon
KEYSTONE_SERVICE_HOST=<KEYSTONE_IP_ADDRESS_FROM_REGION_ONE>
KEYSTONE_AUTH_HOST=<KEYSTONE_IP_ADDRESS_FROM_REGION_ONE>
REGION_NAME=RegionTwo
KEYSTONE_REGION_NAME=RegionOne

5.9.2关闭V2验证模块

在Mitaka版本中验证API已经不建议使用V2版本了,推荐只使用V3版本的API。通过以下设置可以让keystone不在使用V2:

ENABLE_IDENTITY_V2=False

5.10 练习

exerciserc是用来作为练习配置的联系脚本,以下设置的值全为该条目值的默认值。这些值可以在loalrc中被重写。

当一个VM孵化到激活状态的最大等待时间:

ACTIVE_TIMEOUT==30

适当IP的分配与取消分配的最大等待时间

ASSOCIATE_TIMEOUT=15

vm可启动的最大等待时间

BOOT_TIMEOUT=30

当运行一个启动实例的命令直到实例运行的最大等待时间

RUNNING_TIMEOUT=$(($BOOT_TIMEOUT + $ACTIVE_TIMEOUT))

vm关机的最大等待时间

TERMINATE_TIMEOUT=30

翻译出来仅供以后要使用参数时做个备忘,也希望看到博文打大家对翻译有漏洞的地方指正。:)

译文原地址:http://docs.openstack.org/developer/devstack/configuration.html

Devstack 配置文件说明手册的更多相关文章

  1. 再玩 DevStack(Mitaka版)- 基于 trystack.cn 源

    曾经就写过一篇关于DevStack安装OpenStack的文章< 使用 DevStack 高速部署 OpenStack 开发环境 >,时过境迁,如今有更好的方式来实现.想到曾经的复杂性,认 ...

  2. Ubuntu系统上All-in-one部署OpenStack

    虚拟机软件:VMware Workstaion12 操作系统:Ubuntu14.04 1.修改Ubuntu14.04的apt源为国内的阿里源: cp /etc/apt/sources.list /et ...

  3. ubuntu 14.04安装 DevStack的脚本配置文件——localrc

    本文ubuntu 14.04安装 DevStack的脚本配置文件——localrc,本文件名已经逐渐被取代,但是出于后向兼容性,使用该文件仍然可以为stack.sh安装脚本指定安装DevStack时的 ...

  4. 部署 DevStack - 每天5分钟玩转 OpenStack(17)

    本节按照以下步骤部署 DevStack 实验环境,包括控制节点和计算节点 创建虚拟机 按照物理资源需求创建 devstack-controller 和 devstak-compute 虚拟机 安装操作 ...

  5. 学习OpenStack之 (1):安装devstack

    1. 系统准备 ubuntu 12.04 server 虚拟机. 2G内存. 依次运行以下命令来安装git: sudo apt-get update sudo apt-get upgrade sudo ...

  6. openstack(liberty): devstack中的iniset/iniget函数分析

    这个ini开头的函数在devstack的启动配置中用的非常多,他主要负责.ini文件的配置,这个过程包括对相关ini文件的添加,注释,删除,获取信息,多行信息获取等. 这里主要说的iniset和ini ...

  7. devstack安装openstack

    devstack是目前安装OpenStack最为方便的工具,一般用于开发和测试OpenStack.如果想在生产环境安装的话,需要对 devstack做很多定制,或者使用puppet/chef等更成熟的 ...

  8. [Openstack]使用devstack自己主动化安装

    os环境为: ubuntu14.04 安装步骤: 更新系统软件包: sudo apt-get dist-upgrade #出现无法訪问到ubuntu官网的错误. 安装git: sudo apt-get ...

  9. devstack安装openstack newton版本

    准备使用devstack安装openstack N版,搞一套开发环境出来.一连整了4天,遇到各种问题,各种错误,一直到第4天下午4点多才算完成. 在这个过程中感觉到使用devstack搭建openst ...

随机推荐

  1. SAS创建和使用索引(SAS INDEX)

    一.概述 在合并数据集的时候,可以使用DATA步,但使用DATA 步时需要对KEY VALUE 排序,且KEY VALUE 的名字也必须一致:也可以用PROC SQL ,不需要进行上述排序.重命名的步 ...

  2. Oracle 用户概念与基本操作

    目录 目录 Oracle的用户 通过系统用户来登陆SQLPlus system和sys的区别 查看登陆的用户 启用和锁定一个用户 启用用户 锁定用户 创建用户 修改用户 删除用户 角色权限 常用的用户 ...

  3. PHP 3DES 加解密(CBC模式,pkcs5padding填充)

    1.前言:项目中接入第三方支付遇到3DES加密,以前也没用过,搜了好多,都不适用,各种不对,后来自己结合搜到的终于弄正确了,检测地址:http://tool.chacuo.net/crypt3des. ...

  4. border-color:transparent;

    http://www.zhangxinxu.com/study/201111/triangle-css-border.html

  5. 2019牛客多校第六场J-Upgrading Technology(枚举+单调队列)

    Upgrading Technology 题目传送门 解题思路 对于这题,我们可以枚举一个k从0~m,表示当前我们把所有技能最少升到了k级,且至少有一个为k级. 此时我们刚好获得了前k个d[]的收益, ...

  6. Apache的虚拟主机功能(基于IP、域名、端口号)

    Apache虚拟主机就是在一个Apache服务器上配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录. 主要有三种方法: 1.通过不同的IP地址 2.通过不同的域名 ...

  7. jenkins中的pipeline学习

    Jenkins pipeline 升级打怪攻略(二): http://haurqb42j0gnc7zyxam.exp.bcevod.com/mda-jg9eq66184z5manh/mda-jg9eq ...

  8. 三、函数 (SUM、MIN、MAX、COUNT、AVG)

    第八章 使用数据处理函数 8.1 函数 SQL支持利用函数来处理数据.函数一般是在数据上执行的,给数据的转换和处理提供了方便. 每一个DBMS都有特定的函数.只有少数几个函数被所有主要的DBMS等同的 ...

  9. 前端面试题,js预处理部分小结,函数声明提升和变量声明提升

    博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/11/25/%e5%89%8d%e7%ab%af%e9%9d%a2%e8%af%95%e9% ...

  10. C# dynamic类型序列化和反序列化之Newtonsoft.Json

    原文:C# dynamic类型序列化和反序列化之Newtonsoft.Json 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011127019/ ...