# 工具
# 1.控制脚本
Ignite提供了一个命令行脚本control.sh|bat
,可以用它来对集群进行监控和管理,该脚本位于安装目录的/bin/
文件夹。
控制脚本的语法如下:
# 1.1.接入集群
如果执行脚本时没有连接参数,控制脚本会尝试连接运行在本机的节点(localhost:11211
),如果希望接入运行在远程主机上的节点,需要指定连接参数:
参数 | 描述 | 默认值 |
---|---|---|
--host HOST_OR_IP | 节点的主机名或者IP地址 | localhost |
--port PORT | 连接端口 | 11211 |
--user USER | 用户名 | |
--password PASSWORD | 密码 | |
--ping-interval PING_INTERVAL | ping操作间隔 | 5000 |
--ping-timeout PING_TIMEOUT | ping操作响应超时 | 30000 |
--ssl-protocol PROTOCOL1, PROTOCOL2… | 接入集群时尝试的SSL协议列表,支持的协议在这里。 | TLS |
--ssl-cipher-suites CIPHER1,CIPHER2… | SSL密码列表,支持的密码在这里。 | |
--ssl-key-algorithm ALG | SSL密钥算法 | 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 | 信任库密码 | |
--ssl-factory SSL_FACTORY_PATH | 自定义的SSL工厂Spring配置文件路径 |
# 1.2.激活、冻结和拓扑管理
可以使用控制脚本来激活/冻结集群,以及管理基线拓扑。
# 1.2.1.获取集群状态
集群可以有3个状态:激活、只读和非激活,具体可以参见集群状态章节的介绍。
执行下面的命令,可以获得集群的状态:
# 1.2.2.激活集群
激活是将当前可用的服务端节点集配置为基线拓扑,只有使用原生持久化时才需要激活。
使用下面的命令可以激活集群。
# 1.2.3.冻结集群
警告
冻结会在所有集群节点上释放已分配的所有内存资源,包括应用的数据,并禁用公开的集群API。如果有未持久化(原生持久化或外部存储)的缓存,则将丢失数据,并且必须重新加载这些缓存。非持久化的系统缓存也会被清理。
执行下面的命令可以冻结集群:
# 1.2.4.获取基线中注册的节点
执行下面的命令可以获得基线中注册的节点列表:
输出中包含了当前的拓扑版本,基线中节点的一致性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.往基线拓扑中添加节点
使用下面的命令可以往基线拓扑中添加节点。节点加入之后,会开启再平衡过程。
# 1.2.6.从基线拓扑中删除节点
使用下面的命令可以从基线拓扑中删除节点。只有离线的节点才能从基线拓扑中删除,需要先停止该节点然后才能执行remove
命令。这个操作会开启再平衡过程,会在基线拓扑的剩余节点中重新分布数据。
# 1.2.7.配置基线拓扑
可以通过提供节点的一致性ID列表,或者通过指定基线拓扑版本来配置基线拓扑。
要将一组节点配置为基线,可以使用下面的命令:
要恢复指定版本的基线,可以使用下面的命令:
# 1.2.8.启用基线拓扑自动调整
基线拓扑自动调整是指在拓扑稳定一段时间后自动更新基线拓扑。
对于纯内存集群,自动调整是默认启用的,并且超时设置为0。这意味着基线拓扑在服务端节点加入或离开集群后立即更改。对于开启持久化的集群,自动调整默认是警用的,使用以下命令可以开启:
超时时间以毫秒计,在上一次JOIN/LEFT/FAIL事件之后经过给定的毫秒数时,会将基线设置为当前拓扑。每个新的JOIN/LEFT/FAIL事件都会重新启动超时倒计时。
使用以下命令可以禁用基线自动调整:
# 1.3.事务管理
控制脚本可以拿到集群中正在执行的事务的信息,也可以取消某个事务。
下面的命令可以返回匹配过滤条件的事务列表(或者没有过滤条件返回所有的事务):
事务过滤器参数在下表列出:
参数 | 描述 |
---|---|
--xid XID | 事务ID |
--min-duration SECONDS | 事务已执行的最小秒数 |
--min-size SIZE | 事务大小最小值 |
--label LABEL | 事务的标签,可以使用正则表达式 |
--servers | --clients |
--nodes nodeId1,nodeId2… | 希望获得事务信息的节点一致性ID列表 |
--limit NUMBER | 将事务数限制为指定值 |
--order DURATION | SIZE |
使用下面的命令可以取消事务:
要取消已运行超过100秒的事务,请执行以下命令:
control.sh --tx --min-duration 100 --kill
# 1.4.事务竞争检测
contention
命令可用于检测多个事务在相同键上竞争创建锁的情况,当有事务长期运行或者挂起时,该命令很有用。
示例:
# 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
如果存在任何竞争激烈的键,该工具将转储大量信息,包括发生争用的键、事务和节点。
示例:
[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
,其用于缓存的监控。该命令可以提供已部署缓存的列表及其关联/分布参数,还有在缓存组内的分布,另外还有一个命令用于查看已有的原子序列。
# 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.丢失分区重置
可以使用控制脚本重置某个缓存丢失的分区,具体请参见分区丢失策略。
control.sh --cache reset_lost_partitions cacheName1,cacheName2,...
# 1.7.一致性检查和修复命令
control.sh|bat
包括一组一致性检查命令,可用于验证和修复内部数据的一致性。
首先,这些命令可用于调试和故障排除场景,尤其是在开发高峰期。
其次,如果怀疑查询(例如SQL查询等)返回的结果集不完整或错误,则这些命令可以验证数据中是否存在不一致。
第三,一致性检查命令可以用作常规集群运行健康监测的一部分。
最后,必要时一致性是可以修复的。
下面看下更具体的使用场景:
# 1.7.1.验证分区校验和
即使主备之间的更新计数器和大小都相等,但是由于某些严重的故障,主备之间还是有可能出现差异。
idle_verify
命令将主分区的哈希与备份分区的哈希进行比较,并报告差异。差异可能是更新操作期间节点故障或非正常关闭导致。如果检测到任何不一致之处,建议删除不正确的分区。
如果检测到任何的不一致,建议删除不正确的分区,或者使用--consistency repair
命令修复一致性。
# 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.修复缓存一致性
试验性特性
该命令可能不适用于某些配置,或者可能导致集群/节点故障。
在生产环境实际操作之前,务必在与生产类似的数据/配置条件下进行验证。
idle_verify
命令会输出不一致的缓存组名和分区列表,repair
命令可以执行缓存的一致性检查,然后对于idle_verify
命令发现的每个不一致的分区,使用读修复的方式尽可能地修复。
该命令使用特定的策略来进行修复,建议是首先使用CHECK_ONLY
命令列出不一致的值,然后使用正确的修复策略进行修复。
发现的不一致条目默认会列出在应用的日志中,通过修改org.apache.ignite.internal.visor.consistency
包对应的Logger的日志路径,可以修改日志的位置。
找到的不一致条目默认会原样输出,但是通过启用IGNITE_TO_STRING_INCLUDE_SENSITIVE系统属性,可以屏蔽敏感信息。
参数
参数名 | 描述 |
---|---|
cache-name | 待检查/修复的缓存/缓存组名 |
partitions | 待检查/修复的逗号分隔的缓存分区号列表 |
strategy | 参见修复策略 |
可选参数
参数名 | 描述 |
---|---|
--parallel | 通过并行执行加快检查/修复的速度 |
# 1.7.3.缓存一致性检查/修复操作状态
该命令用于检查--consistency repair
命令的状态。
# 1.7.4.分区更新计数器校准
该命令会在手工修复后对分区的更新计数器进行校准。
# 1.7.5.验证SQL索引一致性
validate_indexes
命令将验证所有集群节点上给定缓存的索引。
验证过程将检查以下内容:
- 二级SQL索引可以访问主索引引用的所有键-值条目;
- 主索引引用的所有键-值条目都必须是可访问的,主索引的引用不应指向空值;
- 主索引可以访问二级SQL索引引用的所有键-值条目。
# 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.6.检查快照一致性
检查快照一致性命令的工作方式与idle_verify
命令相同。它会比较主分区和相应备份分区之间的哈希值,并在发现任何差异时输出报告。差异可能是由于获取快照的集群上的某些数据不一致导致的,如果发生这种情况,建议在集群上执行该idle_verify
过程。
检查增量快照的命令仅验证WAL段中的数据。它会检查快照中包含的每个事务是否已在每个参与的节点上完全提交。它还计算这些事务和提交的数据更改的哈希值,并在节点之间进行比较。
增量快照只验证事务性缓存
注意,增量快照并不能保证原子缓存的一致性。建议在恢复后使用idle_verify
命令验证这些缓存,必要的话可以使用--consistency
命令修复不一致的分区。
此过程不需要集群处于idle
状态。
# Checks that partitions of all snapshot caches have the correct checksums and primary/backup ones actually contain the same data.
control.(sh|bat) --snapshot check snapshot_name
# Checks the transactional data included into incremental snapshots. Incremental snapshots with indices from 1 to 3 are checked.
control.(sh|bat) --snapshot check snapshot_name --increment 3
# 1.7.7.检查SQL索引内联值
运行中的Ignite集群在各个节点上可能有不同的SQL索引内联值,例如各个节点上IGNITE_MAX_INDEX_PAYLOAD_SIZE
的属性值不同等。索引内联值之间的差异可能导致性能下降。
check_index_inline_sizes
命令会验证所有节点上给定缓存的索引内联值。在节点加入时会始终检查二级索引的内联值,如有不同,则会在日志中输出警告信息。
使用以下命令可以检查各个节点上二级索引内联值是否相同:
control.sh|bat --cache check_index_inline_sizes
如果内联值不同,控制台输出如下所示:
Control utility [ver. 2.12.0]
2022 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的追踪采样,具体请参见追踪章节的介绍。
使用该命令之前,需要开启控制脚本的试验性功能:
export IGNITE_ENABLE_EXPERIMENTAL_COMMAND=true
执行下面的命令可以查看当前的追踪配置:
control.sh --tracing-configuration
要启用某个API的追踪采样:
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.0 和1.0 之间的数字(包含),0 表示不采样(默认),1 表示始终采样。例如0.5 表示每条追踪都以50%的概率采样 |
--label | 仅适用于TX API范围。该参数定义具有给定标签的事务的采样率。当指定--label 参数时,则Ignite将追踪指定标签的事务。可以为不同的标签配置不同的采样率。没有标签的事务追踪将以默认采样率采样,TX 范围的默认采样率可以通过不带--label 参数的命令进行配置 |
示例:
追踪所有的发现事件:
control.sh --tracing-configuration set --scope DISCOVER --sampling-rate 1
追踪所有的事务:
control.sh --tracing-configuration set --scope TX --sampling-rate 1
配置标签为
report
的事务的采样率为50%:control.sh --tracing-configuration set --scope TX --sampling-rate 0.5
# 1.9.集群ID和标签
集群ID可以唯一标识一个集群,其是在集群第一次启动时自动生成的,具体请参见集群ID和标签章节的内容。
使用--state
命令可查看当前集群的ID:
然后检查输出:
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个字符):
# 1.10.指标命令
metrics
命令会输出一个指标或者由参数列表提供的指标注册表的值。使用--node-id
参数,可以拿到某个节点的指标,如果未指定该参数,Ignite会随机选择一个节点。
指标输出示例:
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.指标配置命令
指标命令可以配置直方图指标的边界或命中率指标的速率时间间隔。
提示
指标命令中的指标名格式为:<register-name>.<metric-name>
,比如WalLoggingRate
指标必须配置为io.datastorage.WalLoggingRate
。
# 1.12.索引管理
下面的命令可以获得索引的特定信息,然后触发索引的重建过程。
要获取所有匹配过滤规则的索引列表,可使用下面的命令:
参数:
参数 | 描述 |
---|---|
--node-id nodeId | 作业执行的节点ID,如果ID未指定,集群会选择一个节点 |
--group-name regExp | 启用按缓存组名筛选的正则表达式 |
--cache-name regExp | 启用按缓存名筛选的正则表达式 |
--index-name regExp | 启用按索引名筛选的正则表达式 |
要获取正在重建索引的所有缓存的列表,可使用以下命令:
要触发指定缓存或缓存组的所有索引的重建过程,可使用以下命令:
参数 | 描述 |
---|---|
--node-ids | 重建索引的节点ID列表 |
--all-nodes | 所有节点 |
--cache-names | 待重建索引的缓存名列表,逗号分割 |
--group-names | 待重建索引的缓存组名列表,逗号分割 |
# 1.13.系统视图命令
该命令会输出由参数列表指定的系统视图的内容,使用--node-id
参数,可以拿到某个节点的指标,如果未指定该参数,Ignite会随机选择一个节点。
输出示例:
control.sh --system-view nodes
Command [SYSTEM-VIEW] started
Arguments: --system-view nodes
--------------------------------------------------------------------------------
nodeId consistentId version isClient 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 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 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
# 1.14.性能统计
Ignite提供了一个用于集群分析的内置工具,具体请参见性能统计章节的内容。
参数:
参数 | 描述 |
---|---|
start | 在集群中开始收集性能统计数据 |
stop | 在集群中停止收集性能统计数据 |
rotate | 轮流收集集群中的性能统计数据 |
status | 取得集群中收集性能统计数据的状态 |
# 1.15.销毁缓存
可以通过控制脚本销毁某个缓存。
control.sh|bat --cache destroy --caches cache1,...,cacheN|--destroy-all-caches
参数:
参数 | 描述 |
---|---|
--caches cache1,…,cacheN | 指定要销毁的缓存名列表,逗号分割 |
--destroy-all-caches | 永久销毁所有用户创建的缓存 |
示例:
# Destroy cache1 and cache2.
control.sh|bat --cache destroy --caches cache1,cache2
# Destroy all user-created caches.
control.sh|bat --cache destroy --destroy-all-caches
# 1.16.清理缓存
可以通过控制脚本清理某些缓存的数据。
control.sh|bat --cache clear --caches cache1,...,cacheN
参数:
参数 | 描述 |
---|---|
--caches cache1,…,cacheN | 指定要清理的缓存名列表,逗号分割 |
示例:
# Clear cache1 and cache2.
control.sh|bat --cache clear --caches cache1,cache2
# 1.17.扫描缓存
可以通过控制脚本扫描缓存的数据。
control.sh|bat --cache scan cacheName [--limit N]
对于每个条目会显示四列:键类型和主键的字符串表示,值类型和值的字符串表示。
参数 | 描述 |
---|---|
--limit N | 扫描的数据量限额(默认值1000) |
示例:
# Query no more than 10 entries from cache "cache1"
control.sh|bat --cache scan cache1 --limit 10
# 1.18.创建缓存
可以使用控制脚本创建一个缓存。
提示
需要启用ignite-spring
模块。
control.sh|bat --cache create --springXmlConfig springXmlFilePath
参数
参数 | 描述 |
---|---|
--springXmlConfig springXmlConfigPath | Spring XML配置文件路径,其中包含要创建缓存的org.apache.ignite.configuration.CacheConfiguration Bean。 |
示例
# Create caches from the `/ignite/config/userCaches.xml` configuration.
control.sh|bat --cache create --springXmlConfig /ignite/config/userCaches.xml`
# 1.19.处理集群属性
control.sh|bat
脚本提供了处理SQL统计信息的能力。
要获得所有可用属性的列表,可以使用--property list
命令。
可以使用--property set
命令设定属性值,比如,在集群中启用/禁用SQL统计信息,可以指定ON|OFF|NO_UPDATE
值。
还可以使用--property get
命令获取属性值,比如:
# 1.20.管理缓存指标集合
该命令提供了开启/禁用/显示缓存指标集合状态的功能。
control.sh|bat --cache metrics enable|disable|status --caches cache1[,...,cacheN]|--all-caches
参数
参数 | 描述 |
---|---|
--caches cache1[,…,cacheN] | 要操作的缓存名列表,逗号分割 |
--all-caches | 操作面向所有的缓存 |
示例
# Show metrics statuses for all caches:
control.sh|bat --cache metrics status --all-caches
# Enable metrics collection for cache-1 and cache-2:
control.sh|bat --cache metrics enable --caches cache-2,cache-1
# 1.21.重建索引
通过schedule_indexes_rebuild
命令可以为指定的缓存或者缓存组重建索引,目标的缓存或者缓存组必须处于维护模式。
control.sh|bat --cache schedule_indexes_rebuild --node-ids nodeId1,...nodeIdN|--all-nodes --cache-names cacheName[index1,...indexN],cacheName2,cacheName3[index1] --group-names groupName1,groupName2,...groupNameN
参数:
参数
参数 | 描述 |
---|---|
--node-ids | 要重建索引的节点列表,如果未指定,会在所有节点上执行 |
--all-nodes | 在所有节点执行 |
--cache-names | 逗号分隔的缓存名列表,可以指定索引名,如果索引名未指定,则会重建所有的索引,可以与缓存组名同时使用 |
--group-names | 逗号分隔的缓存组名列表,可以与缓存名同时使用 |
# 2.SQLLine
# 2.1.概述
Ignite提供了一个SQLLine工具,它是一个接入关系数据库然后执行SQL命令的基于命令行的工具,本章节会描述如何用SQLLine接入Ignite集群,以及Ignite支持的各种SQLLine命令。
# 2.2.接入集群
在IGNITE_HOME/bin
目录中,执行sqlline.sh -u jdbc:ignite:thin:[host]
命令就可以使用SQLLine接入集群,注意要将[host]
替换为实际的值,比如:
输入./sqlline.sh -h
或者./sqlline.sh --help
可以看到可用的各种选项。
# 2.2.1.认证
如果集群打开了认证,那么在IGNITE_HOME/bin
目录中,通过运行jdbc:ignite:thin://[address]:[port];user=[username];password=[password]
命令SQLLine才可以接入集群。注意要将[address]
,[port]
,[username]
和`[password]替换为实际值,比如:
如果未开启认证,需要忽略[username]
和[password]
。
通过bash接入时JDBC URL要加引号
当在bash环境中接入时连接的URL一定要加" "
,比如:"jdbc:ignite:thin://[address]:[port];user=[username];password=[password]"
。
# 2.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命令。
# 2.4.示例
接入集群后,就可以执行SQL语句和SQLLine命令,比如:
# 3.Tableau
# 3.1.概述
Tableau是一个聚焦于商务智能领域的交互式数据可视化工具。它使用ODBC API接入各种数据库和数据平台,然后分析里面的数据。
Ignite有自己的ODBC实现,这样就使从Tableau端接入Ignite成为可能,并且可以分析存储于分布式Ignite集群中的数据。
# 3.2.安装和配置
要从Tableau接入Ignite,需要进行如下操作:
- 下载并且安转Tableau桌面版,可以在其产品主页查看官方文档;
- 在Windows或者基于Unix的操作系统上安装Ignite的ODBC驱动;
- 最后,通过DSN配置驱动,Tableau会通过DSN配置接入;
- ODBC驱动通过一个叫做
ODBC processor
的协议与Ignite集群通信,一定要确保这个组件在集群端已经启用。
上述步骤完成后,就可以接入集群然后分析数据了。
# 3.3.接入集群
- 启动Tableau应用,然后在
Connect
⇒To a Server
⇒More...
窗口中找到Other Databases (ODBC)
配置; - 点击
Edit connection
链接; - 配置之前设定的
DSN
属性值,下面的示例中为:LocalApacheIgniteDSN
,做完之后,点击Connect
按钮; - Tableau会试图验证这个连接,如果验证通过,
Sign In
按钮以及其它的与连接有关的字段就会变为可用状态,点击Sign In
就会完成连接过程;
# 3.4.数据查询和分析
成功建立Ignite和Tableau之间的连接之后,就可以通过Tableau支持的各种方式对数据进行查询和分析,通过官方文档可以了解更多的细节。
# 4.Informatica
# 4.1.概述
Informatica是一个云数据管理和集成工具,可以通过ODBC连接将Informatica接入Ignite。
# 4.2.从Informatica PowerCenter Designer接入
在PowerCenter Designer中,必须安装32位的Ignite ODBC驱动才能接入Ignite,可以按照下面链接的内容安装ODBC驱动并且创建DSN:
然后:
- 如果要从Ignite中导入表,在
Sources
或者Targets
菜单中选择Import from Database...
; - 通过选择
Apache Ignite DSN
作为ODBC数据源接入集群。
# 4.3.在Informatica服务节点上安装Ignite ODBC
在在Linux上构建和在Linux上安装文档中,描述了如何在Ignite服务端节点上安装Ignite ODBC。
Informatica会使用$ODBCINI
和$ODBCISTINI
环境变量指定的配置文件(为ODBC配置UNIX环境变量)。配置Ignite ODBC驱动和创建新的DSN,如下所示:
要验证ODBC连接,可以使用Informatica的ssgodbc.linux64
工具,如下所示:
<INFORMATICA_HOME>/tools/debugtools/ssgodbc/linux64/ssgodbc.linux64 -d ApacheIgnite -u ignite -p ignite -v
如果unixODBC
或者Ignite的ODBC库没有安装在默认的目录中-/usr/local/lib
,则需要将其加入LD_LIBRARY_PATH
然后再次测试,如下:
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
# 4.4.配置相关的连接
选择Connections
>Relational...
可以显示Relational Connection Browser
。
选中ODBC类型然后创建一个新的连接。
# 4.5.在Suse 11.4中安装Ignite ODBC
下面是在Suse 11.4环境中构建Ignite和Ignite ODBC驱动的步骤。
- 添加仓库 -
oss
,non-oss
,openSUSE_Factory
,devel_gcc
;
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
- 安装
automake
和autoconf
:
sudo zypper install autoconf automake
- 安装
libtool
:
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
- 安装
OpenSSL
:
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
- 安装GCC编译器:
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
- 创建编译器执行文件的符号链接:
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
- 通过源码安装unixODBC:从http://www.unixodbc.org/下载并安装最新的unixODBC(2.3.6或更新的版本);
- 检查指定版本的所有依赖库和工具都已经成功安装:
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
- 检查
JAVA_HOME
环境变量是否配置,然后执行下面的命令:
cd $IGNITE_HOME/platforms/cpp
export LDFLAGS=-lrt
libtoolize && aclocal && autoheader && automake --add-missing && autoreconf
./configure --enable-odbc
make
sudo make install
- 成功之后,重启系统;
- 安装ODBC驱动:
sudo odbcinst -i -d -f $IGNITE_HOME/platforms/cpp/odbc/install/ignite-odbc-install.ini
# 5.Pentaho
# 5.1.概述
Pentaho是一个全面的平台,它可以非常容易地对数据进行抽取、转换、可视化和分析。Pentaho数据集成采用Java数据库连接(JDBC)API接入数据库。
Ignite有自己的JDBC驱动,这样就使得通过Pentaho平台接入Ignite成为可能,然后就可以分析分布式Ignite集群中的数据了。
# 5.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
。
# 5.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 URL | jdbc:ignite:thin://localhost:10800 ,其中端口和地址可以根据实际进行调整 |
Custom Driver Class Name | org.apache.ignite.IgniteJdbcThinDriver |
- 点击
Test
按钮,对连接进行测试
# 5.4.数据的查询和分析
Ignite和Pentaho之间建立连接之后,就可以通过Pentaho支持的各种方式对数据进行查询、转换和分析了,更多的细节,可以查看Pentaho的官方文档。
# 6.Index Reader
Ignite提供了一个命令行脚本index-reader.sh|bat
,可以用它来检查分区文件中的缓存数据树与其索引的一致性,该脚本位于安装目录的/bin/
文件夹下。
警告
该工具执行时,集群不能处于运行状态。
# 6.1.运行
在{IGNITE_HOME}/bin
目录中运行index-reader.sh|bat
脚本。
参数 | 描述 | 默认值 |
---|---|---|
--dir | index.bin 索引文件和分区文件(可选)所在的分区目录 | |
--part-cnt | 缓存组的分区数 | 0 |
--page-size | 页面大小(字节) | 4096 |
--page-store-ver | 页面存储版本 | 2 |
--indexes | 可以指定要处理的索引树名,逗号分割不能有空格,然后其他的索引树会被忽略 | [] |
--check-parts | 检查分区文件内的缓存数据树及其与索引的一致性 | false |
# 6.2.使用
./index-reader.sh|bat --dir [--part-cnt] [--page-size] [--page-store-ver] [--indexes] [--check-parts]
18624049226