Tars学习(二) —— 物理机扩容与负载均衡

本篇文章主要介绍如何在物理机上进行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次。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值