首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使用laravel项目中的php驱动程序连接到Cassandra数据库

无法使用laravel项目中的php驱动程序连接到Cassandra数据库
EN

Stack Overflow用户
提问于 2018-05-10 05:10:48
回答 2查看 914关注 0票数 0

我真的需要一些帮助来解决这个问题,我花了两天的时间试图弄清楚。

我正在尝试将一个laravel项目从Mongo迁移到Cassandra。我使用docker容器进行本地设置,这里是包含相关信息的docker-compose.yml文件

代码语言:javascript
复制
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

在谷歌上搜索后,我找到了这个库https://github.com/cubettech/lacassa,我一直试图在项目中使用它来连接到我的Cassandra容器,但一直无法做到。

到目前为止,我已经采取了以下步骤来实现这一点

我使用以下命令安装了php Cassandra驱动程序依赖项

代码语言:javascript
复制
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

我还在config/database文件中添加了cassandra的新数据库连接

代码语言:javascript
复制
'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', ''),
],

这些是我的环境变量

代码语言:javascript
复制
DB_CONNECTION=cassandra
DB_HOST=marketdata_cassandra
DB_PORT=7199
DB_DATABASE=marketdata
DB_USERNAME=marketdata
DB_PASSWORD=marketdata

根据我找到的所有文档,这应该足以让它启动并运行,但我一直遇到这个错误

没有可用于控制连接的主机

当我试图解决这个问题时,我遇到了this,它说这个问题可以通过升级PHP驱动程序/扩展来解决,所以我尝试了几个不同的扩展,我找到了here,但我仍然有同样的问题。

任何帮助都将不胜感激

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-06 06:34:00

所以我得到了外部的帮助来解决这个问题。

原来的lacassa库中实际上没有使用主机和端口。如果您查看文档,这里会显示:“默认情况下连接到本地主机”-这与lacassa here中使用的代码行相同

代码语言:javascript
复制
$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库并自己实现修复

票数 0
EN

Stack Overflow用户

发布于 2018-05-10 05:28:05

端口7199是JMX监控端口;您应该将端口从7199 => 9042更改。

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

如果您在连接到Apache Cassandra时仍有问题,请尝试执行以下命令,以确保通过CLI正确加载驱动程序:

代码语言:javascript
复制
php -m | grep cassandra

如果显示PHP驱动程序模块,则尝试直接使用该驱动程序连接到服务器:

代码语言:javascript
复制
<?php

$cluster = \Cassandra::cluster()->build();
$session = $cluster->connect('cassandra_db');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50262112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档