Невозможно подключиться к Cassandra db с помощью драйвера php в проекте laravel - PullRequest
0 голосов
/ 10 мая 2018

Мне очень нужна помощь в этом, последние два дня я пытался это выяснить.

Я пытаюсь перенести проект laravel из Монго в Кассандру. Я использую Docker-контейнеры для локальной установки, вот файл docker-compose.yml с соответствующей информацией

version: '2'
services:
mongodb:
    image: mongo
    container_name: marketdata_mongodb
    environment:
    - MONGODB_DATABASE=marketdata
    - MONGODB_USER=marketdata
    - MONGODB_PASS=marketdata
    - MONGO_DATA_DIR=/data/db
    volumes:
    - ./data/db:/data/db
    ports:
        - 27017
    networks:
    - main_network

cassandra:
    image: cassandra
    container_name: marketdata_cassandra
    command: bash -c 'if [ -z "$$(ls -A /var/lib/cassandra/)" ] ; then sleep 0; fi && /docker-entrypoint.sh cassandra -f'
    environment:
    - CASSANDRA_CLUSTER_NAME=dev_cluster
    # Cassandra ulimt recommended settings
    ulimits:
    memlock: -1
    nproc: 32768
    nofile: 100000
    volumes:
    - ./cassandra_data:/var/lib/cassandra
    ports:
    - 7000
    - 7001
    - 7199
    - 9042
    - 9160
    networks:
    - main_network

networks:
main_network:
    driver: bridge

После некоторых поисков в Google я нашел эту библиотеку https://github.com/cubettech/lacassa и пытался использовать ее в проект для подключения к моему контейнеру Cassandra, но не удалось этого сделать.

Вот шаги, которые я предпринял до сих пор, чтобы заставить это работать

Я установил зависимости драйвера php Cassandra, используя эти команды

wget http://downloads.datastax.com/cpp-driver/ubuntu/16.04/dependencies/libuv/v1.11.0/libuv_1.11.0-1_amd64.deb
wget http://downloads.datastax.com/cpp-driver/ubuntu/16.04/dependencies/libuv/v1.11.0/libuv-dev_1.11.0-1_amd64.deb
wget http://downloads.datastax.com/cpp-driver/ubuntu/16.04/cassandra/v2.8.0/cassandra-cpp-driver-dev_2.8.0-1_amd64.deb
wget http://downloads.datastax.com/cpp-driver/ubuntu/16.04/cassandra/v2.8.0/cassandra-cpp-driver_2.8.0-1_amd64.deb

dpkg -i libuv_1.11.0-1_amd64.deb
dpkg -i libuv-dev_1.11.0-1_amd64.deb
dpkg -i cassandra-cpp-driver_2.8.0-1_amd64.deb
dpkg -i cassandra-cpp-driver-dev_2.8.0-1_amd64.deb

apt-get install libgmp-dev
pecl install cassandra
echo "extension=cassandra.so" >> /etc/php/7.0/apache2/php.ini
echo "extension=cassandra.so" >> /etc/php/7.0/cli/php.ini

Я добавил поставщика услуг в файл конфигурации / приложения

Cubettech\Lacassa\CassandraServiceProvider::class

Я также добавил новое соединение с базой данных для cassandra в файл config / database

'cassandra' => [
    'driver' => 'Cassandra',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', 7199),
    'keyspace' => env('DB_DATABASE', 'cassandra_db'),
    'username' => env('DB_USERNAME', ''),
    'password' => env('DB_PASSWORD', ''),
],

это мои переменные env

DB_CONNECTION=cassandra
DB_HOST=marketdata_cassandra
DB_PORT=7199
DB_DATABASE=marketdata
DB_USERNAME=marketdata
DB_PASSWORD=marketdata

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

Нет доступных хостов для управляющего соединения

Пытаясь выяснить проблему, я наткнулся на это , в котором говорилось, что проблема потенциально может быть решена путем обновления драйвера / расширения PHP, поэтому я попробовал несколько различных расширений, которые я нашел здесь , но у меня все еще остается та же проблема.

Любая помощь будет принята с благодарностью

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Итак, я получил помощь извне, чтобы найти решение этой проблемы.

Хост и порт фактически не используются в исходной библиотеке lacassa . Если вы посмотрите на документацию, то здесь написано: «по умолчанию подключается к localhost» - и это та же строка, что и в lacassa здесь

$cluster = Cassandra::cluster()                 // connects to localhost by default
               ->build();

https://docs.datastax.com/en/developer/php-driver/1.3/#quick-start

Исправление для этого можно найти в этой библиотеке https://github.com/seta0909/lacassa. Кроме того, можно также разветвить лакассу библиотека и реализовать исправление самостоятельно

0 голосов
/ 10 мая 2018

Порт 7199 является портом мониторинга JMX; Вы должны изменить порт с 7199 => 9042.

https://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/secureFireWall.html

Если у вас все еще есть проблемы с подключением к Apache Cassandra, попробуйте выполнить следующее, чтобы убедиться, что драйвер загружается через CLI:

php -m | grep cassandra

Если модуль драйвера PHP появляется, попытайтесь подключиться к серверу, используя драйвер напрямую:

<?php

$cluster = \Cassandra::cluster()->build();
$session = $cluster->connect('cassandra_db');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...