Как получить данные с помощью Stargate на DataStax Enterprise

У меня есть datastax cassandra 6.8, установленный на сервере разработки, и я также установил новейшую версию Stargate на другом сервере разработки. Связь устанавливается между Звездными вратами и Кассандрой. Я не вижу ошибок в файле журнала. Я могу использовать почтальона, чтобы позвонить в Stargate, чтобы получить auth_token. После этого я устанавливаю этот токен в заголовок и делаю вызов GET для получения данных.

       http://{{dev server and port}}/v2/keyspaces/dco/test1?where={"id":{"$eq":"c8e67364-1547-4833-9208-9ea9c0f0acf6"}}

Я получаю эту ошибку

      {
    "description": "Server error: org.apache.cassandra.stargate.transport.ServerError: Unexpected persistence error: Name authentication_schemes/INTERNAL is not valid for any resource type",
    "code": 500
}

Ошибка выглядит так, как будто мой пользователь / пароль, который я использовал для получения auth_token, не имеет права на получение данных. Но я попытался использовать этого пользователя / прохода для входа в cassandra, и я могу выбирать и вставлять запросы.

Не могли бы вы помочь мне понять, как я могу обойти эту проблему.

Ниже мой скриншот почтальона и Кассандры db

Таблица Cassandra test1 (id - uuid и первичный ключ)

      id                                   | create_date
--------------------------------------+---------------------------------
 f47dee1b-1b51-4e25-933f-6f3f8817a6f5 | 1970-01-01 00:00:00.000000+0000
 c8e67364-1547-4833-9208-9ea9c0f0acf6 | 2021-09-16 18:59:16.352000+0000
 faae6180-0464-11ec-9a03-0242ac130003 | 2009-07-13 08:30:12.000000+0000

2 ответа

Вы случайно не используете аутентификацию LDAP в своем кластере DSE? В настоящее время он не поддерживается в Stargate, что может вызывать ошибку, которую вы видите.

Если возможно, я бы попробовал отозвать INTERNALсоответствующие разрешения для используемой вами роли. Вы также можете попробовать создать новую роль только с базовыми разрешениями и без схем аутентификации.

В вашем сообщении недостаточно информации, чтобы определить, в чем заключается основная проблема, поэтому я собираюсь опубликовать свою тестовую среду, чтобы вы могли сравнить ее с вашей.

Конфигурация DSE

Это мой одноузловой кластер DSE 6.8.15:

      $ nodetool status
Datacenter: Cassandra
=====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving/Stopped
--  Address        Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.101.36.175  203.4 KiB  8            100.0%            722c2393-92c8-4eb5-999c-c39063a9aee5  rack1

Это записи, которые я настроил в cassandra.yaml:

      cluster_name: 'stargate'
seed_provider:
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
      parameters:
          - seeds: "10.101.36.175"
listen_address: 10.101.36.175
native_transport_address: 10.101.36.175

И в dse.yaml:

      authentication_options:
    enabled: true
    default_scheme: internal

Конфигурация звездных врат

IP моего узла Звездных врат 10.101.36.44 и я начал с:

      $ starctl \
  --cluster-name stargate \
  --cluster-seed 10.101.36.175 \
  --cluster-version 6.8 \
  --listen 10.101.36.44 \
  --dc Cassandra \
  --rack rack1 \
  --dse \
  --enable-auth

Для справки я использовал пример из Руководства по установке Stargate.io .

Как только Stargate заработает, я могу подтвердить, что все необходимые порты для конечных точек API включены:

      $ sudo lsof -nPi -sTCP:LISTEN
COMMAND    PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd-r  817 systemd-resolve   13u  IPv4  22041      0t0  TCP 127.0.0.53:53 (LISTEN)
sshd      1136            root    3u  IPv4  25117      0t0  TCP *:22 (LISTEN)
sshd      1136            root    4u  IPv6  25128      0t0  TCP *:22 (LISTEN)
java      8724          ubuntu  467u  IPv6  59646      0t0  TCP *:7199 (LISTEN)
java      8724          ubuntu  468u  IPv6  59647      0t0  TCP *:37421 (LISTEN)
java      8724          ubuntu  473u  IPv6  59240      0t0  TCP 10.101.36.44:7000 (LISTEN)
java      8724          ubuntu  851u  IPv6  61496      0t0  TCP *:8081 (LISTEN)
java      8724          ubuntu  866u  IPv6  62632      0t0  TCP *:8090 (LISTEN)
java      8724          ubuntu  867u  IPv6  63503      0t0  TCP *:8084 (LISTEN)
java      8724          ubuntu  872u  IPv6  65299      0t0  TCP *:8080 (LISTEN)
java      8724          ubuntu  889u  IPv6  63517      0t0  TCP *:9042 (LISTEN)
java      8724          ubuntu 1013u  IPv6  65561      0t0  TCP *:8082 (LISTEN)

Тестирование

В моем кластере я создал эту таблицу:

      CREATE KEYSPACE sgoneks WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}  AND durable_writes = true;

CREATE TABLE sgoneks.vaccinations_by_name (
    name text PRIMARY KEY,
    firstdose date,
    seconddose date,
    vaccine text
)

А таблица содержит следующие данные:

      sguser@cqlsh> SELECT * FROM sgoneks.vaccinations_by_name ;

 name   | firstdose  | seconddose | vaccine
--------+------------+------------+-------------
    bob | 2021-02-28 | 2021-05-23 | astrazeneca
 carlos | 2021-03-12 | 2021-04-02 | astrazeneca
  alice | 2021-06-20 | 2021-07-19 |      pfizer

Вот как я сгенерировал токен аутентификации и сохранил его как переменную среды:

      $ curl -L -X POST 'http://10.101.36.44:8081/v1/auth' \
    -H 'Content-Type: application/json' \
    --data-raw '{"username":"sguser", "password":"sguser"}'
{"authToken":"41867001-216d-4525-b612-6b883a64984d"}
      $ export AUTH_TOKEN="41867001-216d-4525-b612-6b883a64984d"

Вот быстрый тест подключения, проверив, что sgoneks пространство ключей существует:

      $ curl -L -X GET 'http://10.101.36.44:8082/v2/schemas/keyspaces/sgoneks' \
    -H 'Content-Type: application/json' \
    -H "X-Cassandra-Token: $AUTH_TOKEN" \
    -H "Accept: application/json" \
    | jq
{
  "data": {
    "name": "sgoneks"
  }
}

Наконец, я получил сведения о вакцинации для name='alice' здесь:

      $ curl -L -X GET 'http://10.101.36.44:8082/v2/keyspaces/sgoneks/vaccinations_by_name/alice' \
    -H 'Content-Type: application/json' \
    -H "X-Cassandra-Token: $AUTH_TOKEN" \
    | jq
{
  "count": 1,
  "data": [
    {
      "name": "alice",
      "firstdose": {
        "year": 2021,
        "month": "JUNE",
        "monthValue": 6,
        "chronology": {
          "calendarType": "iso8601",
          "id": "ISO"
        },
        "dayOfMonth": 20,
        "dayOfWeek": "SUNDAY",
        "era": "CE",
        "dayOfYear": 171,
        "leapYear": false
      },
      "seconddose": {
        "year": 2021,
        "month": "JULY",
        "monthValue": 7,
        "chronology": {
          "calendarType": "iso8601",
          "id": "ISO"
        },
        "dayOfMonth": 19,
        "dayOfWeek": "MONDAY",
        "era": "CE",
        "dayOfYear": 200,
        "leapYear": false
      },
      "vaccine": "pfizer"
    }
  ]
}

В качестве примечания, вам может быть проще просто использовать Astra DB, потому что он поставляется с предварительно настроенным и готовым к использованию Stargate.io .

Если у вас по-прежнему возникают проблемы с установкой DSE, я бы рекомендовал зарегистрировать заявку в службе поддержки DataStax, чтобы один из наших инженеров мог помочь вам напрямую. Ваше здоровье!

Другие вопросы по тегам