无法在 laravel 项目中使用 php 驱动程序连接到 Cassandra db



我真的需要一些帮助,花了最后两天的时间试图弄清楚。

我正在尝试将一个 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

在谷歌上搜索了一番后,我找到了这个库 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

我将服务提供商添加到配置/应用程序文件中

CubettechLacassaCassandraServiceProvider::class

我还在配置/数据库文件中为 cassandra 添加了一个新的数据库连接

'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 更改为 7199

。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库中使用。 如果您查看文档,这里会显示:"默认情况下连接到本地主机" - 这与此处 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 中找到此问题的修复程序。或者,也可以分叉拉卡萨 库并自行实施修复

最新更新