内容简介: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
- 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 [ 官方文档 ]
[坑] web 管理系统中有一处 BUG,将导致“接口测试”功能总是报错。
$ sed -i "s/setName ? setName : '')/setName ? setName : '', {})/g" web/app/service/infTest/TarsClient.js
- 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管理平台主页点击“运维管理”,然后填写必要的信息,如下图:
以上信息除“节点”、“OBJ绑定地址”和“端口号”外,其他必须和上图保持一致;
“节点”填写欲安装OptServer服务的机器IP,“OBJ绑定地址”和“节点”一致,“端口号”可点击右下角“获取端口”按钮自动获取。 一路点击“确定”,等待服务部署完成,最后回到Tars管理平台主页,可看到OptServer已经成功部署,如下图:
2 ) 上传发布包
根据上图数字序号,依次点击,得到如下提示框:
点击“上传发布包”,在新的提示页面上传DCacheOptServer.tgz发布包,得到如下页面:
点击“发布版本”下的输入框,选择目标发布包,然后点击“发布”,如发布成功,会显示如下页面:
3 ) 添加配置文件
<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>
复制代码
根据上图,依次点击,得到下图:
其中文件名称填“DCacheOptServer.conf”, 文件内容按照上面格式填写
4 ) 重启OptServer
根据上图,依次点击,重启OptServer,重启成功后,“当前状态”从“Off”变成“Active”,如下图所示:
- 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发布包上传
依次点击,然后在弹出的提示框页面选择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这个用户访问的,那问题可能就出在,这个用户使用的密码也与前面输入的不一致。
又尝试了几次其他用户的密码,结果与前面相同,最后无奈只能先设置数据库跳过grant验证,这才执行成功。
这块问题后面没有查明,有清楚的朋友可以帮忙指出(抱拳)。
安装完成图如下:
- 4.3 上线一个KVCache模块
按照上图箭头依次点击,“应用”选择在部署和发布Proxy和Router服务创建的应用名称,“cache类型”选择KVCache,所填信息确认无误后,点击“下一步”进入“模块配置”步骤,如下图:
填写必要信息之后,点击“下一步”,进入“服务配置”步骤,如下图:
注意: 共享内存key必须是唯一的,不能在服务部署机器上已存在,否则会造成服务拉起失败,可使用ipcs命令确认。(该共享内存key为十进制数,可以自定义,不能重复)。备机部署后续补充。#TODO
必要信息填写完毕,点击“下一步”进入“安装发布”步骤,如下图:
再次确认信息填写无误,点击“安装发布”,等待服务发布完成。刷新管理平台主页,左侧目录树出现此模块信息,如下图:
- 4.4 上线一个MKVCache模块
步骤和部署和发布KVCache类似,参考即可
- 4.5 Cache配置管理
按照上图箭头依次点击,可添加配置项。
- 4.6 模块和单节点的配置管理
按照上图箭头依次点击,可在该页面上修改和添加配置。该页面的配置管理分两种类型:针对模块所有节点的配置管理和针对模块特定节点的配置管理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 搭建数据驱动测试框架构
- 实用测试技能分享:jmeter+Jenkins性能测试自动化搭建
- 搭建国密 SSL 开发测试环境
- 搭建和测试 Redis 主备和集群
- Flink开发IDEA环境搭建与测试
- 【蓝牙安全】蓝牙安全测试环境搭建(硬件设备篇)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Developer's Guide to Social Programming
Mark D. Hawker / Addison-Wesley Professional / 2010-8-25 / USD 39.99
In The Developer's Guide to Social Programming, Mark Hawker shows developers how to build applications that integrate with the major social networking sites. Unlike competitive books that focus on a s......一起来看看 《Developer's Guide to Social Programming》 这本书的介绍吧!