【问题标题】:Error when trying to run create and select in cqlsh: NoHostAvailable尝试在 cqlsh 中运行创建和选择时出错:NoHostAvailable
【发布时间】:2020-02-18 10:19:56
【问题描述】:

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

所有人都使用相同的配置文件 DSE,带有 DSEAuth。 所以问题是 LIST 和 CREATE 命令仅在我使用 cqlsh 到 DC 传输时才有效。 另一个将重播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)

【问题讨论】:

    标签: cassandra cql cqlsh


    【解决方案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;
    

    这里的问题是,trans DC 似乎是唯一拥有system_auth.roles 表副本的 DC。为了解决这个问题,我建议这样做:

    ALTER KEYSPACE system_auth WITH 
        replication = {'class': 'NetworkTopologyStrategy', 'trans': '3',
        'analytic': '3', 'dc2': '3'};
    

    这将指示所有未来对 system_auth 键空间中的表的写入将 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 用户。更改密码和/或禁用该帐户是首先应该做的事情之一。

    【讨论】:

    猜你喜欢
    • 2020-01-13
    • 2017-06-12
    • 2018-01-08
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多