尝试在cqlsh中运行创建并选择时出错:NoHostAvailable

时间:2019-10-22 09:38:33

标签: cassandra cql cqlsh

我是DSE和Cassandra的新手。 我有一个由3个DC组成的集群:“ analytic”,“ dc2”,“ trans”。

所有使用带有DSEAuth的相同配置文件DSE。 因此,问题是LIST和CREATE命令仅在我使用cqlsh进行DC trans时有效。 另一个将重播[root@bigdata-142-116 ~]# nodetool status Datacenter: analytic ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.0.142.120 50.78 MiB 256 ? 78f58a89-30b3-4646-8762-f8ed528301a9 rack1 UN 10.0.142.121 126.94 MiB 256 ? 7229079d-12c9-4ef6-8753-b79edbcec8cf rack1 UN 10.0.142.122 35.91 MiB 256 ? e3c1e9c3-4bd1-4cd0-8479-69ba1b28676e rack1 UN 10.0.142.123 52.7 MiB 256 ? 25c591fe-36cc-4923-82bc-c0944364b486 rack1 Datacenter: dc2 =============== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.0.142.116 2.33 GiB 256 ? 9aea87a8-be95-45ad-a9c8-91ad7e658dff rack2 UN 10.0.142.117 2.64 GiB 256 ? 51e078ec-2434-401c-9db8-4adaaf263ed4 rack1 UN 10.0.142.118 2.76 GiB 256 ? 1a0ccb08-c65d-40ce-ae99-acb30f6e9d9a rack1 UN 10.0.142.119 2.67 GiB 256 ? d29708ca-729d-4727-a816-129b4fc72e04 rack1 Datacenter: trans ================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.0.142.113 164.09 MiB 256 ? 8fd44e60-9b84-44af-aebf-26b3c6a3ab17 rack1 UN 10.0.142.114 130.3 MiB 256 ? 8eb9a807-ff1f-47d7-92f0-e876f0fb56ee rack2 UN 10.0.142.115 113.3 MiB 256 ? e5f9a5d7-03b7-406e-ab0e-e429301af543 rack1 # cqlsh -u cassandra -p cassandra 10.0.142.120 Connected to GDT2 Cluster at 10.0.142.120:9042. cassandra@cqlsh> list ROLES ; NoHostAvailable: # cqlsh -u cassandra -p cassandra 10.0.142.115 Connected to GDT2 Cluster at 10.0.142.115:9042. cassandra@cqlsh> LIST ROLES ; role | super | login | options -----------+-------+-------+--------- cassandra | True | True | {} sysadmin | True | True | {} test | False | True | {} (3 rows)

var lastKeyDownTime = 0L

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
    return super.onKeyDown(keyCode, event)
    val curKeyDownTime = System.currentTimeMillis()
    val interval = curKeyDownTime - lastKeyDownTime
    lastKeyDownTime = curKeyDownTime
}

1 个答案:

答案 0 :(得分:1)

描述您的 select right('m_johnson_1234', charindex('_', reverse('m_johnson_1234') + '_') - 1) 键空间。看起来像这样吗?

system_auth

或更糟的是,它看起来像这样吗?

> desc KEYSPACE system_auth ;

CREATE KEYSPACE system_auth WITH 
    replication = {'class': 'NetworkTopologyStrategy', 'trans': '1'}
    AND durable_writes = true;

这里的问题是,看来CREATE KEYSPACE system_auth WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true; DC是唯一具有trans表副本的DC。要解决此问题,我建议这样做:

system_auth.roles

这将指示将来对ALTER KEYSPACE system_auth WITH replication = {'class': 'NetworkTopologyStrategy', 'trans': '3', 'analytic': '3', 'dc2': '3'}; 键空间中的表的所有写操作,以向每个逻辑数据中心写3个副本。该命令完成后,请运行以下命令以确保将所有当前副本都移至其正确位置:

system_auth

第一个命令将您的查询一致性级别提高到> consistency ALL > SELECT * FROM resource_role_permissons_index ; > SELECT * FROM role_permissions ; > SELECT * FROM role_members ; > SELECT * FROM roles; ,需要所有副本的响应才能成功。这听起来像是您不想在Cassandra中执行的操作(通常,您也不想这样做)。但是一致性ALL读取会强制100%的时间进行读取修复。 ALL查询读取所有副本并实际上强制修复。从本质上讲,这将使Cassandra欺骗为您修复副本。

也:

SELECT

不要使用默认的cassandra / cassandra用户。更改密码和/或禁用该帐户是应做的第一件事。