Skip to content

工具

1.控制脚本

Ignite提供了一个命令行脚本control.sh|bat,可以用它来对集群进行监控和管理,该脚本位于安装目录的/bin/文件夹。

控制脚本的语法如下:

shell
control.sh <connection parameters> <command> <arguments>
shell
control.bat <connection parameters> <command> <arguments>

1.1.接入集群

如果执行脚本时没有连接参数,控制脚本会尝试连接运行在本机的节点(localhost:11211),如果希望接入运行在远程主机上的节点,需要指定连接参数:

参数描述默认值
--host HOST_OR_IP节点的主机名或者IP地址localhost
--port PORT连接端口11211
--user USER用户名
--password PASSWORD密码
--ping-interval PING_INTERVALping操作间隔5000
--ping-timeout PING_TIMEOUTping操作响应超时30000
--ssl-protocol PROTOCOL1, PROTOCOL2…​接入集群时尝试的SSL协议列表,支持的协议在这里TLS
--ssl-cipher-suites CIPHER1,CIPHER2…​SSL密码列表,支持的密码在这里
--ssl-key-algorithm ALGSSL密钥算法SunX509
--keystore-type KEYSTORE_TYPE密钥库类型JKS
--keystore KEYSTORE_PATH密钥库路径,为控制脚本指定密钥库来开启SSL
--keystore-password KEYSTORE_PWD密钥库密码
--truststore-type TRUSTSTORE_TYPE信任库类型JKS
--truststore TRUSTSTORE_PATH信任库路径
--truststore-password TRUSTSTORE_PWD信任库密码

1.2.激活、冻结和拓扑管理

可以使用控制脚本来激活/冻结集群,以及管理基线拓扑

1.2.1.获取集群状态

集群可以有3个状态:激活、只读和非激活,具体可以参见集群状态章节的介绍。

执行下面的命令,可以获得集群的状态:

shell
control.sh --state
shell
control.bat --state

1.2.2.激活集群

激活是将当前可用的服务端节点集配置为基线拓扑,只有使用原生持久化时才需要激活。

使用下面的命令可以激活集群。

shell
control.sh --set-state ACTIVE
shell
control.bat --set-state ACTIVE

1.2.3.冻结集群

警告

冻结会释放所有节点的内存资源,包括应用的数据,并禁用公开的集群API。如果内存中的缓存没有备份到持久化存储(不管是原生持久化还是外部存储),会丢失所有的数据,然后需要重新注入缓存数据。

执行下面的命令可以冻结集群:

shell
control.sh --set-state INACTIVE [--yes]
shell
control.bat --set-state INACTIVE [--yes]

1.2.4.获取基线中注册的节点

执行下面的命令可以获得基线中注册的节点列表:

shell
control.sh --baseline
shell
control.bat --baseline

输出中包含了当前的拓扑版本,基线中节点的一致性ID列表,以及加入集群但是还没有添加到基线的节点列表。

Command [BASELINE] started
Arguments: --baseline
--------------------------------------------------------------------------------
Cluster state: active
Current topology version: 3

Current topology version: 3 (Coordinator: ConsistentId=dd3d3959-4fd6-4dc2-8199-bee213b34ff1, Order=1)

Baseline nodes:
    ConsistentId=7d79a1b5-cbbd-4ab5-9665-e8af0454f178, State=ONLINE, Order=2
    ConsistentId=dd3d3959-4fd6-4dc2-8199-bee213b34ff1, State=ONLINE, Order=1
--------------------------------------------------------------------------------
Number of baseline nodes: 2

Other nodes:
    ConsistentId=30e16660-49f8-4225-9122-c1b684723e97, Order=3
Number of other nodes: 1
Command [BASELINE] finished with code: 0
Control utility has completed execution at: 2019-12-24T16:53:08.392865
Execution time: 333 ms

1.2.5.往基线拓扑中添加节点

使用下面的命令可以往基线拓扑中添加节点。节点加入之后,会开启再平衡过程

shell
control.sh --baseline add consistentId1,consistentId2,... [--yes]
shell
control.bat --baseline add consistentId1,consistentId2,... [--yes]

1.2.6.从基线拓扑中删除节点

使用下面的命令可以从基线拓扑中删除节点。只有离线的节点才能从基线拓扑中删除,需要先停止该节点然后才能执行remove命令。这个操作会开启再平衡过程,会在基线拓扑的剩余节点中重新分布数据。

shell
control.sh --baseline remove consistentId1,consistentId2,... [--yes]
shell
control.bat --baseline remove consistentId1,consistentId2,... [--yes]

1.2.7.配置基线拓扑

可以通过提供节点的一致性ID列表,或者通过指定基线拓扑版本来配置基线拓扑。

要将一组节点配置为基线,可以使用下面的命令:

shell
control.sh --baseline set consistentId1,consistentId2,... [--yes]
shell
control.bat --baseline set consistentId1,consistentId2,... [--yes]

要恢复指定版本的基线,可以使用下面的命令:

shell
control.sh --baseline version topologyVersion [--yes]
shell
control.bat --baseline version topologyVersion [--yes]

1.2.8.启用基线拓扑自动调整

基线拓扑自动调整是指在拓扑稳定一段时间后自动更新基线拓扑。

对于纯内存集群,自动调整是默认启用的,并且超时设置为0。这意味着基线拓扑在服务端节点加入或离开集群后立即更改。对于开启持久化的集群,自动调整默认是警用的,使用以下命令可以开启:

shell
control.sh --baseline auto_adjust enable timeout 30000
shell
control.bat --baseline auto_adjust enable timeout 30000

超时时间以毫秒计,在上一次JOIN/LEFT/FAIL事件之后经过给定的毫秒数时,会将基线设置为当前拓扑。每个新的JOIN/LEFT/FAIL事件都会重新启动超时倒计时。

使用以下命令可以禁用基线自动调整:

shell
control.sh --baseline auto_adjust disable
shell
control.bat --baseline auto_adjust disable

1.3.事务管理

控制脚本可以拿到集群中正在执行的事务的信息,也可以取消某个事务。

下面的命令可以返回匹配过滤条件的事务列表(或者没有过滤条件返回所有的事务):

shell
control.sh --tx <transaction filter> --info
shell
control.bat --tx <transaction filter> --info

事务过滤器参数在下表列出:

参数描述
--xid XID事务ID
--min-duration SECONDS事务已执行的最小秒数
--min-size SIZE事务大小最小值
--label LABEL事务的标签,可以使用正则表达式
--servers--clients
--nodes nodeId1,nodeId2…​希望获得事务信息的节点一致性ID列表
--limit NUMBER将事务数限制为指定值
--order DURATIONSIZE

使用下面的命令可以取消事务:

shell
control.sh --tx <transaction filter> --kill
shell
control.bat --tx <transaction filter> --kill

要取消已运行超过100秒的事务,请执行以下命令:

shell
control.sh --tx --min-duration 100 --kill

1.4.事务竞争检测

contention命令可用于检测多个事务在相同键上竞争创建锁的情况,当有事务长期运行或者挂起时,该命令很有用。

示例:

shell
# Reports all keys that are point of contention for at least 5 transactions on all cluster nodes.
control.sh|bat --cache contention 5

# Reports all keys that are point of contention for at least 5 transactions on specific server node.
control.sh|bat --cache contention 5 f2ea-5f56-11e8-9c2d-fa7a

如果存在任何竞争激烈的键,该工具将转储大量信息,包括发生争用的键、事务和节点。

示例:

shell
[node=TcpDiscoveryNode [id=d9620450-eefa-4ab6-a821-644098f00001, addrs=[127.0.0.1], sockAddrs=[/127.0.0.1:47501], discPort=47501, order=2, intOrder=2, lastExchangeTime=1527169443913, loc=false, ver=2.5.0#20180518-sha1:02c9b2de, isClient=false]]

// No contention on node d9620450-eefa-4ab6-a821-644098f00001.

[node=TcpDiscoveryNode [id=03379796-df31-4dbd-80e5-09cef5000000, addrs=[127.0.0.1], sockAddrs=[/127.0.0.1:47500], discPort=47500, order=1, intOrder=1, lastExchangeTime=1527169443913, loc=false, ver=2.5.0#20180518-sha1:02c9b2de, isClient=false]]
    TxEntry [cacheId=1544803905, key=KeyCacheObjectImpl [part=0, val=0, hasValBytes=false], queue=10, op=CREATE, val=UserCacheObjectImpl [val=0, hasValBytes=false], tx=GridNearTxLocal[xid=e9754629361-00000000-0843-9f61-0000-000000000001, xidVersion=GridCacheVersion [topVer=138649441, order=1527169439646, nodeOrder=1], concurrency=PESSIMISTIC, isolation=REPEATABLE_READ, state=ACTIVE, invalidate=false, rollbackOnly=false, nodeId=03379796-df31-4dbd-80e5-09cef5000000, timeout=0, duration=1247], other=[]]
    TxEntry [cacheId=1544803905, key=KeyCacheObjectImpl [part=0, val=0, hasValBytes=false], queue=10, op=READ, val=null, tx=GridNearTxLocal[xid=8a754629361-00000000-0843-9f61-0000-000000000001, xidVersion=GridCacheVersion [topVer=138649441, order=1527169439656, nodeOrder=1], concurrency=PESSIMISTIC, isolation=REPEATABLE_READ, state=ACTIVE, invalidate=false, rollbackOnly=false, nodeId=03379796-df31-4dbd-80e5-09cef5000000, timeout=0, duration=1175], other=[]]
    TxEntry [cacheId=1544803905, key=KeyCacheObjectImpl [part=0, val=0, hasValBytes=false], queue=10, op=READ, val=null, tx=GridNearTxLocal[xid=6a754629361-00000000-0843-9f61-0000-000000000001, xidVersion=GridCacheVersion [topVer=138649441, order=1527169439654, nodeOrder=1], concurrency=PESSIMISTIC, isolation=REPEATABLE_READ, state=ACTIVE, invalidate=false, rollbackOnly=false, nodeId=03379796-df31-4dbd-80e5-09cef5000000, timeout=0, duration=1175], other=[]]
    TxEntry [cacheId=1544803905, key=KeyCacheObjectImpl [part=0, val=0, hasValBytes=false], queue=10, op=READ, val=null, tx=GridNearTxLocal[xid=7a754629361-00000000-0843-9f61-0000-000000000001, xidVersion=GridCacheVersion [topVer=138649441, order=1527169439655, nodeOrder=1], concurrency=PESSIMISTIC, isolation=REPEATABLE_READ, state=ACTIVE, invalidate=false, rollbackOnly=false, nodeId=03379796-df31-4dbd-80e5-09cef5000000, timeout=0, duration=1175], other=[]]
    TxEntry [cacheId=1544803905, key=KeyCacheObjectImpl [part=0, val=0, hasValBytes=false], queue=10, op=READ, val=null, tx=GridNearTxLocal[xid=4a754629361-00000000-0843-9f61-0000-000000000001, xidVersion=GridCacheVersion [topVer=138649441, order=1527169439652, nodeOrder=1], concurrency=PESSIMISTIC, isolation=REPEATABLE_READ, state=ACTIVE, invalidate=false, rollbackOnly=false, nodeId=03379796-df31-4dbd-80e5-09cef5000000, timeout=0, duration=1175], other=[]]

// Node 03379796-df31-4dbd-80e5-09cef5000000 is place for contention on key KeyCacheObjectImpl [part=0, val=0, hasValBytes=false].

1.5.缓存状态监控

控制脚本的另一个重要命令是--cache list,其用于缓存的监控。该命令可以提供已部署缓存的列表及其关联/分布参数,还有在缓存组内的分布,另外还有一个命令用于查看已有的原子序列。

shell
# Displays a list of all caches
control.sh|bat --cache list .

# Displays a list of caches whose names start with "account-".
control.sh|bat --cache list account-.*

# Displays info about cache group distribution for all caches.
control.sh|bat --cache list . --groups

# Displays info about cache group distribution for the caches whose names start with "account-".
control.sh|bat --cache list account-.* --groups

# Displays info about all atomic sequences.
control.sh|bat --cache list . --seq

# Displays info about the atomic sequnces whose names start with "counter-".
control.sh|bat --cache list counter-.* --seq

1.6.丢失分区重置

可以使用控制脚本重置某个缓存丢失的分区,具体请参见分区丢失策略

shell
control.sh --cache reset_lost_partitions cacheName1,cacheName2,...

1.7.一致性检查命令

control.sh|bat包括一组一致性检查命令,可用于验证内部数据的一致性。

首先,这些命令可用于调试和故障排除场景,尤其是在开发高峰期。

其次,如果怀疑查询(例如SQL查询等)返回的结果集不完整或错误,则这些命令可以验证数据中是否存在不一致。

最后,一致性检查命令可以用作常规集群运行状况检测的一部分。

下面看下更具体的使用场景:

1.7.1.验证分区校验和

idle_verify命令将主分区的哈希与备份分区的哈希进行比较,并报告差异。差异可能是更新操作期间节点故障或非正常关闭导致。如果检测到任何不一致之处,建议删除不正确的分区。

shell
# Checks partitions of all caches that their partitions actually contain same data.
control.sh|bat --cache idle_verify

# Checks partitions of specific caches that their partitions actually contain same data.
control.sh|bat --cache idle_verify cache1,cache2,cache3

如果有分区出现偏离,则会输出冲突的分区列表,如下所示:

idle_verify check has finished, found 2 conflict partitions.

Conflict partition: PartitionKey [grpId=1544803905, grpName=default, partId=5]
Partition instances: [PartitionHashRecord [isPrimary=true, partHash=97506054, updateCntr=3, size=3, consistentId=bltTest1], PartitionHashRecord [isPrimary=false, partHash=65957380, updateCntr=3, size=2, consistentId=bltTest0]]
Conflict partition: PartitionKey [grpId=1544803905, grpName=default, partId=6]
Partition instances: [PartitionHashRecord [isPrimary=true, partHash=97595430, updateCntr=3, size=3, consistentId=bltTest1], PartitionHashRecord [isPrimary=false, partHash=66016964, updateCntr=3, size=2, consistentId=bltTest0]]

idle_verify检查期间集群应处于空闲状态

idle_verify计算哈希时,所有的更新应停止,否则可能显示错误的结果。如果正在不停地更新,比较一个分布式系统的大规模数据集是不可能的。

1.7.2.验证SQL索引一致性

validate_indexes命令将验证所有集群节点上给定缓存的索引。

验证过程将检查以下内容:

  1. 二级SQL索引可以访问主索引引用的所有键-值条目;
  2. 主索引引用的所有键-值条目都必须是可访问的,主索引的引用不应指向空值;
  3. 主索引可以访问二级SQL索引引用的所有键-值条目。
shell
# Checks indexes of all caches on all cluster nodes.
control.sh|bat --cache validate_indexes

# Checks indexes of specific caches on all cluster nodes.
control.sh|bat --cache validate_indexes cache1,cache2

# Checks indexes of specific caches on node with given node ID.
control.sh|bat --cache validate_indexes cache1,cache2 f2ea-5f56-11e8-9c2d-fa7a

如果索引引用了不存在的条目(或部分条目未被索引),会输出错误,如下所示:

PartitionKey [grpId=-528791027, grpName=persons-cache-vi, partId=0] ValidateIndexesPartitionResult [updateCntr=313, size=313, isPrimary=true, consistentId=bltTest0]
IndexValidationIssue [key=0, cacheName=persons-cache-vi, idxName=_key_PK], class org.apache.ignite.IgniteCheckedException: Key is present in CacheDataTree, but can't be found in SQL index.
IndexValidationIssue [key=0, cacheName=persons-cache-vi, idxName=PERSON_ORGID_ASC_IDX], class org.apache.ignite.IgniteCheckedException: Key is present in CacheDataTree, but can't be found in SQL index.
validate_indexes has finished with errors (listed above).

validate_indexes检查期间集群应处于空闲状态

idle_verify一样,索引验证工具仅在停止更新后才能正常工作。否则检查程序线程与更新条目/索引的线程之间可能会出现竞争,这可能导致错误的检测结果。

1.7.3.检查SQL索引内联值

运行中的Ignite集群在各个节点上可能有不同的SQL索引内联值,例如各个节点上IGNITE_MAX_INDEX_PAYLOAD_SIZE的属性值不同等。索引内联值之间的差异可能导致性能下降。

check_index_inline_sizes命令会验证所有节点上给定缓存的索引内联值。在节点加入时会始终检查二级索引的内联值,如有不同,则会在日志中输出警告信息。

使用以下命令可以检查各个节点上二级索引内联值是否相同:

shell
control.sh|bat --cache check_index_inline_sizes

如果内联值不同,控制台输出如下所示:

Control utility [ver. 2.10.0]
2021 Copyright(C) Apache Software Foundation
User: test
Time: 2021-04-27T16:13:21.213
Command [CACHE] started
Arguments: --cache check_index_inline_sizes --yes

Found 4 secondary indexes.
3 index(es) have different effective inline size on nodes. It can lead to
performance degradation in SQL queries.
Index(es):
  Full index name: PUBLIC#TEST_TABLE#L_IDX nodes:
[ca1d23ae-89d4-4e8d-ae12-6c68f3900000] inline size: 1, nodes:
[8327bbd1-df08-4b97-8721-de95e363e745] inline size: 2
  Full index name: PUBLIC#TEST_TABLE#S1_IDX nodes:
[ca1d23ae-89d4-4e8d-ae12-6c68f3900000] inline size: 1, nodes:
[8327bbd1-df08-4b97-8721-de95e363e745] inline size: 2
  Full index name: PUBLIC#TEST_TABLE#I_IDX nodes:
[ca1d23ae-89d4-4e8d-ae12-6c68f3900000] inline size: 1, nodes:
[8327bbd1-df08-4b97-8721-de95e363e745] inline size: 2

1.8.追踪配置

通过--tracing-configuration命令可以启用/禁用某个API的追踪采样,具体请参见追踪章节的介绍。

使用该命令之前,需要开启控制脚本的试验性功能:

shell
export IGNITE_ENABLE_EXPERIMENTAL_COMMAND=true

执行下面的命令可以查看当前的追踪配置:

shell
control.sh --tracing-configuration

要启用某个API的追踪采样:

shell
control.sh --tracing-configuration set --scope <scope> --sampling-rate <rate> --label <label>

参数:

参数描述
--scope要追踪的API:
1.DISCOVERY:发现事件;
2.EXCHANGE:交换事件;
3.COMMUNICATION:通信事件;
4.TX:事务
--sampling-rate概率采样率,介于0.01.0之间的数字(包含),0表示不采样(默认),1表示始终采样。例如0.5表示每条追踪都以50%的概率采样
--label仅适用于TXAPI范围。该参数定义具有给定标签的事务的采样率。当指定--label参数时,则Ignite将追踪指定标签的事务。可以为不同的标签配置不同的采样率。没有标签的事务追踪将以默认采样率采样,TX范围的默认采样率可以通过不带--label参数的命令进行配置

示例:

  • 追踪所有的发现事件:

    shell
    control.sh --tracing-configuration set --scope DISCOVER --sampling-rate 1
  • 追踪所有的事务:

    shell
    control.sh --tracing-configuration set --scope TX --sampling-rate 1
  • 配置标签为report的事务的采样率为50%:

    shell
    control.sh --tracing-configuration set --scope TX --sampling-rate 0.5

1.9.集群ID和标签

集群ID可以唯一标识一个集群,其是在集群第一次启动时自动生成的,具体请参见集群ID和标签章节的内容。

使用--state命令可查看当前集群的ID:

shell
control.sh --state
shell
control.bat --state

然后检查输出:

Command [STATE] started
Arguments: --state
--------------------------------------------------------------------------------
Cluster  ID: bf9764ea-995e-4ea9-b35d-8c6d078b0234
Cluster tag: competent_black
--------------------------------------------------------------------------------
Cluster is active
Command [STATE] finished with code: 0

集群标签是可以分配给集群的用户友好名称,使用以下命令可以修改标签(标签不得超过280个字符):

shell
control.sh --change-tag <new-tag>
shell
control.bat --change-tag <new-tag>

1.10.指标命令

metrics命令会输出一个指标或者由参数列表提供的指标注册表的值。使用--node-id参数,可以拿到某个节点的指标,如果未指定该参数,Ignite会随机选择一个节点。

shell
control.sh --metric sys
shell
control.bat --metric sys

指标输出示例:

control.sh --metric sysCurrentThreadCpuTime
Command [METRIC] started
Arguments: --metric sys
--------------------------------------------------------------------------------
metric                          value
sys.CurrentThreadCpuTime        17270000
Command [METRIC] finished with code: 0

指标注册表输出示例:

control.sh --metric io.dataregion.default
Command [METRIC] started
Arguments: --metric sys
--------------------------------------------------------------------------------
metric                          value
io.dataregion.default.TotalAllocatedSize          0
io.dataregion.default.LargeEntriesPagesCount      0
io.dataregion.default.PagesReplaced               0
io.dataregion.default.PhysicalMemorySize          0
io.dataregion.default.CheckpointBufferSize        0
io.dataregion.default.PagesReplaceRate            0
io.dataregion.default.InitialSize                 268435456
io.dataregion.default.PagesRead                   0
io.dataregion.default.AllocationRate              0
io.dataregion.default.OffHeapSize                 0
io.dataregion.default.UsedCheckpointBufferSize    0
io.dataregion.default.MaxSize                     6871947673
io.dataregion.default.OffheapUsedSize             0
io.dataregion.default.EmptyDataPages              0
io.dataregion.default.PagesFillFactor             0.0
io.dataregion.default.DirtyPages                  0
io.dataregion.default.TotalThrottlingTime         0
io.dataregion.default.EvictionRate                0
io.dataregion.default.PagesWritten                0
io.dataregion.default.TotalAllocatedPages         0
io.dataregion.default.PagesReplaceAge             0
io.dataregion.default.PhysicalMemoryPages         0
Command [METRIC] finished with code: 0

1.11.索引管理

下面的命令可以获得索引的特定信息,然后触发索引的重建过程。

要获取所有匹配过滤规则的索引列表,可使用下面的命令:

shell
control.sh --cache indexes_list [--node-id nodeId] [--group-name grpRegExp] [--cache-name cacheRegExp] [--index-name idxNameRegExp]
shell
control.bat --cache indexes_list [--node-id nodeId] [--group-name grpRegExp] [--cache-name cacheRegExp] [--index-name idxNameRegExp]

参数:

参数描述
--node-id nodeId作业执行的节点ID,如果ID未指定,集群会选择一个节点
--group-name regExp启用按缓存组名筛选的正则表达式
--cache-name regExp启用按缓存名筛选的正则表达式
--index-name regExp启用按索引名筛选的正则表达式

要获取正在重建索引的所有缓存的列表,可使用以下命令:

shell
control.sh --cache indexes_rebuild_status [--node-id nodeId]
shell
control.bat --cache indexes_rebuild_status [--node-id nodeId]

要触发指定缓存或缓存组的所有索引的重建过程,可使用以下命令:

shell
control.sh --cache indexes_force_rebuild --node-id nodeId --cache-name cacheName1,...cacheNameN|--group-name groupName1,...groupNameN
shell
control.bat --cache indexes_force_rebuild --node-id nodeId --cache-name cacheName1,...cacheNameN|--group-name groupName1,...groupNameN
参数描述
--node-id重建索引的节点ID
--cache-names待重建索引的缓存名列表,逗号分割
--group-names待重建索引的缓存组名列表,逗号分割

1.12.系统视图命令

该命令会输出由参数列表指定的系统视图的内容,使用--node-id参数,可以拿到某个节点的指标,如果未指定该参数,Ignite会随机选择一个节点。

shell
control.sh --system-view views
shell
control.bat --system-view views

输出示例:

control.sh --system-view nodes
Command [SYSTEM-VIEW] started
Arguments: --system-view nodes
--------------------------------------------------------------------------------
nodeId                                  consistentId                                         version                          isClient    isDaemon    nodeOrder    addresses                                          hostnames          isLocal
a8a28869-cac6-4b17-946a-6f7f547b9f62    0:0:0:0:0:0:0:1%lo0,127.0.0.1,192.168.31.45:47500    2.10.0#20201230-sha1:00000000    false       false               1    [0:0:0:0:0:0:0:1%lo0, 127.0.0.1, 192.168.31.45]    [192.168.31.45]    true
d580433d-c621-45ff-a558-b4df82d09613    0:0:0:0:0:0:0:1%lo0,127.0.0.1,192.168.31.45:47501    2.10.0#20201230-sha1:00000000    false       false               2    [0:0:0:0:0:0:0:1%lo0, 127.0.0.1, 192.168.31.45]    [192.168.31.45]    false
Command [SYSTEM-VIEW] finished with code: 0
control.sh --system-view views
Command [SYSTEM-VIEW] started
Arguments: --system-view views
--------------------------------------------------------------------------------
name                           schema    description
NODES                          SYS       Cluster nodes
SQL_QUERIES_HISTORY            SYS       SQL queries history.
INDEXES                        SYS       SQL indexes
BASELINE_NODES                 SYS       Baseline topology nodes
STRIPED_THREADPOOL_QUEUE       SYS       Striped thread pool task queue
LOCAL_CACHE_GROUPS_IO          SYS       Local node IO statistics for cache groups
SCAN_QUERIES                   SYS       Scan queries
CLIENT_CONNECTIONS             SYS       Client connections
PARTITION_STATES               SYS       Distribution of cache group partitions across cluster nodes
VIEW_COLUMNS                   SYS       SQL view columns
SQL_QUERIES                    SYS       Running SQL queries.
CACHE_GROUP_PAGE_LISTS         SYS       Cache group page lists
METRICS                        SYS       Ignite metrics
CONTINUOUS_QUERIES             SYS       Continuous queries
TABLE_COLUMNS                  SYS       SQL table columns
TABLES                         SYS       SQL tables
DISTRIBUTED_METASTORAGE        SYS       Distributed metastorage data
SERVICES                       SYS       Services
DATASTREAM_THREADPOOL_QUEUE    SYS       Datastream thread pool task queue
NODE_METRICS                   SYS       Node metrics
BINARY_METADATA                SYS       Binary metadata
JOBS                           SYS       Running compute jobs, part of compute task started on remote host.
SCHEMAS                        SYS       SQL schemas
CACHE_GROUPS                   SYS       Cache groups
VIEWS                          SYS       SQL views
DATA_REGION_PAGE_LISTS         SYS       Data region page lists
NODE_ATTRIBUTES                SYS       Node attributes
TRANSACTIONS                   SYS       Running transactions
CACHES                         SYS       Caches
TASKS                          SYS       Running compute tasks
Command [SYSTEM-VIEW] finished with code: 0

2.Visor终端

2.1.摘要

Visor命令行接口(CMD)是一个用于Ignite集群监控的命令行工具,它提供有关集群节点、缓存和计算任务的基本统计信息,还可以通过启动或停止节点来管理集群的大小。

2.2.使用

Ignite通过IGNITE_HOME/bin/ignitevisorcmd.{sh|bat}脚本来启动Visor终端,要将Visor接入集群,需要使用open命令。

Visor支持下面的命令,要获得某个命令完整的信息,可以输入help "cmd"或者? "cmd"

命令别名描述
ack所有远程节点的Ack参数
alert提示用户定义的事件
cache输出缓存的统计数据,清理缓存,从缓存输出所有条目的列表
close将visor从网格断开
config输出节点的配置
deploy将文件或者文件夹复制到远程主机
disco输出拓扑变更日志
events从一个节点输出事件
gc在远程节点运行GC
help?输出Visor控制台帮助
kill杀掉或者重启节点
log启动或者停止网格范围的事件日志
mclear清除Visor控制台内存变量
mget获取Visor控制台内存变量
mlist输出Visor控制台内存变量
node输出节点统计数据
open将Visor接入网格
pingping节点
quit退出Visor控制台
start在远程主机启动或者重启节点
status!输出Visor控制台状态
tasks输出任务执行统计数据
top输出当前的拓扑
vvm打开节点的VisualVM

3.SQLLine

3.1.概述

Ignite提供了一个SQLLine工具,它是一个接入关系数据库然后执行SQL命令的基于命令行的工具,本章节会描述如何用SQLLine接入Ignite集群,以及Ignite支持的各种SQLLine命令。

3.2.接入集群

IGNITE_HOME/bin目录中,执行sqlline.sh -u jdbc:ignite:thin:[host]命令就可以使用SQLLine接入集群,注意要将[host]替换为实际的值,比如:

bash
./sqlline.sh --verbose=true -u jdbc:ignite:thin://127.0.0.1/
shell
sqlline.bat --verbose=true -u jdbc:ignite:thin://127.0.0.1/

输入./sqlline.sh -h或者./sqlline.sh --help可以看到可用的各种选项。

3.2.1.认证

如果集群打开了认证,那么在IGNITE_HOME/bin目录中,通过运行jdbc:ignite:thin://[address]:[port];user=[username];password=[password]命令SQLLine才可以接入集群。注意要将[address][port][username]和`[password]替换为实际值,比如:

bash
./sqlline.sh --verbose=true -u "jdbc:ignite:thin://127.0.0.1:10800;user=ignite;password=ignite"
shell
sqlline.bat --verbose=true -u "jdbc:ignite:thin://127.0.0.1:10800;user=ignite;password=ignite"

如果未开启认证,需要忽略[username][password]

通过bash接入时JDBC URL要加引号

当在bash环境中接入时连接的URL一定要加" ",比如:"jdbc:ignite:thin://[address]:[port];user=[username];password=[password]"

3.3.命令

下面是Ignite支持的SQLLine命令列表:

命令描述
!all在当前的所有连接中执行指定的SQL
!batch开始执行一批SQL语句
!brief启动简易输出模式
!closeall关闭所有目前已打开的连接
!columns显示表中的列
!connect接入数据库
!dbinfo列出当前连接的元数据信息
!dropall删除数据库中的所有表
!go转换到另一个活动连接
!help显示帮助信息
!history显示命令历史
!indexes显示表的索引
!list显示所有的活动连接
!manual显示SQLLine手册
!metadata调用任意的元数据命令
!nickname为连接命名(更新命令提示)
!outputformat改变显示SQL结果的方法
!primarykeys显示表的主键列
!properties使用指定的属性文件接入数据库
!quit退出SQLLine
!reconnect重新连接当前的数据库
!record开始记录SQL命令的所有输出
!run执行一个命令脚本
!script将已执行的命令保存到一个文件
!sql在数据库上执行一个SQL
!tables列出数据库中的所有表
!verbose启动详细输出模式

上面的列表可能不完整,还可能添加支持其它的SQLLine命令。

3.4.示例

接入集群后,就可以执行SQL语句和SQLLine命令,比如:

sql
0: jdbc:ignite:thin://127.0.0.1/> CREATE TABLE City (id LONG PRIMARY KEY, name VARCHAR) WITH "template=replicated";
No rows affected (0.301 seconds)

0: jdbc:ignite:thin://127.0.0.1/> CREATE TABLE Person (id LONG, name VARCHAR, city_id LONG, PRIMARY KEY (id, city_id))WITH "backups=1, affinityKey=city_id";
No rows affected (0.078 seconds)

0: jdbc:ignite:thin://127.0.0.1/> !tables
+-----------+--------------+--------------+-------------+-------------+
| TABLE_CAT | TABLE_SCHEM  |  TABLE_NAME  | TABLE_TYPE  | REMARKS     |
+-----------+--------------+--------------+-------------+-------------+
|           | PUBLIC       | CITY         | TABLE       |             |
|           | PUBLIC       | PERSON       | TABLE       |             |
+-----------+--------------+--------------+-------------+-------------+
sql
0: jdbc:ignite:thin://127.0.0.1/> CREATE INDEX idx_city_name ON City (name);
No rows affected (0.039 seconds)

0: jdbc:ignite:thin://127.0.0.1/> CREATE INDEX idx_person_name ON Person (name);
No rows affected (0.013 seconds)

0: jdbc:ignite:thin://127.0.0.1/> !indexes
+-----------+--------------+--------------+-------------+-----------------+
| TABLE_CAT | TABLE_SCHEM  |  TABLE_NAME  | NON_UNIQUE  | INDEX_QUALIFIER |
+-----------+--------------+--------------+-------------+-----------------+
|           | PUBLIC       | CITY         | true        |                 |
|           | PUBLIC       | PERSON       | true        |                 |
+-----------+--------------+--------------+-------------+-----------------+

4.Tableau

4.1.概述

Tableau是一个聚焦于商务智能领域的交互式数据可视化工具。它使用ODBC API接入各种数据库和数据平台,然后分析里面的数据。

Ignite有自己的ODBC实现,这样就使从Tableau端接入Ignite成为可能,并且可以分析存储于分布式Ignite集群中的数据。

4.2.安装和配置

要从Tableau接入Ignite,需要进行如下操作:

  • 下载并且安转Tableau桌面版,可以在其产品主页查看官方文档;
  • 在Windows或者基于Unix的操作系统上安装Ignite的ODBC驱动;
  • 最后,通过DSN配置驱动,Tableau会通过DSN配置接入;
  • ODBC驱动通过一个叫做ODBC processor的协议与Ignite集群通信,一定要确保这个组件在集群端已经启用。

上述步骤完成后,就可以接入集群然后分析数据了。

4.3.接入集群

  1. 启动Tableau应用,然后在ConnectTo a ServerMore...窗口中找到Other Databases (ODBC)配置;
  2. 点击Edit connection链接;
  3. 配置之前设定的DSN属性值,下面的示例中为:LocalApacheIgniteDSN,做完之后,点击Connect按钮;
  4. Tableau会试图验证这个连接,如果验证通过,Sign In按钮以及其它的与连接有关的字段就会变为可用状态,点击Sign In就会完成连接过程;

4.4.数据查询和分析

成功建立Ignite和Tableau之间的连接之后,就可以通过Tableau支持的各种方式对数据进行查询和分析,通过官方文档可以了解更多的细节。

5.Informatica

5.1.概述

Informatica是一个云数据管理和集成工具,可以通过ODBC连接将Informatica接入Ignite。

5.2.从Informatica PowerCenter Designer接入

在PowerCenter Designer中,必须安装32位的Ignite ODBC驱动才能接入Ignite,可以按照下面链接的内容安装ODBC驱动并且创建DSN:

然后:

  1. 如果要从Ignite中导入表,在Sources或者Targets菜单中选择Import from Database...
  2. 通过选择Apache Ignite DSN作为ODBC数据源接入集群。

5.3.在Informatica服务节点上安装Ignite ODBC

在Linux上构建在Linux上安装文档中,描述了如何在Ignite服务端节点上安装Ignite ODBC。

Informatica会使用$ODBCINI$ODBCISTINI环境变量指定的配置文件(为ODBC配置UNIX环境变量)。配置Ignite ODBC驱动和创建新的DSN,如下所示:

ini
[ApacheIgnite]
Driver      = /usr/local/lib/libignite-odbc.so
Description = Apache Ignite ODBC
Address = 192.168.0.105
User = ignite
Password = ignite
Schema = PUBLIC
ini
[ApacheIgnite]
Driver  = /usr/local/lib/libignite-odbc.so

要验证ODBC连接,可以使用Informatica的ssgodbc.linux64工具,如下所示:

bash
<INFORMATICA_HOME>/tools/debugtools/ssgodbc/linux64/ssgodbc.linux64 -d ApacheIgnite -u ignite -p ignite -v

如果unixODBC或者Ignite的ODBC库没有安装在默认的目录中-/usr/local/lib,则需要将其加入LD_LIBRARY_PATH然后再次测试,如下:

bash
UNIXODBC_LIB=/opt/unixodbc/lib/
IGNITE_ODBC_LIB=/opt/igniteodbc/lib
LD_LIBRARY_PATH=<UNIXODBC_LIB>:<IGNITE_ODBC_LIB>

<INFORMATICA_HOME>/tools/debugtools/ssgodbc/linux64/ssgodbc.linux64 -d ApacheIgnite -u ignite -p ignite -v

5.4.配置相关的连接

选择Connections>Relational...可以显示Relational Connection Browser

选中ODBC类型然后创建一个新的连接。

5.5.在Suse 11.4中安装Ignite ODBC

下面是在Suse 11.4环境中构建Ignite和Ignite ODBC驱动的步骤。

  1. 添加仓库 - ossnon-ossopenSUSE_Factorydevel_gcc
bash
sudo zypper ar http://download.opensuse.org/distribution/11.4/repo/oss/ oss
sudo zypper ar http://download.opensuse.org/distribution/11.4/repo/non-oss/ non-oss
sudo zypper ar https://download.opensuse.org/repositories/devel:/tools:/building/openSUSE_Factory/ openSUSE_Factory
sudo zypper ar http://download.opensuse.org/repositories/devel:/gcc/SLE-11/  devel_gcc
  1. 安装automakeautoconf
bash
sudo zypper install autoconf automake
  1. 安装libtool
bash
sudo zypper install libtool-2.4.6-7.1.x86_64

Loading repository data...
Reading installed packages...
Resolving package dependencies...

Problem: nothing provides m4 >= 1.4.16 needed by libtool-2.4.6-7.1.x86_64
 Solution 1: do not install libtool-2.4.6-7.1.x86_64
 Solution 2: break libtool-2.4.6-7.1.x86_64 by ignoring some of its dependencies

Choose from above solutions by number or cancel [1/2/c] (c): 2
  1. 安装OpenSSL
bash
sudo zypper install openssl openssl-devel

Loading repository data...
Reading installed packages...
'openssl-devel' not found in package names. Trying capabilities.
Resolving package dependencies...

Problem: libopenssl-devel-1.0.0c-17.1.x86_64 requires zlib-devel, but this requirement cannot be provided
  uninstallable providers: zlib-devel-1.2.5-8.1.i586[oss]
                   zlib-devel-1.2.5-8.1.x86_64[oss]
 Solution 1: downgrade of zlib-1.2.7-0.12.3.x86_64 to zlib-1.2.5-8.1.x86_64
 Solution 2: do not ask to install a solvable providing openssl-devel
 Solution 3: do not ask to install a solvable providing openssl-devel
 Solution 4: break libopenssl-devel-1.0.0c-17.1.x86_64 by ignoring some of its dependencies

Choose from above solutions by number or cancel [1/2/3/4/c] (c): 1
  1. 安装GCC编译器:
bash
sudo zypper install gcc5 gcc5-c++

Loading repository data...
Reading installed packages...
Resolving package dependencies...
2 Problems:
Problem: gcc5-5.5.0+r253576-1.1.x86_64 requires libgcc_s1 >= 5.5.0+r253576-1.1, but this requirement cannot be provided
Problem: gcc5-c++-5.5.0+r253576-1.1.x86_64 requires gcc5 = 5.5.0+r253576-1.1, but this requirement cannot be provided

Problem: gcc5-5.5.0+r253576-1.1.x86_64 requires libgcc_s1 >= 5.5.0+r253576-1.1, but this requirement cannot be provided
  uninstallable providers: libgcc_s1-5.5.0+r253576-1.1.i586[devel_gcc]
                   libgcc_s1-5.5.0+r253576-1.1.x86_64[devel_gcc]
                   libgcc_s1-6.4.1+r251631-80.1.i586[devel_gcc]
                   libgcc_s1-6.4.1+r251631-80.1.x86_64[devel_gcc]
                   libgcc_s1-7.3.1+r258812-103.1.i586[devel_gcc]
                   libgcc_s1-7.3.1+r258812-103.1.x86_64[devel_gcc]
                   libgcc_s1-8.1.1+r260570-32.1.i586[devel_gcc]
                   libgcc_s1-8.1.1+r260570-32.1.x86_64[devel_gcc]
 Solution 1: install libgcc_s1-8.1.1+r260570-32.1.x86_64 (with vendor change)
  SUSE LINUX Products GmbH, Nuernberg, Germany  -->  obs://build.opensuse.org/devel:gcc
 Solution 2: do not install gcc5-5.5.0+r253576-1.1.x86_64
 Solution 3: do not install gcc5-5.5.0+r253576-1.1.x86_64
 Solution 4: break gcc5-5.5.0+r253576-1.1.x86_64 by ignoring some of its dependencies

Choose from above solutions by number or skip, retry or cancel [1/2/3/4/s/r/c] (c): 1

Problem: gcc5-c++-5.5.0+r253576-1.1.x86_64 requires gcc5 = 5.5.0+r253576-1.1, but this requirement cannot be provided
  uninstallable providers: gcc5-5.5.0+r253576-1.1.i586[devel_gcc]
                   gcc5-5.5.0+r253576-1.1.x86_64[devel_gcc]
 Solution 1: install libgomp1-8.1.1+r260570-32.1.x86_64 (with vendor change)
  SUSE LINUX Products GmbH, Nuernberg, Germany  -->  obs://build.opensuse.org/devel:gcc
 Solution 2: do not install gcc5-c++-5.5.0+r253576-1.1.x86_64
 Solution 3: do not install gcc5-c++-5.5.0+r253576-1.1.x86_64
 Solution 4: break gcc5-c++-5.5.0+r253576-1.1.x86_64 by ignoring some of its dependencies

Choose from above solutions by number or skip, retry or cancel [1/2/3/4/s/r/c] (c): 1
Resolving dependencies...
Resolving package dependencies...

Problem: gcc5-c++-5.5.0+r253576-1.1.x86_64 requires libstdc++6-devel-gcc5 = 5.5.0+r253576-1.1, but this requirement cannot be provided
  uninstallable providers: libstdc++6-devel-gcc5-5.5.0+r253576-1.1.i586[devel_gcc]
                   libstdc++6-devel-gcc5-5.5.0+r253576-1.1.x86_64[devel_gcc]
 Solution 1: install libstdc++6-8.1.1+r260570-32.1.x86_64 (with vendor change)
  SUSE LINUX Products GmbH, Nuernberg, Germany  -->  obs://build.opensuse.org/devel:gcc
 Solution 2: do not install gcc5-c++-5.5.0+r253576-1.1.x86_64
 Solution 3: do not install gcc5-c++-5.5.0+r253576-1.1.x86_64
 Solution 4: break gcc5-c++-5.5.0+r253576-1.1.x86_64 by ignoring some of its dependencies

Choose from above solutions by number or cancel [1/2/3/4/c] (c): 1
  1. 创建编译器执行文件的符号链接:
bash
sudo rm /usr/bin/gcc
sudo rm /usr/bin/g++

sudo ln -s /usr/bin/g++-5 /usr/bin/g++
sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc
  1. 通过源码安装unixODBC:从http://www.unixodbc.org/下载并安装最新的unixODBC(2.3.6或更新的版本);
  2. 检查指定版本的所有依赖库和工具都已经成功安装:
shell
1. libtool --version
libtool (GNU libtool) 2.4.6
2. m4 --version
m4 (GNU M4) 1.4.12
3. autoconf --version
autoconf (GNU Autoconf) 2.69
4. automake --version
automake (GNU automake) 1.16.1
5. openssl version
OpenSSL 1.0.0c 2 Dec 2010
6. g++ --version
g++ (SUSE Linux) 5.5.0 20171010 [gcc-5-branch revision 253640]
7. JDK 1.8
  1. 检查JAVA_HOME环境变量是否配置,然后执行下面的命令:
bash
cd $IGNITE_HOME/platforms/cpp
export LDFLAGS=-lrt

libtoolize && aclocal && autoheader && automake --add-missing && autoreconf
./configure --enable-odbc
make
sudo make install
  1. 成功之后,重启系统;
  2. 安装ODBC驱动:
bash
sudo odbcinst -i -d -f $IGNITE_HOME/platforms/cpp/odbc/install/ignite-odbc-install.ini

6.Pentaho

6.1.概述

Pentaho是一个全面的平台,它可以非常容易地对数据进行抽取、转换、可视化和分析。Pentaho数据集成采用Java数据库连接(JDBC)API接入数据库。

Ignite有自己的JDBC驱动,这样就使得通过Pentaho平台接入Ignite成为可能,然后就可以分析分布式Ignite集群中的数据了。

6.2.安装和配置

  • 下载并安装Pentaho平台,具体可以参考官方的Pentaho文档;
  • 安装完成之后,需要使用相关的工具安装Ignite的JDBC驱动,怎么做呢,下载Ignite然后找到{apache-ignite}/libs/ignite-core-{version}.jar,然后将其复制到{pentaho}/jdbc-distribution目录;
  • 打开一个命令行工具,切换到{pentaho}/jdbc-distribution目录然后执行脚本:./distribute-files.sh ignite-core-{version}.jar

6.3.JDBC驱动配置

下一步是配置JDBC驱动然后接入集群,下面做的都是必要的,JDBC Thin模式驱动有更多的细节信息。

  • 打开命令行工具,切换到{pentaho}/design-tools/data-integration目录,然后使用./spoon.sh脚本启动Pentaho;
  • 出现下面的界面之后,点击File菜单然后创建一个新的转换:New->Transformation

  • 在Pentaho的界面中,填入下面的参数就可以创建一个新的数据库连接:
Pentaho属性名
Connection Name比如IgniteConnection这样的自定义名字
Connection Type选择Generic database选项
Access选择Native (JDBC)
Custom Connection URLjdbc:ignite:thin://localhost:10800,其中端口和地址可以根据实际进行调整
Custom Driver Class Nameorg.apache.ignite.IgniteJdbcThinDriver
  • 点击Test按钮,对连接进行测试

6.4.数据的查询和分析

Ignite和Pentaho之间建立连接之后,就可以通过Pentaho支持的各种方式对数据进行查询、转换和分析了,更多的细节,可以查看Pentaho的官方文档。

18624049226