I’m having issues getting a single-node Cassandra cluster to run on a Ubuntu 16.04 VM with only IPv6 available. I’m running Oracle Java 8 (8u121-1~webupd8~2), Cassandra 3.10 (installed via the Cassandra http://www.apache.org/dist/cassandra/debian packages.)
I consistently get a “Protocol family unavailable” exception: ERROR [main] 2017-04-11 09:54:23,991 CassandraDaemon.java:752 - Exception encountered during startup java.lang.RuntimeException: java.net.SocketException: Protocol family unavailable at org.apache.cassandra.net.MessagingService.getServerSockets(MessagingService.java:730) ~[apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.net.MessagingService.listen(MessagingService.java:664) ~[apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.net.MessagingService.listen(MessagingService.java:648) ~[apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:773) ~[apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.service.StorageService.initServer(StorageService.java:666) ~[apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.service.StorageService.initServer(StorageService.java:612) ~[apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:394) [apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:601) [apache-cassandra-3.10.jar:3.10] at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:735) [apache-cassandra-3.10.jar:3.10] Caused by: java.net.SocketException: Protocol family unavailable at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_121] at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_121] at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_121] at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_121] at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_121] at org.apache.cassandra.net.MessagingService.getServerSockets(MessagingService.java:714) ~[apache-cassandra-3.10.jar:3.10] ... 8 common frames omitted `lo` (loopback) has both `inet` and `inet6` addresses, but `eth0` has no `inet` addresses, so only inet6 addr entries (both a local and a global scope address are configured). My configuration changes: listen_address: <local or global scope IPv6 address> listen_interface_prefer_ipv6: true Tracing through the source code the exception shows that it is the listen_address value above that throws the exception, changing it back to 127.0.0.1 makes the server work again (but then I don’t get to use it on my local network). I tried both the local and the global scope IPv6 address. I tried changing the JVM configuration to prefer IPv6 by editing /etc/cassandra/cassandra-env.sh: --- etc/cassandra/cassandra-env.sh 2017-01-31 16:29:32.000000000 +0000 +++ /etc/cassandra/cassandra-env.sh 2017-04-11 09:52:51.456000000 +0000 @@ -290,6 +290,9 @@ # to the location of the native libraries. JVM_OPTS="$JVM_OPTS -Djava.library.path=$CASSANDRA_HOME/lib/sigar-bin" +#JVM_OPTS="$JVM_OPTS -Djava.net.preferIPv4Stack=true" +JVM_OPTS="$JVM_OPTS -Djava.net.preferIPv6Addresses=true" + JVM_OPTS="$JVM_OPTS $MX4J_ADDRESS" JVM_OPTS="$JVM_OPTS $MX4J_PORT" JVM_OPTS="$JVM_OPTS $JVM_EXTRA_OPTS" But this makes no difference I also tried using `listen_interface` instead, but that only changes the error message to: ERROR [main] 2017-04-11 10:35:16,426 CassandraDaemon.java:752 - Exception encountered during startup: Configured listen_interface "eth0" could not be found What else can I do? Martijn Pieters