DCache测试搭建
简介
背景
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
- KVCache模块
- 公共基础服务
- OptServer
- ConfigServer
- PropertyServer
- DCache管理平台
安装部署
tars框架
依赖环境
- 操作系统
- linux内核:2.6.18 or later
- 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
- tars框架运行依赖
- mysql:5.6.5 or later
- 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部署
- 下载mysql源码包(5.6.44版本), 官方要求数据库版本不低于5.6.5。
$ wget "https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.44.tar.gz"
- 安装 – 编译安装
# 创建普通用户 $ 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
- 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
- 设置环境变量
$ echo -e 'PATH=$PATH:/usr/local/mysql/bin\nexport PATH' > /etc/profile.d/mysql_env.sh $ source /etc/profile
- 修改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查看。
- 添加mysql库路径
$ vim /etc/ld.so.conf /usr/local/mysql/lib/ ldconfig
- mysql主从配置
测试环境暂不需要,待正式部署后再做补充。#TODO
tars部署
- git clone Tars
# 使用递归方式clone $ git clone https://github.com/TarsCloud/Tars.git --recursive
- 使用一键部署脚本
$ 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
- deploy.py脚本在执行过程中,会报错tars用户的’Access denied’, 但是在部署脚本中有tars用户的授权操作。目前观察问题现象是授权未执行成功,且没有报错,具体原因未查明,先手动授权预防报错。
- 该执行脚本不具有幂等性,不能重复执行。若必须重新执行的情况,需要修改脚本,注释掉已完成的函数部分,还要根据情况对应修改脚本。
- 脚本执行完成后,会自启动web服务,若端口冲突,需要修改/usr/local/app/web/config/webConf.js文件,将port端口号修改。详细操作可以见下面的步骤。
- 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. 重启 -> 服务管理 -> 重启按钮
- Tars用户体系模块使用
登录和管理权限模块,测试环境未部署,待补充。#TODO [官方文档]
- 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
- tarsnode配置监控(crontab)
* * * * * /usr/local/app/tars/tarsnode/util/monitor.sh
- 业务服务节点扩容
主要涉及tarsnode服务的手动安装,测试环境暂无需要,后续补充。#TODO
- 放张web端效果图

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
以下为服务部署,图片及说明大部分来源于官方文档。

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


2 ) 上传发布包

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

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

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

3 ) 添加配置文件

# admin registry obj AdminRegObj = tars.tarsAdminRegistry.AdminRegObj
charset = utf8 dbname = db_tars dbhost = 10.80.137.193 dbport = 3306 dbuser = root dbpass = root@appinside
charset = utf8 dbname = db_dcache_relation dbhost = 10.80.137.193 dbport = 3306 dbuser = dcache dbpass = dcache2019
# 创建路由数据库的用户名和密码
dbuser = router_dcache dbpass = router_dcache_2019
# 发布服务线程数 ThreadCount = 5
# 通知node下线服务超时时间(秒) Timeout = 20 # 下线服务备份目录 BakPath = /data/dcacheuninstall/ # 下线服务线程数 ThreadCount = 2
根据上图,依次点击,得到下图:

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

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

- 2.2 ConfigServer部署
安装ConfigServer的步骤和安装OptServer的步骤类似,除了不需要创建数据库外
添加配置时,可以参考DCache服务配置说明。
以下为我的测试配置示例:
config #db_dcache_relation的数据库信息
dbhost=10.80.137.193 dbpass=dcache2019 dbuser=dcache dbname=db_dcache_relation charset=utf8 dbport=3306
- 2.3 安装PropertyServer
以下为我的测试配置示例:
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
dbhost=10.80.137.193 dbname=taf_property_147 dbuser=dcache dbpass=dcache2019 dbport=3306 charset=gbk
charset=gbk dbname=db_dcache_relation dbhost=10.80.137.193 dbpass=dcache2019 dbport=3306 dbuser=dcache
InsertInterval=1
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
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发布包上传

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

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

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

- 4.2 部署和发布Proxy和Router服务

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

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

确认填写无误后,点击“安装发布”,等待安装完成,结果如下图所示(先看个问题,稍后放图):
[坑] 在创建router、proxy服务环节,数据库的用户名和密码我采用之前创建的user: dcache, pwd: dcache2019 这一套。然后当点击安装发布时,出现以下报错:

从报错上来看,是服务访问数据库时被denied。这让我很疑惑,dcache账户明明已经做过授权。再仔细一看发现这里报错的账户是’router_dcache’,并不是我输入的用户名。难道程序做了其他操作给用户名加上了router前缀?
带着疑惑,再在数据库创建router_dcache用户并授权,密码使用与dcache相同的密码再次执行,结果仍然报错。
通过排查mysql的general log,服务确实是通过router_dcache这个用户访问的,那问题可能就出在,这个用户使用的密码也与前面输入的不一致。
安装完成图如下:

- 4.3 上线一个KVCache模块

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

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


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

- 4.4 上线一个MKVCache模块
步骤和部署和发布KVCache类似,参考即可
- 4.5 Cache配置管理

按照上图箭头依次点击,可添加配置项。
- 4.6 模块和单节点的配置管理

按照上图箭头依次点击,可在该页面上修改和添加配置。该页面的配置管理分两种类型:针对模块所有节点的配置管理和针对模块特定节点的配置管理。
项目待完善的问题
初步接触之后,比较关心下面两个问题的后续发展。
- DbAccess对接后端DB文档,目前官方未能提供。
- 项目语言支持暂时只要C++。(可能在2019第四季度会支持一些其他语言版本)
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176474.html原文链接:https://javaforall.net
