无法连接到我的VM上托管的cassandra

时间:2015-09-03 12:46:38

标签: ubuntu networking tcp virtualbox tcpdump

我有一台windowns 7机器,我安装了Virtual Box,我正在运行Ubuntu虚拟机。

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

当我尝试使用VM中的客户端连接到我的cassandra实例时,它没问题。但如果我尝试从我的主机(我的实际电脑,Windows 7)连接到它,我就不能!

当我在我的Ubuntu VM上使用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上禁用防火墙。

对此有何帮助?

3 个答案:

答案 0 :(得分:1)

我为ubuntu vm(托管cassandra的来宾计算机)启用了桥接适配器。 guest虚拟机的inet addr是192.168.0.6。当我通过全局首选项创建一个新的仅主机网络时,我的主机(macosx)inet addr为192.168.0.43,虚拟接口(vboxnet0)由VirtualBox给出了一个192.168.56.1的inet地址(VirtualBox-> Preferences-&gt ;网络 - >仅主机网络)。 我还确保cassandra.yaml文件包含以下两个属性(除了10k其他!):

listen_address :192.168.0.6

rpc_address :192.168.0.6

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

答案 1 :(得分:1)

这是my answer from another question

的转贴

从主机操作系统访问来宾VM上的Cassandra

为了将来参考我自己和其他人,这对我来说对Cassandra v3.10来说很有用:

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

一旦您的Guest虚拟机配置了Cassandra,我就拥有了一台仅限主机的网络适配器,其IP为192.168.5.10。

然后必须修改/etc/cassandra/cassandra.yaml来设置:

发件人

rpc_address: localhost

rpc_address: 192.168.5.10

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

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

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

答案 2 :(得分:0)

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

cassandra.yaml配置,listen_address应该是您的VM的IP,因此它可用于远程连接。

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