簡體   English   中英

無法在Laravel項目中使用php驅動程序連接到Cassandra數據庫

[英]Unable to connect to Cassandra db using php driver in laravel project

我真的需要一些幫助,在過去的兩天里一直在努力解決。

我正在嘗試將laravel項目從Mongo遷移到Cassandra。 我使用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

我已將服務提供商添加到config / app文件中

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', ''),
],

這些是我的環境變量

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

根據我發現的所有文檔,這足以啟動並運行它,但我一直遇到此錯誤

沒有可用於控制連接的主機

在嘗試找出問題時,我遇到了這個問題 ,它說可以通過升級PHP驅動程序/擴展來解決此問題,因此我嘗試了一些在此處找到的不同擴展,但仍然遇到相同的問題。

任何幫助將不勝感激

端口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');

因此,我得到了外部幫助,以找出解決方案。

實際上,原始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中找到對此的修復程序。 或者,也可以派生lacassa庫並自行實現此修復程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM