内容简介: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环境搭建与测试
- 【蓝牙安全】蓝牙安全测试环境搭建(硬件设备篇)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。