【问题标题】:Unable to connect to cassandra hosted on my VM无法连接到托管在我的 VM 上的 cassandra
【发布时间】:2015-09-03 12:46:37
【问题描述】:

我有一台 windows 7 机器,我在上面安装了 Virtual Box,我正在其中运行一个 Ubuntu 虚拟机。

在那个 Ubuntu 虚拟机上,我安装了 cassandra 并让它在默认端口 9042 上运行。我已经为该端口配置了虚拟 Box 的端口转发。

当我尝试使用虚拟机中的客户端连接到我的 cassandra 实例时,一切正常。但是如果我尝试从我的主机(我的实际计算机,Windows 7)连接到它,我不能!

当我在我的 Ubuntu 虚拟机上使用 tcpdump 时,它会显示:

14:22:29.340202 IP 10.0.2.2.63128 > 10.0.2.15.9042: Flags [S], seq 606528001, win 65535, options [mss 1460], length 0
14:22:29.340293 IP 10.0.2.15.9042 > 10.0.2.2.63128: Flags [R.], seq 0, ack 606528002, win 0, length 0

所以我怀疑 tcp 流 [我的主机 --> Ubuntu VM] 没问题,但似乎相反的方式不起作用(tcp 流 Ubuntu VM --> 我的主机 Windows 7)。我还尝试在 Windows 7 上禁用防火墙。

对此有什么帮助吗?

【问题讨论】:

标签: ubuntu networking tcp virtualbox tcpdump


【解决方案1】:

这是my answer from another question的转贴

从主机操作系统访问访客虚拟机上的 Cassandra

为了将来对我和其他人的参考,这对我来说适用于 Cassandra v3.10:

http://grokbase.com/t/cassandra/user/14cpyy7bt8/connect-to-c-instance-inside-virtualbox

使用 Cassandra 配置来宾 VM 后,我有一个主机专用网络适配器,其 IP 为 192.168.5.10。

然后不得不修改/etc/cassandra/cassandra.yaml设置:

来自

rpc_address: localhost

收件人

rpc_address: 192.168.5.10

然后运行 ​​sudo service cassandra restart 并给它 15 秒...

然后在来宾虚拟机或主机上,以下工作:

cqlsh 192.168.5.10

希望对某人有所帮助。

Vagrantfile 供参考

请注意,它还不适用于集群中的多个节点

# Adjustable settings
## Cassandra cluster settings
mem_mb = "3000"
cpu_count = "2"
server_count = 1
network = '192.168.5.'
first_ip = 10

servers = []
seeds = []
cassandra_tokens = []
(0..server_count-1).each do |i|
  name = 'cassandra-node' + (i + 1).to_s
  ip = network + (first_ip + i).to_s
  seeds << ip
  servers << {'name' => name,
              'ip' => ip,
              'provision_script' => "sleep 15; sudo sed -i -e 's/^rpc_address: localhost/rpc_address: #{ip}/g' /etc/cassandra/cassandra.yaml; sudo service cassandra restart;",
              'initial_token' => 2**127 / server_count * i}
end

# Configure VM server
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/xenial64"
  servers.each do |server|

    config.vm.define server['name'] do |x|
      x.vm.provider :virtualbox do |v|
        v.name = server['name']
        v.customize ["modifyvm", :id, "--memory", mem_mb]
        v.customize ["modifyvm", :id, "--cpus"  , cpu_count  ]
      end
      x.vm.network :private_network, ip: server['ip']
      x.vm.hostname = server['name']
      x.vm.provision "shell", path: "provision.sh"
      x.vm.provision "shell", inline: server['provision_script']

    end
  end
end

provision.sh

# install Java and a few base packages
add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install vim curl zip unzip git python-pip -y -q

# Java install - adjust if needed
# apt-get install openjdk-7-jdk -y -q
apt-get install openjdk-8-jdk -y -q

# Install Cassandra 
echo "deb http://www.apache.org/dist/cassandra/debian 310x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -
sudo apt-get update
sudo apt-get install cassandra -y
sudo service cassandra start

【讨论】:

  • 感谢您对我的帮助。但在我更新种子提供者列表之前,它对我不起作用。将 127.0.0.1 替换为访客 IP 地址seed_provider: # Ex: "&lt;ip1&gt;,&lt;ip2&gt;,&lt;ip3&gt;" - seeds: "11.9.2.123"
【解决方案2】:

我为 ubuntu vm(托管 cassandra 的访客机器)启用了桥接适配器。来宾 vm 的 inet 地址为 192.168.0.6。我的主机(macosx)inet addr 是 192.168.0.43,当我通过全局首选项(VirtualBox->Preferences->Network -> 仅限主机的网络)。 我还确保 cassandra.yaml 文件包含以下两个属性(除了 10k 其他属性!):

listen_address:192.168.0.6

rpc_address:192.168.0.6

通过这些设置,我能够将运行在我的 macosx(主机)上的 java 客户端连接到运行在 ubuntu(访客)vm 上的 cassandra 服务器。

【讨论】:

  • 我更改了 cassandra.yml 文件中的两个地址,现在在本地机器代码中,您将哪个端口用于“VM Cassandra connecrtivity”?就像在 cassandra.properties 文件中一样。
【解决方案3】:

假设您在 VirtualBox 中正确配置了网络,然后检查:

cassandra.yaml 配置,listen_address 应该是你的虚拟机的 IP,所以它可以用于远程连接。

更多信息: http://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configCassandra_yaml_r.html

【讨论】:

  • 它对我不起作用。我尝试输入 ifconfig 命令(“inet addr”字段)给出的 IP 地址,但没有任何改变。我也尝试将我找到的值放在 /etc/hostname 文件中,但也不起作用。
  • 你能从你的主机通过 SSH 连接到盒子吗?
  • 是的,我可以。这很奇怪。我还在虚拟框中转发了端口,但没有别的。尽管如此,我仍然可以使用我的主机 Windows 7 中的 putty 对其进行 ssh。它适用于 ssh,但不适用于 cassandra,也不适用于 Kafka(端口 9092)。
  • 在此处阅读有关虚拟框中网络选项的答案,并确保您已正确设置:unix.stackexchange.com/questions/108878/…
  • 也可能 $ /etc/init.d/iptables stop
猜你喜欢
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 2018-06-13
  • 2018-09-16
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
相关资源
最近更新 更多