vlambda博客
学习文章列表

【RPC】Tars框架在Ubuntu上的部署小结


这几天倒腾了腾讯的开源RPC框架Tars,踩了不少坑,好不容易搭建好了,赶紧趁热记录下来!


一开始我图方便就想着用Docker来部署Tars,官方文档也建议这么做,可是最终死活运行不起来,后来便采用源码部署的方案了。


虽然也有些坑,但还好搞定了。


这里主要也是记录源码部署的过程!



1  Tars依赖安装

按照官方文档,源码编译过程需要安装一系列依赖包:gcc,glibc,bison,flex,cmake,ncurses-devel和zlib-devel。


Ubuntu系统的安装命令如下。


~$ sudo apt-get install build-essential bison flex cmake psmisc libncurses5-dev zlib1g-dev


接着安装MySQL数据库管理系统。


刚开始直接用Docker那一套方案的MySQL环境没有出现问题,可是后来搭建主从节点的时候才发现MySQL在Docker中的IP是本地虚拟网络,其他机子没办法连接,所以就在主节点本地安装了MySQL 5.7。


这里直接参考官方文档的MySQL APT安装指引就可以了,网页链接放在文末(其实直接搜索就行了:D)。


装好MySQL之后,为了让其他机子远程登录使用,还需要再做些配置工作。


(当然,如果只是在一台机子上搭建Tars的话,这一步可以跳过,只要本机能访问就行了。)


先打开MySQL的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,找到其中的bind-address,并把它注释掉。


【RPC】Tars框架在Ubuntu上的部署小结


如果不注释掉的话,MySQL只能监听本机,这样其他节点就没办法在此读写数据库了。


MySQL 8.0的配置文件貌似没有这一项,因此可以省略这一步!


紧接着登录MySQL,修改数据库用户的权限配置。


其中,[username]是需要授权的用户名,[password]是用户密码。


~$ mysql -u root -pmysql> USE mysql;mysql> GRANT ALL ON *.* TO '[username]'@'%'    -> IDENTIFIED BY '[password]';mysql> FLUSH privileges;


FLUSH privileges是刷新配置让授权生效,设置完之后要再重启一下MySQL服务。


~$ sudo systemctl restart mysqld.service


这样就能在其他机子上通过指定host连接上这个MySQL服务器了。



~$ mysql -h [mysql-ip] -u [username] -p


只要被Welcome就证明已经搞定


【RPC】Tars框架在Ubuntu上的部署小结



2  Tars框架安装与部署

依赖都装好之后,就可以下载源码开始编译安装了。


官方文档是从Github仓库下载,可是速度实在让人捉急。还好腾讯也把代码放在Gitee上了,国内下载还是建议用码云吧,速度快的不只是一星半点:D


~$ git clone https://gitee.com/TarsCloud/TarsFramework.git


我们需要手动在/usr/local路径下新建tars和app两个目录,以便框架安装使用。


~$ cd /usr/local/~$ sudo mkdir tars app


切换回TarsFramework路径,进入build目录开始编译安装,[git-clone-path]是存放Tars源码的路径。


~$ cd [git-clone-path]/TarsFramework~$ git submodule update --remote --recursive~$ cd build && cmake ..~$ make -j4 && sudo make install


框架会默认安装在/usr/local/tars/cpp目录下,而且框架部署的脚本、框架工具、依赖的库和头文件也都放置在这个目录下。


接着还是通过Gitee下载TarsWeb的代码,并拷贝到/usr/local/tars/cpp/deploy目录下,这里要注意将目录名改为web。


~$ git clone https://gitee.com/TarsCloud/TarsWeb.git~$ sudo cp -rf TarsWeb /usr/local/tars/cpp/deploy/web


这样,框架部署前的工作就都准备好了。


刚开始试水时我只在自己的笔记本上部署单机主节点,成功后便尝试部署一主一从,把数据库和主节点都安装在实验室没用的主机上,自己的笔记本就部署从节点。


(小小笔记本还是再留点空间装其他东西吧:D)


【RPC】Tars框架在Ubuntu上的部署小结


接下来一键部署就很方便:


  • [MYSQL_USER]是MySQL的用户,也就是先前授权的用户,默认是root。

  • [MYSQL_PASSWORD]是授权用户的密码。

  • [MYSQL_PORT]是MySQL服务器端口,默认是3306。

  • [INET]是网卡的名称,可以通过ifconfig来查看,比如我的是enp1s0。

  • [REBULD]指是否重建数据库,通常为false,当然中途安装出错可以设为true重置。

  • [SLAVE]指是否为从节点,主节点为false。


~$ cd /usr/local/tars/cpp/deploy~$ chmod a+x linux-install.sh~$ sudo ./linux-install.sh [MYSQL_HOST] \> [MYSQL_PASSWORD] [INET] [REBULD] \> [SLAVE] [MYSQL_USER] [MYSQL_PORT]


一键部署会自动把TarsWeb安装好,如果看到下面图片中的显示,就证明框架部署成功了!


【RPC】Tars框架在Ubuntu上的部署小结


现在可以通过主节点IP加端口号http://[IP]:3000来访问Web管理平台。


首次访问需要修改admin的密码,然后通过管理员用户名admin和新密码就可以登录到Web管理后台了!


【RPC】Tars框架在Ubuntu上的部署小结


按官方文档的说明,主节点会默认安装tarsAdminRegistry、tarspatch、tarsweb、tarslog、tarsstat、tarsproperty,这个几个服务在从节点上不会安装。


所以我的笔记本从节点上只部署了tarsregistry、tarsqueryproperty、tarsquerystat、tarsconfig、tarsnode、tarsnotify这几个服务。


部署过程中,脚本会根据所设的参数登录数据库,创建TarsAdmin账号并授权Tars相关的数据库来给框架使用。


登录MySQL数据库,会发现部署时创建了7个Tars相关数据库。


【RPC】Tars框架在Ubuntu上的部署小结



3  Tars安装后说明

框架部署完成后,Web模块需要用pm2来管理。可是在Ubuntu下因为权限的问题,执行pm2会出错。


【RPC】Tars框架在Ubuntu上的部署小结


首先需要让node环境变量生效,然后按指示修改pm2的用户权限,[user]是系统用户名。


~$ sudo -s source /etc/profile~$ sudo chown [user]:[user] /home/[user]/.pm2/rpc.sock \> /home/[user]/.pm2/pub.sock


然后再用pm2 list命令就可以查看模块的状态了!


如果机器重启的话,框架服务和Web组件就需要我们手动启动,可以用框架的自带脚本启动框架。


~$ cd /usr/local/app/tars~$ sudo ./tars-start.sh


Web组件可以通过pm2来启动监控,如果该模块有问题也可以查pm2的用法来对其操作。


~$ cd /usr/local/app/web~$ npm run prd~$ pm2 list


官方文档上写着通过npm run dev来启动,可是我怎么试都出错。最后在部署框架时的输出日志里发现命令改成了npm run prd ...


【RPC】Tars框架在Ubuntu上的部署小结


不仔细看日志真的被坑的有点惨!!


登录Web管理平台,在访问服务监控和特性监控页面时可能会出现如下的报错。


【RPC】Tars框架在Ubuntu上的部署小结


从报错中可以看出是查询2020120400的数据时出错了,我是在12.05才搭好的框架,而Web默认查询数据库中关于12.04的数据,当然就报错了。


在TarsWeb GitHub仓库的Issues里有人提出将Web前端默认选中的当前日期改为根据服务器时间确定,而不是浏览器时间。


我们可以通过查询tars_stat数据库看到相应的状态。



还可以查看日志跟踪一下报错所在!



可是我根据报错日志,在web安装目录下定位了半天也不知道该在哪个地方修改默认的当天日期,菜的抠jio啊0.0


最后干脆偷了个懒,想着等到第二天它的默认日期就会同步到12.05了,最后果然不再报错!


看来Web组件还是讲武德的。


到这里,Tars算是部署完成了!回顾我的试水历程还是挺折腾的:


单机Docker数据库&Tars-->单机Docker数据库&源码Tars-->主从Dcoker数据库&源码Tars-->主从本地数据库&源码Tars ...


现在自己都可以不看文档直接敲命令配置了:D


安装完毕,可以开始HelloWorld了!


以上。



参考资料:

1. https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/ MySQL 5.7安装指引

2. https://my.oschina.net/yashi/blog/1439151 远程连接登录MySQL

3. https://tarscloud.github.io/TarsDocs/installation Tars部署方案

4. https://github.com/TarsCloud/TarsFramework Tars源码仓库

5. https://github.com/TarsCloud/TarsWeb/issueTarsWeb问题解决

6. https://tn710617.github.io/zh-tw/pm2/  pm2用法大全