Tars是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用。
官网:https://github.com/TarsCloud/Tars
本文主要参照官网中安装步骤,但是官网中使用的是Centos系统,对使用ubuntu系统的使用者来说其中很多的指令都是不一样的,本文中将介绍在ubuntu中安装的具体过程。
1. 相关依赖库安装
2. Tars开发环境安装
3. Tars数据库环境初始化
4. Tars框架运行环境搭建
5. 安装框架普通基础服务
sudo apt-get install libc-dev
sudo apt install cmake
(tars需要cmake的版本为2.8.8以上,可以用cmake –version查看版本)
3. 安装ncurses和zlib
apt-get install ncurses-dev
apt-get install zlib1g.dev
ln -s /usr/include/mariadb /usr/local/mysql/include
ln -s /usr/lib/x86_64-linux-gnu /usr/local/mysql/lib
(3) 最后再安装编译mysql-5.6.26
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.26.tar.gz
sudo su
cd /usr/local
mkdir mysql-5.6.26
chown lz:lz ./mysql-5.6.26
ln -s /usr/local/mysql-5.6.26 /usr/local/mysql
tar zxvf mysql-5.6.26.tar.gz /usr/local/mysql-5.6.26
(如果不能解压成功,则先解压再使用cp -r来复制)
编译mysql
cd /usr/local/mysql-5.6.26
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.26 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
make
make install
将 mysql 的静态库复制(或者链接)到为 Tars 基础框架准备的目录下
ln -s /home/ubuntu/mysql-5.6/libmysqlclient.a /usr/local/mysql/lib/
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
source ~/.bashrc
node和带有负载功能的node应用的进程管理器pm2安装
nvm install v8.11.3
npm install -g pm2 --registry=https://registry.npm.taobao.org
克隆源码:
git clone https://github.com/TarsCloud/TarsFramework
cd TarsFramework/build
chmod u+x build.sh
./build.sh prepare
sudo apt-get install protobuf-c-compiler protobuf-compiler libprotobuf-dev libprotobuf-c-dev libprotoc-dev
./build.sh all
注:我使用的protoc版本为3.1.0
安装成功后会得到如下结果:
等待编译成功。
sudo su
cd /usr/local
mkdir tars
chown lz:lz ./tars/
安装tars
cd /home/lz/TarsFramework/build/
./build.sh install
这样tars就按装到了/usr/local/tars/cpp
打开mysql服务:
service mysql start
mysql -u root -p
输入密码后进入mysql:
grant all on *.* to 'tars'@'%' identified by 'tars2015' with grant option;
grant all on *.* to 'tars'@'localhost' identified by 'tars2015' with grant option;
grant all on *.* to 'tars'@'${hostname}' identified by 'tars2015' with grant option;
flush privileges;
其中{hostname}替换为你的电脑名。
退出sql编程,运行以下:
cd /home/lz/TarsFramework/sql
sed -i "s/192.168.2.131/192.168.1.117/g" `grep 192.168.2.131 -rl ./*`
sed -i "s/db.tars.com/192.168.1.117/g" `grep db.tars.com -rl ./*`
sed -i "s/10.120.129.226/192.168.1.117/g" `grep 10.120.129.226 -rl ./*`
sed -i "s/uroot/utars/g" exec-sql.sh
sed -i "s/proot@appinside/ptars2015/g" exec-sql.sh
chmod u+x exec-sql.sh
./exec-sql.sh
其中192.168.1.117为本机的IP,tars/tars2015为数据库的用户名/密码组合。
准备核心基础服务:
cd /home/lz/TarsFramework/build
make framework-tar
会在当前目录生成framework.tgz 包 这个包包含了 tarsAdminRegistry, tarsregistry, tarsnode, tarsconfig, tarspatch 部署相关的文件
同时准备普通基础服务:
make tarsstat-tar
make tarsnotify-tar
make tarsproperty-tar
make tarslog-tar
make tarsquerystat-tar
make tarsqueryproperty-tar
sudo su
mkdir -p /data/log/tars
mkdir -p /home/tarsproto
mkdir -p /usr/local/app/tars
chown -R lz:lz /usr/local/app /data/log/tars /home/tarsproto
cp /home/lz/TarsFramework/build/framework.tgz /usr/local/app/tars/
cd /usr/local/app/tars
tar xzfv framework.tgz
修改各个服务对应conf目录下配置文件,注意将配置文件中的ip地址修改为本机ip地址,如下:
sed -i "s/192.168.2.131/192.168.1.117/g" `grep 192.168.2.131 -rl ./*`
sed -i "s/db.tars.com/192.168.1.117/g" `grep db.tars.com -rl ./*`
sed -i "s/registry.tars.com/192.168.1.117/g" `grep registry.tars.com -rl ./*`
sed -i "s/web.tars.com/192.168.1.117/g" `grep web.tars.com -rl ./*`
其中,本机IP为 192.168.1.117
执行脚本,启动tars框架服务:
chmod u+x tars_install.sh
./tars_install.sh
mkdir -p /home/lz/TarsFramework/TarsWeb
chown -R lz:lz /home/lz/TarsFramework/TarsWeb
cd /home/lz/TarsFramework/TarsWeb
git clone https://github.com/TarsCloud/TarsWeb.git ./
sed -i 's/db.tars.com/192.168.1.117/g' config/webConf.js
sed -i 's/registry.tars.com/192.168.1.117/g' config/tars.conf
其中,本机IP为 192.168.1.117
默认端口配置在3000上,可在config/webConf.js中修改。
启动Tars web 管理平台:
npm install --registry=https://registry.npm.taobao.org
npm run prd
调了几个node和npm的错误后终于配置成功了:
创建日志目录:
mkdir -p /data/log/tars
如果发现tarsnotify的当前状态不对,可以看后面问题解决部分,将tarsnotify服务重新发布一下。
同时你也可以用 pm2 stop tars-node-web来关闭tars web程序。
上面配置了三个核心基础服务,需要注意的是tarsnotify服务其实是没搭建起来的,还需要重新发布一下,直接按照官网中4.4节配置就行了,只不过还要注意tarslog服务发布的时候模板要选择tars.tarslog而不是tars.default。
解决方法:
cp sql/share/english/errmsg.sys /usr/share/mysql/english
解决方法:
先autoremove mariadb-server,然后在install mariadb-server
解决方法: 终端执行:
sudo apt install sysv-rc-conf
sudo cp /usr/sbin/sysv-rc-conf /usr/sbin/chkconfig
/home/lz/TarsFramework/tarscpp/tools/pb2tarscpp/CppPlugin.cpp:8:45: fatal error: google/protobuf/compiler/plugin.h: 没有那个文件或目录
compilation terminated.
tarscpp/tools/pb2tarscpp/CMakeFiles/pb2tarscpp.dir/build.make:62: recipe for target 'tarscpp/tools/pb2tarscpp/CMakeFiles/pb2tarscpp.dir/CppPlugin.cpp.o' failed
make[2]: *** [tarscpp/tools/pb2tarscpp/CMakeFiles/pb2tarscpp.dir/CppPlugin.cpp.o] Error 1
CMakeFiles/Makefile2:1070: recipe for target 'tarscpp/tools/pb2tarscpp/CMakeFiles/pb2tarscpp.dir/all' failed
make[1]: *** [tarscpp/tools/pb2tarscpp/CMakeFiles/pb2tarscpp.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
解决方法:
是因为protobuf库没有装全,(感谢TARS技术交流2群的Laplace大神,他给了我解决方法),运行下面的语句:
sudo apt-get install protobuf-c-compiler protobuf-compiler libprotobuf-dev libprotobuf-c-dev libprotoc-dev
/usr/bin/env: "node": 没有那个文件或目录
/bin/sh: 1: node: not found
gyp: Call to 'node -e "require('nan')"' returned exit status 127 while in binding.gyp. while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (/usr/share/node-gyp/lib/configure.js:354:16)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 4.4.0-141-generic
gyp ERR! command "/usr/bin/nodejs" "/usr/bin/node-gyp" "rebuild"
gyp ERR! cwd /home/lz/TarsFramework/TarsWeb/node_modules/snappy
gyp ERR! node -v v4.2.6
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok
npm WARN install:[email protected] [email protected] install: `prebuild-install || node-gyp rebuild`
npm WARN install:[email protected] Exit status 1
npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: [email protected]
解决方法:
由于Ubuntu下已经有一个名叫node的库,因此Node.js在ubuntu下默认叫nodejs,需要额外处理一下
参照 http://stackoverflow.com/questions/18130164/nodejs-vs-node-on-ubuntu-12-04
sudo ln -s /usr/bin/nodejs /usr/bin/node
解决方法:
npm install -g pm2
解决方法:
这是由于node的版本不匹配造成的,重装node即可:
sudo npm cache clean -f
sudo npm install -g n
sudo n stable
解决方法:
https://blog.csdn.net/timekeeperl/article/details/79173793
dpkg: 关于含有 mariadb-client-core-10.0 的 .../mariadb-client-core-10.0_10.0.37+maria-1~trusty_amd64.deb:
mariadb-client-10.0 与之冲突 mysql-client-core-5.5
mariadb-client-core-10.0 提供了 mysql-client-core-5.5,它将被安装。
dpkg: 处理归档 /var/cache/apt/archives/mariadb-client-core-10.0_10.0.37+maria-1~trusty_amd64.deb (--unpack)时出错:
软件包相互冲突 - 将不安装 mariadb-client-core-10.0
dpkg: 关于含有 mariadb-client-10.0 的 .../mariadb-client-10.0_10.0.37+maria-1~trusty_amd64.deb:
mariadb-client-core-10.0 与之冲突 mysql-client-5.5
mariadb-client-10.0 提供了 mysql-client-5.5,它将被安装。
dpkg: 处理归档 /var/cache/apt/archives/mariadb-client-10.0_10.0.37+maria-1~trusty_amd64.deb (--unpack)时出错:
软件包相互冲突 - 将不安装 mariadb-client-10.0
在处理时有错误发生:
/var/cache/apt/archives/mariadb-client-core-10.0_10.0.37+maria-1~trusty_amd64.deb
/var/cache/apt/archives/mariadb-client-10.0_10.0.37+maria-1~trusty_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
解决方法:
主要是几个包都没安装成功,而且相互之间有依赖关系,使用apt-get -f install无法处理这些依赖关系,所以报错,解决办法是直接用sudo dpkg -r将牵扯到的包卸载了,再使用apt-get -f install处理依赖关系即可。
解决方法:
1 终端输入 ps -aux ,列出进程。找到含有apt‘-get的进程,直接sudo kill PID。解决。
2 强制解锁,命令
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
解决方法:
这是由于node的版本不匹配造成的,重装node即可:
sudo npm cache clean -f
sudo npm install -g n
sudo n stable
解决方法:
去查看日志文件,/usr/local/app/tars/app_log/tars/tarsnode/tars.tarsnode.log
发现有两个错误待解决!
重新配了一下还是不能解决,最后发现前面打包的服务包中,tarsnotify属于普通基础服务,并没有部署,但是部署信息已经有了,这个还是很坑,所以按照其他普通基础服务发布的方法,将tarsnotify重新发布一下:
在 web 管理系统中选择 tarsnotify 并进入“发布管理”。在列表中选中节点,并点击“发布选中节点”按钮。点击“上传发布包”,并上传 tarsnotify.tgz 文件,然后选中上传好的文件,点击“发布”按钮。回到“服务管理”列表,在 tarsnotify 后面点击“重启”。完成之后问题即解决。
这里非常感谢maq128同学的
https://github.com/maq128/temp/blob/master/kb/tars小白安装必成手册.md
看到他的博客后才恍然大悟!
prebuild-install WARN install EACCES: permission denied, access '/root/.npm'
gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/11.6.0"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/home/lz/TarsFramework/TarsWeb/node_modules/snappy/.node-gyp"
gyp WARN install got an error, rolling back install
gyp WARN install got an error, rolling back install
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir '/home/lz/TarsFramework/TarsWeb/node_modules/snappy/.node-gyp'
gyp ERR! System Linux 4.15.0-43-generic
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/lz/TarsFramework/TarsWeb/node_modules/snappy
gyp ERR! node -v v11.6.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules/snappy):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] install: `prebuild-install || node-gyp rebuild`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1
解决方法:
sudo npm install
https://github.com/TarsCloud/Tars/blob/master/Install.zh.md
https://cloud.tencent.com/developer/article/1372998
https://blog.csdn.net/weixin_40405198/article/details/79578290
https://blog.csdn.net/kdchxue/article/details/81046192
https://blog.csdn.net/yypsober/article/details/51906691
https://blog.csdn.net/tingfenyijiu/article/details/79788223
https://stackoverflow.com/questions/36499840/typeerror-buffer-alloc-is-not-a-function
http://tieba.baidu.com/p/5043173421
https://www.cnblogs.com/derek718/articles/2632154.html