负载均衡面试问题 负载均衡测试_负载均衡面试问题

 官网说可以负载均衡,我们测试下他到底能不能负载均衡,如果不能,我会去官方群里咨询。

扫盲:什么是负载均衡?

负载均衡就是分摊到多台机器上执行,而且是不用改代码的(非侵入式)

比如我搭建ABC三台机器,使用了负载均衡,当我访问A的时候,他就会把任务分配给B和C。如果B挂了,那A会把任务【都】发送到C

测试方案-负载均衡

我使用三台机器,根据官方文档,搭建一个tdengine的集群,访问其中的主节点,然后关闭主节点,看看代码是否还能继续访问。

ps:两台不能负载均衡,如果主节点挂了,那都挂了,还负载个屁

 

FQDN(一行3个,ip 主机名 域名,fndn就是域名)配置,配置hosts(所有节点)

负载均衡面试问题 负载均衡测试_负载均衡面试问题_02

所有节点安装tdengine但是不要启动

tar -zxvf TDengine-server-3.0.0.1-Linux-x64.tar.gz

cd TDengine-server-3.0.0.1

./install.sh

第一个物理节点直接回车创建新集群后续物理节点则输入该集群任何一个在线的物理节点的 FQDN:端口号(默认6030)

第一节点,直接全回车,其他节点,输入第一个节点的域名hadoop1:6030,下一行回车。

所有节点修改配置文件

vi /etc/taos/taos.cfg

负载均衡面试问题 负载均衡测试_运维_03

 端口号不改,默认6030,其他节点

fristEp        hadoop1:6030

fqdn        hadoop2

fristEp        hadoop1:6030

fqdn        hadoop3

启动集群

启动第一个节点,然后将其他节点添加进来

第一个节点执行:

systemctl start taosd

启动客户端:

taos

在客户端里输入命令,查看节点数

show dnodes;

负载均衡面试问题 负载均衡测试_负载均衡面试问题_04

 在客户端中添加其他节点

CREATE DNODE "hadoop2:6030";

默认是离线,因为我没有在其他节点启动他的服务

负载均衡面试问题 负载均衡测试_运维_05

其他节点也执行启动

systemctl start taosd

再次回到1节点客户端,查看集群情况

show dnodes;

设置密码

alter user root pass '123456';

负载均衡面试问题 负载均衡测试_服务器_06

证明负载均衡过程(证明失败,普通集群模式不支持负载均衡)

所有节点,输入这个开启外部访问

systemctl start taosadapter

java代码读取hadoop1数据 

pom引入依赖

<dependency>
    <groupId>com.taosdata.jdbc</groupId>
    <artifactId>taos-jdbcdriver</artifactId>
    <version>3.0.0</version>
</dependency>

代码

import java.sql.*;
import java.util.Properties;

public class TDengineTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.taosdata.jdbc.rs.RestfulDriver");
        String jdbcUrl = "jdbc:TAOS-RS://192.168.30.101:6041/information_schema?user=root&password=123456";
        Properties properties = new Properties();
        properties.setProperty("charset", "UTF-8");
        properties.setProperty("locale", "en_US.UTF-8");
        properties.setProperty("timezone", "UTC-8");
        Connection conn = DriverManager.getConnection(jdbcUrl,properties);
        Statement stmt = conn.createStatement();

        ResultSet show_tables = stmt.executeQuery("show tables");

        while (show_tables.next()){
            String table_name = show_tables.getString("table_name");
            System.out.println(table_name);
        }


    }
}

结果正常

负载均衡面试问题 负载均衡测试_tdengine_07

测试负载均衡 

关闭hadoop1节点的tdengine服务

systemctl stop taosd

再次运行代码

请求失败,因为a节点是主节点,主节点挂了,其他肯定连不上

测试是否,仅仅是默认的表连不上,创建一个新库,看看是不是只是默认的连不上

systemctl start taosd;

【进入客户端】创建此表

taos -p;

create database test;

在java代码中将连接的数据库information_schema替换成test

重新关闭客户端

systemctl stop taosd

负载均衡面试问题 负载均衡测试_服务器_08

同样连不上,结论是:主节点没法做负载均衡

解决方案,应该是主节点只做, 收发,不做处理,就不会存在压力

负载均衡面试问题 负载均衡测试_tdengine_09

修改hadoop1配置/etc/taos/taos.cfg ,将他的fqdn注释掉,不作为工作节点,但是他还是会默认将自己纳入工作节点。

在社区询问,得到的答案是

搭建集群启动虚拟主节点模式,代码手动维护,当连接失败后,跳转另一个节点。

负载均衡面试问题 负载均衡测试_运维_10

 

测试方案-主从备份

往主节点插入后,从节点是否有数据,从节点不能单独访问,因为配置了主节点,所以客户端连接不上从节点,无从知道内部情况