3

我们已将部分表从 AWS RDS 移动到 AWS Keyspaces,以查看是否可以在 KeySpaces 上获得更好的性能。我们已经投入了大量工作来从 MySQL 迁移到 Keyspaces,并且我们一直在监控系统以避免爆炸性的不一致。在我们的监控期间,我们观察到以下导致 CPU 和内存使用率过高的警告。

- DefaultTokenFactoryRegistry - [s0] Unsupported partitioner 'com.amazonaws.cassandra.DefaultPartitioner, token map will be empty.

-DefaultTopologyMonitor - [s0] 控制节点 IPx/IPy:9142 在 system.peers 中有自己的条目:此条目将被忽略。这可能是由于配置错误造成的;请在集群中的所有节点上验证 cassandra.yaml 中的 rpc_address 配置(IPx 和 IPy 是 cassandra 节点 IP) - 控制节点 cassandra.{REGION}.amazonaws.com/{IP_1}:9142 在系统中有一个条目。 peers:此条目将被忽略。这可能是由于配置错误造成的;请在集群中的所有节点上验证 cassandra.yaml 中的 rpc_address 配置。

尽管这些警告不会在我们部署代码后和接下来的几个小时后立即出现,但它会在部署后的 24-72 小时后出现。

到目前为止我们做了什么?

尽管可以通过将日志级别设置为错误来抑制警告,但驱动程序表示 cassandra.yml 中存在错误配置,我们无权编辑或查看。有没有办法避免此警告或建议解决此问题的任何解决方案?

datastax-java-driver {
        basic {
            contact-points = ["cassandra.eu-west-1.amazonaws.com:9142"]
            load-balancing-policy {
                class = DefaultLoadBalancingPolicy
                local-datacenter = eu-west-1
            }
            request {
                timeout = 10 seconds
                default-idempotence = true
            }
        }

        advanced {
            auth-provider = {
                class = software.aws.mcs.auth.SigV4AuthProvider
                aws-region = eu-west-1
            }

            ssl-engine-factory {
                class = DefaultSslEngineFactory
                truststore-path = "./cassandra_truststore.jks"
                truststore-password = "XXX"
                keystore-path = "./cassandra_truststore.jks"
                keystore-password = "XXX"
            }

            retry-policy {
                class =  com.ABC.DEF.config.cassandra.AmazonKeyspacesRetryPolicy
                max-attempts = 5
            }

            connection {
                pool {
                    local {
                        size = 9
                    }
                    remote {
                        size = 1
                    }
                }

                init-query-timeout = 5 seconds

                max-requests-per-connection = 1024
            }

            reconnect-on-init = true

            heartbeat {
                timeout = 1 seconds
            }

            metadata {
                schema {
                    enabled = false
                }
                token-map {
                    enabled = false
                }
            }

            control-connection {
                timeout = 1 seconds
            }

        }
    }


----------


4

2 回答 2

7

这确实是一个非标准的、不受支持的分区器:com.amazonaws.cassandra.DefaultPartitioner. 除非您编写自己的TopologyMonitorTokenFactory.

我建议您完全禁用令牌感知路由,请参阅此处以获取说明。

于 2022-01-27T13:53:59.507 回答
1

警告只是让您知道该 ip 将被过滤掉。请参阅github 上的代码行。在 cassandra 中,system.peers 表包含一个节点列表减去控制节点的 ip。在 Amazon Keyspaces 中,system.peers 表还包含控制节点 ip。当驱动程序启动连接或更新驱动程序元数据时,您将看到此警告。使用键空间时,会出现此警告,不会影响性能。有一个补丁可以解决这个警告,但我没有 ETA 可以分享。

我建议升级java驱动看看你的问题是否得到解决。您还可以下载最新的 sigv4 插件,该插件将 java 驱动程序 4.13 作为依赖项引入。

<dependency>
    <groupId>software.aws.mcs</groupId>
    <artifactId>aws-sigv4-auth-cassandra-java-driver-plugin</artifactId>
    <version>4.0.5</version>
</dependency>

这是一个示例驱动程序配置供参考。

datastax-java-driver {
        basic.contact-points = ["cassandra.us-east-2.amazonaws.com:9142"]
        basic.load-balancing-policy {
            class = DefaultLoadBalancingPolicy
            local-datacenter = us-east-2
        }
        advanced {
            auth-provider = {
                class = software.aws.mcs.auth.SigV4AuthProvider
                aws-region = us-east-2
            }
            ssl-engine-factory {
                class = DefaultSslEngineFactory
                truststore-path = "./src/main/resources/cassandra_truststore.jks"
                truststore-password = "my_password"
                hostname-validation = false
            }
        }
        advanced.metadata.token-map.enabled = false
        advanced.metadata.schema.enabled = false
        advanced.reconnect-on-init = true
        
        advanced.connection {
           pool {
              local.size = 3
              remote.size = 1
           }
         }
    }

于 2022-02-22T17:45:40.900 回答