我有一台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上禁用防火墙。
对此有何帮助?
答案 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
的转贴为了将来参考我自己和其他人,这对我来说对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
希望能有所帮助。
请注意,它不适用于群集中的多个节点
# 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
# 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