【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,并把它注释掉。
如果不注释掉的话,MySQL只能监听本机,这样其他节点就没办法在此读写数据库了。
MySQL 8.0的配置文件貌似没有这一项,因此可以省略这一步!
紧接着登录MySQL,修改数据库用户的权限配置。
其中,[username]是需要授权的用户名,[password]是用户密码。
~$ mysql -u root -p
mysql> 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就证明已经搞定了!
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)
接下来一键部署就很方便:
[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安装好,如果看到下面图片中的显示,就证明框架部署成功了!
现在可以通过主节点IP加端口号http://[IP]:3000来访问Web管理平台。
首次访问需要修改admin的密码,然后通过管理员用户名admin和新密码就可以登录到Web管理后台了!
按官方文档的说明,主节点会默认安装tarsAdminRegistry、tarspatch、tarsweb、tarslog、tarsstat、tarsproperty,这个几个服务在从节点上不会安装。
所以我的笔记本从节点上只部署了tarsregistry、tarsqueryproperty、tarsquerystat、tarsconfig、tarsnode、tarsnotify这几个服务。
部署过程中,脚本会根据所设的参数登录数据库,创建TarsAdmin账号并授权Tars相关的数据库来给框架使用。
登录MySQL数据库,会发现部署时创建了7个Tars相关数据库。
3 Tars安装后说明
框架部署完成后,Web模块需要用pm2来管理。可是在Ubuntu下因为权限的问题,执行pm2会出错。
首先需要让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 ...
不仔细看日志真的被坑的有点惨!!
登录Web管理平台,在访问服务监控和特性监控页面时可能会出现如下的报错。
从报错中可以看出是查询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/issues TarsWeb问题解决
6. https://tn710617.github.io/zh-tw/pm2/ pm2用法大全