尝试 运行 在 cqlsh 中创建和 select 时出错:NoHostAvailable
Error when trying to run create and select in cqlsh: NoHostAvailable
我是 DSE 和 Cassandra 的新手。
我有一个由 3 个 DC 组成的集群:"analytic"、"dc2"、"trans".
所有人都使用相同的配置文件 DSE,带 DSEAuth。
所以问题是 LIST 和 CREATE 命令仅在我使用 cqlsh 到 DC trans 时才有效。
另一个将重播 NoHostAvailabe
.
[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)
描述您的 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;
这里的问题是,似乎 trans
DC 是唯一具有 system_auth.roles
table 副本的 DC。要解决这个问题,我建议这样做:
ALTER KEYSPACE system_auth WITH
replication = {'class': 'NetworkTopologyStrategy', 'trans': '3',
'analytic': '3', 'dc2': '3'};
这将指示所有未来写入 system_auth
键空间中的 tables 以将 3 个副本写入每个逻辑数据中心。该命令完成后,运行 执行以下操作以确保所有当前副本都移动到适当的位置:
> consistency ALL
> SELECT * FROM resource_role_permissons_index ;
> SELECT * FROM role_permissions ;
> SELECT * FROM role_members ;
> SELECT * FROM roles;
第一个命令强制您的查询一致性级别达到 ALL
,需要所有副本的响应才能成功。这听起来像是你不想在 Cassandra 中做的事情(通常你也不会)。但是以一致性 ALL
读取会强制读取修复 100% 的时间。 SELECT
查询读取所有副本并实际强制修复。这实际上会欺骗 Cassandra 为您修复副本。
还有:
cqlsh -u cassandra -p cassandra
不要使用默认的 cassandra/cassandra 用户。更改密码 and/or 禁用该帐户是应该做的第一件事。
我是 DSE 和 Cassandra 的新手。 我有一个由 3 个 DC 组成的集群:"analytic"、"dc2"、"trans".
所有人都使用相同的配置文件 DSE,带 DSEAuth。
所以问题是 LIST 和 CREATE 命令仅在我使用 cqlsh 到 DC trans 时才有效。
另一个将重播 NoHostAvailabe
.
[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)
描述您的 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;
这里的问题是,似乎 trans
DC 是唯一具有 system_auth.roles
table 副本的 DC。要解决这个问题,我建议这样做:
ALTER KEYSPACE system_auth WITH
replication = {'class': 'NetworkTopologyStrategy', 'trans': '3',
'analytic': '3', 'dc2': '3'};
这将指示所有未来写入 system_auth
键空间中的 tables 以将 3 个副本写入每个逻辑数据中心。该命令完成后,运行 执行以下操作以确保所有当前副本都移动到适当的位置:
> consistency ALL
> SELECT * FROM resource_role_permissons_index ;
> SELECT * FROM role_permissions ;
> SELECT * FROM role_members ;
> SELECT * FROM roles;
第一个命令强制您的查询一致性级别达到 ALL
,需要所有副本的响应才能成功。这听起来像是你不想在 Cassandra 中做的事情(通常你也不会)。但是以一致性 ALL
读取会强制读取修复 100% 的时间。 SELECT
查询读取所有副本并实际强制修复。这实际上会欺骗 Cassandra 为您修复副本。
还有:
cqlsh -u cassandra -p cassandra
不要使用默认的 cassandra/cassandra 用户。更改密码 and/or 禁用该帐户是应该做的第一件事。