DCache搭建测试

栏目: 数据库 · 发布时间: 5年前

内容简介:Dcache使用腾讯Tars框架开发,属于分布式的NoSQL存储系统。数据存储在内存中,还可以连接后端DB做数据的持久化。Linuxtars 内部程序通过'root@{主机名}'登录数据库,需要授权。主机名可以通过/etc/hosts查看。

Dcache使用腾讯Tars框架开发,属于分布式的NoSQL存储系统。数据存储在内存中,还可以连接后端DB做数据的持久化。

支持平台

Linux

特点

  • 高性能存储引擎

    • 支持多种数据结构,如:
      • key-value
      • k-k-row
      • list
      • set
      • zset
    • 支持数据持久化到后端DB
  • 集群模式

    • 高可用
    • 高扩展
    • 异地镜像
    • 就近接入
  • 通过名字访问

    • 支持同步、异步、单向RPC调用
  • 高效运维平台(提供WebUI)

    • 服务部署
    • 扩缩容
    • 迁移
    • 服务配置
    • 质量监控

组成

  • tars框架
  • 业务服务
    • KVCache模块
      • 存储key-value
    • MKVcache模块
      • k-k-row
      • list
      • set
      • zset
  • 公共基础服务
    • OptServer
    • ConfigServer
    • PropertyServer
    • DCache管理平台

安装部署

tars框架

依赖环境

  1. 操作系统

    • linux内核:2.6.18 or later
  2. C++语言框架依赖

    • gcc:4.8.2 or later
    • glibc-devel
    • bison:2.5 or later
    • flex:2.5 or later
    • cmake:2.8.8 or later
    • rapidjson:1.0.2
  3. tars框架运行依赖

    • mysql:5.6.5 or later
  4. web管理系统依赖

    • nvm:0.33.11 or later
    • node:8.11.3 or later

依赖安装

$ yum -y install gcc gcc-c++ cmake yasm glibc-devel flex bison ncurses-devel zlib-devel autoconf python-requests
复制代码

mysql部署

  1. 下载 mysql 源码包(5.6.44版本), 官方要求数据库版本不低于5.6.5。
$ wget "https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.44.tar.gz"
复制代码
  1. 安装 - 编译安装
# 创建普通用户
$ useradd -m -d /home/mysql mysql

# 解压源码包
$ tar zxf mysql-5.6.44.tar.gz

# 创建mysql安装目录, 并做软连接
$ mkdir /usr/local/mysql-5.6.44
$ ln -s /usr/local/mysql-5.6.44 /usr/local/mysql

# 修改属主属组
$ chown mysql:mysql /usr/local/mysql-5.6.44 /usr/local/mysql

# 切换到源码目录,编译安装
$ cd mysql-5.6.44
$ cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.44 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
$ make && make install
复制代码
  1. mysql服务配置
# 删除原始数据目录, 在数据盘创建数据目录,进行软连
$ rm -rf /usr/local/mysql/data
$ mkdir -p /data/mysql-data
$ ln -s /data/mysql-data /usr/local/mysql/data

# 修改属主属组
$ chown -R mysql:mysql /data/mysql-data /usr/local/mysql/data

# 配置启动脚本
$ cd /usr/loca/mysql/
$ cp support-files/mysql.server /etc/init.d/mysql

# 初始化数据库
$ rm -rf /etc/my.cnf
$ yum -y install perl
$ yum install -y perl-Module-Install.noarch
$ perl scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --pid-file=/var/run/mysql/mysql.pid --socket=/tmp/mysql.sock 

# 修改配置文件
$ vim /usr/local/mysql/my.cnf
'''
[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
log_bin

# These are commonly set, remove the # and set as required.
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
# port = .....
# server_id = .....
socket = /tmp/mysql.sock

bind-address={$your machine ip}

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
'''

# 启动服务,设置开机自启
$ service mysql start
$ chkconfig mysql on
复制代码
  1. 设置环境变量
$ echo -e 'PATH=$PATH:/usr/local/mysql/bin\nexport PATH' > /etc/profile.d/mysql_env.sh
$ source /etc/profile
复制代码
  1. 修改root初始密码, 授权登录
$ mysqladmin -u root password 'root@appinside'
$ mysql -uroot -p
mysql> grant all on *.* to "root"@"%" identified by 'root@appinside' with grant option;
mysql> grant all on *.* to "root"@"localhost" identified by 'root@appinside' with grant option;
mysql> grant all on *.* to "root"@"10.80.137.193" identified by 'root@appinside' with grant option;
mysql> grant all on *.* to "root"@"platformxxxx.cdn.idc.com" identified by 'root@appinside' with grant option;
复制代码

tars 内部程序通过'root@{主机名}'登录数据库,需要授权。主机名可以通过/etc/hosts查看。

  1. 添加mysql库路径
$ vim /etc/ld.so.conf

/usr/local/mysql/lib/
ldconfig
复制代码
  1. mysql主从配置

测试环境暂不需要,待正式部署后再做补充。#TODO

tars部署

  1. git clone Tars
# 使用递归方式clone
$ git clone  https://github.com/TarsCloud/Tars.git --recursive

复制代码
  1. 使用一键部署脚本
$ cd Tars/deploy

# 修改数据库信息
$ vim comm.propertys

host = 10.80.137.139
port = 3306
pwd = root@appinside

# 授权tars用户权限
mysql> grant all on *.* to 'tars'@'%' identified by 'tars2015' with grant option;
mysql> grant all on *.* to 'tars'@'localhost' identified by 'tars2015' with grant option;
mysql> grant all on *.* to 'tars'@'platformxxxx.cdn.idc.com' identified by 'tars2015' with grant option;

# 执行脚本
$ python deploy.py all
复制代码
  1. deploy.py脚本在执行过程中,会报错tars用户的'Access denied', 但是在部署脚本中有tars用户的授权操作。目前观察问题现象是授权未执行成功,且没有报错,具体原因未查明,先手动授权预防报错。
  2. 该执行脚本不具有幂等性,不能重复执行。若必须重新执行的情况,需要修改脚本,注释掉已完成的函数部分,还要根据情况对应修改脚本。
  3. 脚本执行完成后,会自启动web服务,若端口冲突,需要修改/usr/local/app/web/config/webConf.js文件,将port端口号修改。详细操作可以见下面的步骤。
  1. web启停、web切换dcache-alpha分支,以及端口冲突问题解决
## 切换DCache的web分支。
## 目前web管理界面,DCache服务暂时只提供体验版,需要在部署过程中手动切换分支(后期可以考虑修改部署脚本,直接指定tag来clone)。
# 备份文件 config/webConf.js, config/tars.conf
$ cp config/webConf.js ~
$ cp config/tars.conf ~
$ cp package-lock.json ~

# 暂存当前master分支, 切换alpha分支。
$ rm -rf package-lock.json
$ git stash
$ git checkout -b dcache-alpha origin/dcache-alpha

# 恢复文件
$ cp ~/webConf.js config/webConf.js
$ cp ~/tars.conf config/tars.conf

# 端口冲突解决
$ vim config/webConf.js

    webConf: {
        port: 33000,              //服务启动端口, 默认3000
        loggerPath: path.join(__dirname, '../log'),    //本地日志的目录
        logFileKeepDays: '1',         //日志保留时间
        defaultLanguage: 'cn',    //cn 或 en ,用户默认的语言环境
    },


# 修改dcache配置
$ vim config/dcacheConf.js

module.exports = {
  enableDcache: true        //启动dcache界面,默认false
}

# 从新安装npm依赖包
$ npm install --registry=https://registry.npm.taobao.org

# web启停
# 启动web(prd为脚本名,详细查看package.json)
$ npm run prd

# 停止所有web
$ pm2 kill

# 使用别名启停单个web
$ pm2 stop tars-node-web
$ pm2 start tars-node-web

# 命令行启动界面
┌───────────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬──────┬────────────┬──────┬──────────┐
│ App name      │ id │ version │ mode │ pid   │ status │ restart │ uptime │ cpu  │ mem        │ user │ watching │
├───────────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼──────┼────────────┼──────┼──────────┤
│ tars-node-web │ 0  │ 0.1.0   │ fork │ 29648 │ online │ 0       │ 27h    │ 0.5% │ 103.1 MB   │ root │ disabled │
└───────────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴──────┴────────────┴──────┴──────────┘

# Web端访问地址
http://10.80.137.193:33000

# tars核心或普通服务端口占用修改
1. 登录web端界面
2. 依次点击 -> 需要修改的服务 -> 服务管理 -> 管理Servants -> 编辑 -> 绑定地址框 -> 修改'-p'后参数 -> 确认
3. 重启 -> 服务管理 -> 重启按钮
复制代码
  1. Tars用户体系模块使用

登录和管理权限模块,测试环境未部署,待补充。#TODO [ 官方文档 ]

[坑] web 管理系统中有一处 BUG,将导致“接口测试”功能总是报错。

$ sed -i "s/setName ? setName : '')/setName ? setName : '', {})/g" web/app/service/infTest/TarsClient.js

  1. tars服务手动启停
# 启动基础服务
$ cd /usr/local/app/tars
$ tarsregistry/util/start.sh
$ tarsAdminRegistry/util/start.sh
$ tarsnode/util/start.sh
$ tarsconfig/util/start.sh
$ tarspatch/util/start.sh

# 停止基础服务
$ cd /usr/local/app/tars
$ tarsregistry/util/stop.sh
$ tarsAdminRegistry/util/stop.sh
$ tarsnode/util/stop.sh
$ tarsconfig/util/stop.sh
$ tarspatch/util/stop.sh
复制代码
  1. tarsnode配置监控(crontab)
* * * * * /usr/local/app/tars/tarsnode/util/monitor.sh
复制代码
  1. 业务服务节点扩容

主要涉及tarsnode服务的手动安装,测试环境暂无需要,后续补充。#TODO

  1. 放张web端效果图

    DCache搭建测试

Tars框架部分,部署完成。

DCache部署

1. 准备工作

# 克隆DCache项目
$ git clone https://github.com/Tencent/DCache.git

# 下载第三方依赖代码
$ cd src/thirdParty
$ chmod +x thirdparty.sh
$ ./thirdparty.sh

# 编译
# [坑]自动部署脚本将tarscpp编译到framework目录下,与DCache项目指定的路径不一致
# 需要在Tars/cpp目录下从新编译。(说明DCache是按照tarscpp子项目路径规则来指定的,没毛病。)
$ cd Tars/cpp/
$ cmake . && make && make install

# 编译DCache服务
$ cd src/
$ make release
$ make all

# 分别进入以下目录,生成发布包
$ cat dir_list.txt

src/OptServer/
src/ConfigServer/
src/PropertyServer/
src/Router/
src/Proxy/
src/KVCacheServer/
src/MKVCacheServer/

$ cat dir_list.txt |while read line; do cd ${line}; make tar; cd -; done

# 将所有tar包都下载到本地
# 几种方式(看个人喜好)
- sz
- wget (python -m SimpleHTTPServer 8080)
- scp
- git
复制代码

2. 公共服务部署

  • 2.1 安装OptServer
## 数据库环境初始化
# 授权账户
mysql> grant all on *.* to 'dcache'@'%' identified by 'dcache2019' with grant option;
mysql> grant all on *.* to 'dcache'@'localhost' identified by 'dcache2019' with grant option;
mysql> grant all on *.* to 'dcache'@'platformxxxx.cdn.idc.com' identified by 'dcache2019' with grant option;
mysql> flush privileges;

# 创建数据库
$ vim src/OptServer/sql/exec-sql.sh

db_install_ip="10.80.137.193"
root="root@appinside"
mysql -h $db_install_ip -uroot -p$root -e "drop database if exists db_dcache_relation; create database db_dcache_relation"

mysql -h $db_install_ip -uroot -p$root --default-character-set=utf8 db_dcache_relation < db_dcache_relation.sql

复制代码

以下为服务部署,图片及说明大部分来源于 官方文档

DCache搭建测试

1 ) 在Tars管理平台主页点击“运维管理”,然后填写必要的信息,如下图:

DCache搭建测试

以上信息除“节点”、“OBJ绑定地址”和“端口号”外,其他必须和上图保持一致;

“节点”填写欲安装OptServer服务的机器IP,“OBJ绑定地址”和“节点”一致,“端口号”可点击右下角“获取端口”按钮自动获取。 一路点击“确定”,等待服务部署完成,最后回到Tars管理平台主页,可看到OptServer已经成功部署,如下图:

DCache搭建测试

2 ) 上传发布包

DCache搭建测试

根据上图数字序号,依次点击,得到如下提示框:

DCache搭建测试

点击“上传发布包”,在新的提示页面上传DCacheOptServer.tgz发布包,得到如下页面:

DCache搭建测试

点击“发布版本”下的输入框,选择目标发布包,然后点击“发布”,如发布成功,会显示如下页面:

DCache搭建测试

3 ) 添加配置文件

DCache搭建测试
<Main>
    # admin registry obj
    AdminRegObj = tars.tarsAdminRegistry.AdminRegObj
    <DB>
        <tars>
            charset = utf8
            dbname  = db_tars
            dbhost  = 10.80.137.193
            dbport  = 3306
            dbuser  = root
            dbpass  = root@appinside
        </tars>
        <relation>
            charset = utf8
            dbname  = db_dcache_relation
            dbhost  = 10.80.137.193
            dbport  = 3306
            dbuser  = dcache	
            dbpass  = dcache2019
        </relation>
    </DB>
    # 创建路由数据库的用户名和密码
    <CreateRouterDb>
        dbuser = router_dcache
        dbpass = router_dcache_2019
    </CreateRouterDb>
    <Release>
        # 发布服务线程数
        ThreadCount = 5
    </Release>
    <Uninstall>
        # 通知node下线服务超时时间(秒)
        Timeout = 20
        # 下线服务备份目录
        BakPath = /data/dcacheuninstall/
        # 下线服务线程数
        ThreadCount = 2
    </Uninstall>
</Main>
复制代码

根据上图,依次点击,得到下图:

DCache搭建测试

其中文件名称填“DCacheOptServer.conf”, 文件内容按照上面格式填写

4 ) 重启OptServer

DCache搭建测试

根据上图,依次点击,重启OptServer,重启成功后,“当前状态”从“Off”变成“Active”,如下图所示:

DCache搭建测试
  • 2.2 ConfigServer部署

安装ConfigServer的步骤和安装OptServer的步骤类似,除了不需要创建数据库外

添加配置时,可以参考 DCache服务配置说明

以下为我的测试配置示例:

### config
#db_dcache_relation的数据库信息
<Main>
    <DB>
        dbhost=10.80.137.193
        dbpass=dcache2019
        dbuser=dcache
        dbname=db_dcache_relation
        charset=utf8
        dbport=3306
    </DB>
</Main>
复制代码
  • 2.3 安装PropertyServer

安装PropertyServer的步骤和安装OptServer的步骤类似,除了不需要创建数据库外。 添加配置时,可以参考 DCache服务配置说明

以下为我的测试配置示例:

<Main>
    <DB>
            Sql=CREATE TABLE `${TABLE}` (`stattime` timestamp NOT NULL default  CURRENT_TIMESTAMP,`f_date` date NOT NULL default '1970-01-01',`f_tflag` varchar(8) NOT NULL default '',`app_name` varchar(20) default NULL,`module_name` varchar(50) default NULL,`group_name` varchar(100) default NULL,`idc_area` varchar(10) default NULL,`server_status` varchar(10) default NULL,`master_name` varchar(128) NOT NULL default '',`master_ip` varchar(16) default NULL,`set_name` varchar(15) NOT NULL default '',`set_area` varchar(15) NOT NULL default '',`set_id` varchar(15) NOT NULL default  '',`value1` varchar(255) default NULL,`value2` varchar(255) default NULL,`value3` varchar(255) default NULL,`value4` varchar(255) default NULL,`value5` varchar(255) default NULL,`value6` varchar(255) default NULL,`value7` varchar(255) default NULL,`value8` varchar(255) default NULL,`value9` varchar(255) default NULL,`value10` varchar(255) default NULL,`value11` varchar(255) default NULL,`value12` varchar(255) default NULL,`value13` varchar(255) default NULL,`value14` varchar(255) default NULL,`value15` varchar(255) default NULL,`value16` varchar(255) default NULL,`value17` varchar(255) default NULL,`value18` varchar(255) default NULL,`value19` varchar(255) default NULL,`value20` varchar(255) default NULL,`value21` varchar(255) default NULL,`value22` varchar(255) default NULL,`value23` varchar(255) default NULL,`value24` varchar(255) default NULL,`value25` varchar(255) default NULL,`value26` varchar(255) default NULL,`value27` varchar(255) default NULL,`value28` varchar(255) default NULL,`value29` varchar(255) default NULL,`value30` varchar(255) default NULL,`value31` varchar(255) default NULL,`value32` varchar(255) default NULL,`value33` varchar(255) default NULL,`value34` varchar(255) default NULL,`value35` varchar(255) default NULL,KEY(`f_date`,`f_tflag`,`master_name`,`master_ip`),KEY `IDX_MASTER_NAME` (`master_name`),KEY `IDX_MASTER_IP` (`master_ip`),KEY `IDX_TIME` (`stattime`),KEY `IDX_F_DATE` (`f_date`))ENGINE\=MyISAM
            TbNamePre=t_property_realtime
            AppName=dcache_idc5min_147
        <property>
            dbhost=10.80.137.193
            dbname=taf_property_147
            dbuser=dcache
            dbpass=dcache2019
            dbport=3306
            charset=gbk
        </property>
        <relation>
            charset=gbk
            dbname=db_dcache_relation
            dbhost=10.80.137.193
            dbpass=dcache2019
            dbport=3306
            dbuser=dcache
        </relation>
    </DB>
    <HashMap>
        InsertInterval=1
    </HashMap>
    <NameMap>
        BakCenterError = property1
        BinLogErr = property2
        BinLogSyn = property3
        CacheError = property4
        Chunks/OnceElement = property5
        BackUpObjAdapter.connectRate = property6
        BackUpObjAdapter.queue = property7
        BinLogObjAdapter.connectRate = property8
        BinLogObjAdapter.queue = property9
        CacheObjAdapter.connectRate = property10
        CacheObjAdapter.queue = property11
        RouterClientObjAdapter.connectRate = property12
        RouterClientObjAdapter.queue = property13
        WCacheObjAdapter.connectRate = property14
        WCacheObjAdapter.queue = property15
        asyncqueue = property16
        memsize = property17
        DataMemUsedRatio = property18
        DbError = property19
        DbException = property20
        DirtyNum = property21
        DirtyRatio = property22
        ElementCount = property23
        Exception = property24
        HitCount = property25
        MemSize = property26
        getBatchCount = property27
        setBatchCount = property28
        MKMemUsedRatio = property29
        eraseCount = property30
        eraseCountUnexpire = property31
        asyncqueue0 = property32
        Jmem0DataUsedRatio = property33
        Jmem1DataUsedRatio = property34
        ColdDataRatio = property35
        expireCount = property36
        OnlyKeyCount = property37
        BigChunk = property38
    </NameMap>
</Main>
复制代码

3. DCache管理平台安装

# 修改web配置文件(前面已经做过了)
$ cat /usr/local/app/web/config/dcacheConf.js

# 安装 tars-dcache 模块
$ cd /usr/local/app/web/
$ npm install tars-dcache --save

# 新建 db_cache_web 数据库, 并执行 Tars web service 项目 sql 文件夹下的db_cache_web.sql脚本,创建DCache web所需要的表。
mysql> CREATE DATABASE db_cache_web;
mysql> use db_cache_web;
mysql> source sql/db_cache_web.sql;

# 启动或者重启管理平台即可在管理平台看到 Dcache 管理平台的入口。
$ pm2 kill 
$ npm run prd 
复制代码

4. 创建DCache应用

DCache创建应用操作

  • 上传发布包
  • 上线模块
  • 模块配置

名词解释:

  • 模块:可以理解为mysql中table表的概念,需要创建对应模块来存储数据。两种Cache模块对应功能,上面已有说明不再赘述。
  • 应用:既多个模块的集合,该应用下的所有模块共享Proxy和Router服务,可以理解为mysql中db的概念。
  • 4.1 发布包上传

上传Proxy,Router,Cache对应的发布包是部署对应服务的前提。

1 ) Proxy发布包上传

DCache搭建测试

依次点击,然后在弹出的提示框页面选择Proxy服务的发布包,上传。点击“默认”,将该发布包设置为Proxy服务的默认发布包,如下图:

DCache搭建测试

2 ) Router发布包上传

Router发布包的上传和Proxy发布包的上传步骤相同。

3 ) Cache发布包上传

Cache发布包的上传和Proxy发布包上传步骤类似,只不过Cache有两种不同类型(KVCache和MKVCache)的发布包(本地也需分目录保存包文件),在“上传提示框”页面要注意类型匹配,如下图:

DCache搭建测试

上传完两种不同类型的发布包并分别设置为默认,得到下图:

DCache搭建测试
  • 4.2 部署和发布Proxy和Router服务
    DCache搭建测试

根据上图,依次点击“DCache”和“运维管理”,其中“应用”和“管理员”必填,可自定义,然后点击“创建应用”,得到下图:

DCache搭建测试

在输入框填写相关信息,其余保持不变,点击“创建router、proxy服务”,得到下图:

DCache搭建测试

确认填写无误后,点击“安装发布”,等待安装完成,结果如下图所示(先看个问题,稍后放图):

[坑] 在创建router、proxy服务环节,数据库的用户名和密码我采用之前创建的user: dcache, pwd: dcache2019 这一套。然后当点击安装发布时,出现以下报错:

DCache搭建测试

从报错上来看,是服务访问数据库时被denied。这让我很疑惑,dcache账户明明已经做过授权。再仔细一看发现这里报错的账户是'router_dcache',并不是我输入的用户名。难道程序做了其他操作给用户名加上了router前缀?

带着疑惑,再在数据库创建router_dcache用户并授权,密码使用与dcache相同的密码再次执行,结果仍然报错。

通过排查mysql的general log,服务确实是通过router_dcache这个用户访问的,那问题可能就出在,这个用户使用的密码也与前面输入的不一致。

又尝试了几次其他用户的密码,结果与前面相同,最后无奈只能先设置数据库跳过grant验证,这才执行成功。

这块问题后面没有查明,有清楚的朋友可以帮忙指出(抱拳)。

安装完成图如下:

DCache搭建测试
  • 4.3 上线一个KVCache模块
    DCache搭建测试

按照上图箭头依次点击,“应用”选择在部署和发布Proxy和Router服务创建的应用名称,“cache类型”选择KVCache,所填信息确认无误后,点击“下一步”进入“模块配置”步骤,如下图:

DCache搭建测试

填写必要信息之后,点击“下一步”,进入“服务配置”步骤,如下图:

DCache搭建测试

注意: 共享内存key必须是唯一的,不能在服务部署机器上已存在,否则会造成服务拉起失败,可使用ipcs命令确认。(该共享内存key为十进制数,可以自定义,不能重复)。备机部署后续补充。#TODO

必要信息填写完毕,点击“下一步”进入“安装发布”步骤,如下图:

DCache搭建测试

再次确认信息填写无误,点击“安装发布”,等待服务发布完成。刷新管理平台主页,左侧目录树出现此模块信息,如下图:

DCache搭建测试
  • 4.4 上线一个MKVCache模块

步骤和部署和发布KVCache类似,参考即可

  • 4.5 Cache配置管理
    DCache搭建测试

按照上图箭头依次点击,可添加配置项。

  • 4.6 模块和单节点的配置管理
DCache搭建测试

按照上图箭头依次点击,可在该页面上修改和添加配置。该页面的配置管理分两种类型:针对模块所有节点的配置管理和针对模块特定节点的配置管理。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web导航设计

Web导航设计

James Kalbach / 李曦琳 / 电子工业出版社 / 2009 年3月 / 69.80元

业务目标的实现,依赖于用户能够找到并使用您提供的服务。本书为您讲述创建有效导航系统的基本设计原则、开发技巧和实用建议,并附有大量的真实案例。本书研究深入,援引广泛,是极佳的参考资料和教学指南,适用于初级和中级网页设计师、产品经理和其他非设计职位,以及寻求全新视角的Web开发老手。一起来看看 《Web导航设计》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具