容灾高可用测试

核心就是:多节点集群,单表多副本,宕某一个节点,副本还在,该表就可以正常运转。

StarRocks是支持分布式表,并且可以有副本冗余,一般在建表时指定副本数,不指定按照默认的副本数为3。

官网副本修改的操作

  1. 修改表的默认副本数量, 新建分区副本数量默认使用此值 ALTER TABLE example_db.my_table SET ("default.replication_num" = "2");
  2. 修改单分区表的实际副本数量(只限单分区表) ALTER TABLE example_db.my_table SET ("replication_num" = "3");

性能测试已经导入6张表,并且都是单分区,单副本表。

手动停止BE模拟存储节点失效

SSB工具中dates建表语句

CREATE TABLE IF NOT EXISTS `dates` (
  `d_datekey` int(11) NOT NULL COMMENT "",
  `d_date` varchar(20) NOT NULL COMMENT "",
  `d_dayofweek` varchar(10) NOT NULL COMMENT "",
  `d_month` varchar(11) NOT NULL COMMENT "",
  `d_year` int(11) NOT NULL COMMENT "",
  `d_yearmonthnum` int(11) NOT NULL COMMENT "",
  `d_yearmonth` varchar(9) NOT NULL COMMENT "",
  `d_daynuminweek` int(11) NOT NULL COMMENT "",
  `d_daynuminmonth` int(11) NOT NULL COMMENT "",
  `d_daynuminyear` int(11) NOT NULL COMMENT "",
  `d_monthnuminyear` int(11) NOT NULL COMMENT "",
  `d_weeknuminyear` int(11) NOT NULL COMMENT "",
  `d_sellingseason` varchar(14) NOT NULL COMMENT "",
  `d_lastdayinweekfl` int(11) NOT NULL COMMENT "",
  `d_lastdayinmonthfl` int(11) NOT NULL COMMENT "",
  `d_holidayfl` int(11) NOT NULL COMMENT "",
  `d_weekdayfl` int(11) NOT NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`d_datekey`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`d_datekey`) BUCKETS 1
PROPERTIES (
"replication_num" = "1",
"in_memory" = "false",
"colocate_with" = "groupa3",
"storage_format" = "DEFAULT"
);

1. 先查看表信息

mysql> show data from dates;
+-----------+-----------+-----------+--------------+----------+
| TableName | IndexName | Size      | ReplicaCount | RowCount |
+-----------+-----------+-----------+--------------+----------+
| dates     | dates     | 33.409 KB | 1            | 2556     |
|           | Total     | 33.409 KB | 1            |          |
+-----------+-----------+-----------+--------------+----------+

2. 将单副本表副本数修改成2

ALTER TABLE ssb.dates SET ("replication_num" = "2"); 报错:ERROR 1064 (HY000): table dates is colocate table, cannot change replicationNum 建表的时候是指定了colocate_with,该表为colocate表,在性能测试中,其实是不生效,更多colocate相关知识 解决办法:

  1. 查看group信息:SHOW PROC '/colocation_group' ;
  2. 将该表的group删除:ALTER TABLE ssb.dates SET ("colocate_with" = "");,group是database级别的,group3只有这张表在使用,所以对dates表的group删除就会,该group会不存在
  3. 然后再次执行副本修改:ALTER TABLE ssb.dates SET ("replication_num" = "2");
  4. 集群自动给其他BE同步副本,并且副本数已经变成了2

3. 找到该表副本所在的BE,停掉对应节点并查询

  1. 通过管理界面,找到对应BE节点
  2. 停掉cdh-node6中的BE:/opt/StarRocks-2.0.0-GA/be/bin/stop_be.sh
  3. 执行查询语句
  4. 再停另外一个副本所在节点cdh-node7,此时可以看到已经都停止了
  5. 发现dates数据还能查到,FE会自动发现该表副本所在节点宕机之后,会自动把副本转移
  6. 重新启动数据所在的BE:/opt/StarRocks-2.0.0-GA/be/bin/start_be.sh --daemon

结论

  1. 经测试发现,只要副本数据所在的节点没有down,就依然可以提供查询服务
  2. 查询其他单副本的表,因为有部分数据所在的节点down了,所以会出现there is no scanNode Backend报错
  3. 副本会在节点故障自动转移,支持HA