gcware如何知道各个节点的状态

gcware使用ssh探测各个节点的状态,使用ssh探测是使用默认的22端口,如果ssh端口号修改了,就要对应修改corosync配置文件中的配置参数。

检查gcware内探测节点状态所使用的ssh端口与系统的ssh端口是否一致的方法为:
首先执行cat /etc/corosync/corosync.conf命令查看corosync配置文件中的node_ssh_port端口,如果配置文件中没有node_ssh_port端口,表示程序默认使用22端口;
然后执行cat /etc/ssh/sshd_config命令,查看系统ssh服务所使用的端口。

修改gcware内探测节点状态所使用的ssh端口与系统的ssh端口是否一致的方法为:

方法1:
修改/etc/corosync/corosync.conf配置文件中的node_ssh_port端口,使其与/etc/ssh/sshd_config中的Port一致。

方法2:
修改/etc/ssh/sshd_config中的Port端口,修改命令包含如下三条:
(1)执行vi /etc/ssh/sshd_config(修改ssh服务端端口)命令,将Port端口修改为/etc/corosync/corosync.conf配置文件中的node_ssh_port端口。
(2)执行vi /etc/ssh/ssh_config(修改ssh客户端端口)命令,将Port端口修改为/etc/corosync/corosync.conf配置文件中的node_ssh_port端口。
(3)执行/etc/init.d/sshd restart命令,重启ssh服务。

集群正常是通过root启停服务,是否可以使用gbase启停服务?

单独的重启除corosync外的集群组件,可以使用gbase用户操作,具体为:

gcluster_services  <gbase | gcluster | gcrecover | syncserver | all>  start|stop

corosync和gcware,需要root用户权限;

另外,可以配置gbase用户的sudo,可以在不用su - root的情况下使用gbase用户执行sudo service gcware stop|start来实现gcware服务的启停。

资源管理高低优先级用户使用约束

资源管理在如下使用情景下,高优先级用户读DC的过程会受到低优先级用户的影响,导致高、低优先级用户执行性能相近:
(1)使用相同并行度;
(2)同时采用相同(类似)的SQL访问同一张表的相同列的数据,且IO是该SQL的主要耗时(如果算子计算是SQL主要耗时则影响程度会降低);
(3)访问的数据是冷数据(如果部分数据是热数据,则随着热数据占比重的增加,读DC数据的影响程度降低);
在完全满足条件(2)、(3)的情况下,调整并行度,可以减少高低优先级相互之间的影响。

对double数值进行round取舍结果不是四舍五入

对double类型数值进行round取舍,结果不是四舍五入。

gbase> create table t(c1 double);
Query OK, 0 rows affected (Elapsed: 00:00:00.55)
gbase> insert into t values(41.325);
Query OK, 1 row affected (Elapsed: 00:00:00.03)
gbase> select c1,round(c1,2) from t;
+--------+-------------+
| c1     | round(c1,2) |
+--------+-------------+
| 41.325 |       41.32 |
+--------+-------------+
1 row in set (Elapsed: 00:00:00.00)
1、问题分析:
DOUBLE代表一个浮点型数值,它所存储的数值不是一个准确值。所以造成了结果的差别。
对double类型作round,采取了“四舍六入五凑偶”的规则。
即“四舍”是指≤4 时舍去,
"六入"是指≥6时进上,
"五凑偶"指的是根据5后面的数字来定,当5后有数时,舍5入1;
当5后无数或为0时,需要分两种情况来讲:
①5前为奇数,舍5入1;
②5前为偶数,舍5不进。

2、问题解决:
可以通过转化数值字符为精确数值类型解决,如下:

gbase> select c1,round(cast(c1 as decimal(16,5)),2) from t;
+--------+------------------------------------+
| c1     | round(cast(c1 as decimal(16,5)),2) |
+--------+------------------------------------+
| 41.325 |                              41.33 |
+--------+------------------------------------+
1 row in set (Elapsed: 00:00:00.00)

或者使用decimal精确数值类型

gbase> create table tt(c1 decimal(16,3));
Query OK, 0 rows affected (Elapsed: 00:00:00.48)
gbase> insert into tt values(41.325);
Query OK, 1 row affected (Elapsed: 00:00:00.03)
gbase> select c1,round(c1,2) from tt;
+--------+-------------+
| c1     | round(c1,2) |
+--------+-------------+
| 41.325 |       41.33 |
+--------+-------------+
1 row in set (Elapsed: 00:00:00.01)

资源管理中静态池参数max_memory的设置原则

以一个静态池为例,期望最大化利用内存(同时避免溢出风险),max_memory值不应超过gnode进程的最大可用内存。
max_memory值指Large堆内存的分配上限。默认情况下:gnode的最大可用内存为(系统内存+swap)*0.8。其中比率0.8可由gbase_memory_pct_target参数调整。无论是否开启资源管理,只要比率设置合理,不会引发系统OOM。
两种机制同时存在,max_memory值应小于gnode的最大可用内存限制时才会生效,反之则体现为不生效或不限制。