Как получить данные с помощью 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, чтобы один из наших инженеров мог помочь вам напрямую. Ваше здоровье!