# 工具

# 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 信任库密码

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

                            # 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索引引用的所有键-值条目。
                            # 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命令会验证所有节点上给定缓存的索引内联值。在节点加入时会始终检查二级索引的内联值,如有不同,则会在日志中输出警告信息。

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

                            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的追踪采样,具体请参见追踪章节的介绍。

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

                            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.01.0之间的数字(包含),0表示不采样(默认),1表示始终采样。例如0.5表示每条追踪都以50%的概率采样
                            --label 仅适用于TXAPI范围。该参数定义具有给定标签的事务的采样率。当指定--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.索引管理

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

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

                                    参数:

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

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

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

                                        参数 描述
                                        --node-id 重建索引的节点ID
                                        --cache-names 待重建索引的缓存名列表,逗号分割
                                        --group-names 待重建索引的缓存组名列表,逗号分割

                                        # 1.12.系统视图命令

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

                                          输出示例:

                                          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接入网格
                                          ping ping节点
                                          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]替换为实际的值,比如:

                                            输入./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]替换为实际值,比如:

                                              如果未开启认证,需要忽略[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命令,比如:

                                                # 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,如下所示:

                                                  要验证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
                                                  

                                                  # 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
                                                  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
                                                  sudo zypper install autoconf automake
                                                  
                                                  1. 安装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
                                                  
                                                  1. 安装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
                                                  
                                                  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
                                                  
                                                  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
                                                  
                                                  1. 通过源码安装unixODBC:从http://www.unixodbc.org/下载并安装最新的unixODBC(2.3.6或更新的版本);
                                                  2. 检查指定版本的所有依赖库和工具都已经成功安装:
                                                  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环境变量是否配置,然后执行下面的命令:
                                                  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驱动:
                                                  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 URL jdbc:ignite:thin://localhost:10800,其中端口和地址可以根据实际进行调整
                                                  Custom Driver Class Name org.apache.ignite.IgniteJdbcThinDriver
                                                  • 点击Test按钮,对连接进行测试

                                                  # 6.4.数据的查询和分析

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

                                                  18624049226

                                                  最后更新时间:: 4/5/2021, 7:31:23 PM