本篇文章主要介绍如何在物理机上进行Tars扩容!
参考Tars Github网页:4.2.2. 服务扩容前安装tarsnode
1.环境
1.1 机器
物理机A:redhat7 已安装Tars的核心服务、普通服务、web等,作为主控机。ip:192.168.6.115
物理机B:redhat7 不需要安装Tars的核心服务、普通服务、web等,作为扩容机。ip:192.168.6.10
1.2 网络连接方式
A、B两台机器采用路由连接,在同一网段下。
1.3 普通用户
B机器普通用户名[自定义]:NodeTars
2.准备
2.1 分别关闭主控机和扩容器防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
2.2 设置主控机和扩容机 SELINUX状态:
vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
然后reboot重启生效
2.3 保持扩容机date 和主控机一致
主控机:date
Sun Apr 21 23:43:09 EDT 2019
扩容机:date
2019年 04月 21日 星期日 23:43:00 EDT
3.扩容
3.1 在扩容机安装tarsnode
cd /usr/local/
mkdir -p app/tars
cd app/
chown NodeTars:NodeTars ./tars/
将在主控机A中已打好的核心框架服务包复制到扩容机B /usr/local/app/tars/目录下,然后解压,如下:
scp build/framework.tgz root@192.168.6.10:/usr/local/app/tars/
在扩容机/usr/local/app/tars目录下解压framework.tgz:
cd /usr/local/app/tars
tar xzfv framework.tgz
修改各个服务对应conf目录下配置文件,注意将配置文件中的ip地址修改为本机ip地址,如下:
sed -i "s/192.168.2.131/192.168.6.10/g" `grep 192.168.2.131 -rl ./*`
sed -i "s/db.tars.com/192.168.6.115/g" `grep db.tars.com -rl ./*`
sed -i "s/registry.tars.com/192.168.6.115/g" `grep registry.tars.com -rl ./*`
sed -i "s/web.tars.com/192.168.6.115/g" `grep web.tars.com -rl ./*`
chmod u+x *.sh
./tars_install.sh
./tarsnode_install.sh
3.2 在主控机web管理平台预扩容
在A机器中安装Tars框架时已安装了tarsnode,因此这里不需要再重复安装。只需要再web界面进行操作即可。
3.2.1 登陆web管理平台
192.168.6.115:3000
3.2.2 运维管理
在运维管理——>扩容 中填写要扩容应用信息,然后点扩容按钮。
3.2.3 服务管理
在服务管理——>服务列表 中可以看到新添加的节点IP:
3.2.4 发布管理
在发布管理中选择节点发布应用:
3.2.5 按f5刷新
发布成功后f5 刷新管理平台:
3.2.6 查看扩容服务
如果在web管理平台扩容机192.168.6.10节点的状态都为active,并且在扩容机存在
/usr/local/app/tars/tarsnode/data/TestApp.HelloServer/bin/HelloServer
说明扩容已经成功。
4.负载均衡
Tars负载均衡支持三种方式:权重、轮询和hash,默认是轮询方式。验证负载均衡的前提是扩容,对业务服务HelloServer进行扩容之后,可以修改客户端代码,验证负载均衡(轮询方式)。
Client.cpp:
#include <iostream>
#include "servant/Communicator.h"
#include "Hello.h"
using namespace std;
using namespace TestApp;
using namespace tars;
#define N 10
int main(int argc,char ** argv)
{
Communicator comm;
comm.setProperty("locator","tars.tarsregistry.QueryObj@tcp -h 192.168.6.115 -p 17890:tcp -h 192.168.6.10 -p 17890");
try
{
HelloPrx prx;
comm.stringToProxy("TestApp.HelloServer.HelloObj" , prx);
try
{
std::string strsz[N];
strsz[0] = "hello-0";strsz[1] = "hello-1";
strsz[2] = "hello-2";strsz[3] = "hello-3";
strsz[4] = "hello-4";strsz[5] = "hello-5";
strsz[6] = "hello-6";strsz[7] = "hello-7";
strsz[8] = "hello-8";strsz[9] = "hello-9";
for(int i=0;i<N;++i)
{
std::string strTest = strsz[i];
string sReq(strTest);
string sRsp("");
int iRet = prx->testHello(sReq, sRsp);
cout<<"iRet:"<<iRet<<" sReq:"<<sReq<<" sRsp:"<<sRsp<<endl;
}
}
catch(exception &ex)
{
cerr << "ex:" << ex.what() << endl;
}
catch(...)
{
cerr << "unknown exception." << endl;
}
}
catch(exception& e)
{
cerr << "exception:" << e.what() << endl;
}
catch (...)
{
cerr << "unknown exception." << endl;
}
return 0;
}
执行客户端后,可以看到在主机和扩容机的app_log下均有HelloServer的日志信息。调用10次,两台机器各占5次。