1

I am unable to complete the

"Exercise 6 - Node" from DS201: Foundations of Apache Cassandra™ and DataStax Enterprise

From "Exercise 6 - Node", I followed all the steps provided. See the exception , I am unable to complete successfully. Could you please help , what is that I am doing wrong, why I am unable to varify the status of NODE#1. using the command. /home/ubuntu/node1/bin/nodetool status

Here is the erro rmessage, "error: No nodes present in the cluster. Has this node finished starting up?"

I am trying to setup the cluster by creating two cassandra DB node ( ie. node1 and node2 ) in the same host machine ( 127.0.0,1 ).

  1. To make a two-node cluster, we will unzip the DataStax Enterprise™ tarball twice making two folders: node1 and node2. In your terminal, execute the following commands within the /home/ubuntu directory:
tar -xf dse-6.0.0-bin.tar.gz
mv dse-6.0.0 node1
labwork/config_node 1
tar -xf dse-6.0.0-bin.tar.gz
mv dse-6.0.0 node2
labwork/config_node 2
  1. Open the /home/ubuntu/node2/resources/cassandra/conf/cassandra.yaml file in vi, nano or any other text editor.

  2. Change the initial_token value and set it to 9223372036854775807 (note you need a space between the colon and the value). This node will manage the second half of the token range--the positive tokens.

# initial_token allows you to specify tokens manually. While you can use it with
# vnodes (num_tokens > 1, above) -- in which case you should provide a
# comma-separated list -- it's primarily used when adding nodes to legacy clusters
# that do not have vnodes enabled.
initial_token: 9223372036854775807

Save the changes to the file and exit the text editor.

  1. In your terminal, start the first node via /home/ubuntu/node1/bin/dse cassandra Wait for the node to start up. Once it has done so, press enter to get back to the prompt.

  2. Run the /home/ubuntu/node1/resources/cassandra/bin/nodetool status command to verify the node is working properly.

ubuntu@ds201-node1:~$ /home/ubuntu/node1/resources/cassandra/bin/nodetool status
Datacenter: Cassandra
=====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Owns Host ID Token 
Rack
UN 127.0.0.1 114.83 KiB ? e2ba30fc-1589-4ae4-8f98-69051151c44f 0 
rack1

The UN indicates UP NORMAL meaning the node is ready to go. Load indicates current disk space usage. Owns indicates how many tokens this node is responsible for (it is the only node in the ring at the moment). Token should be 0 (the same value set in the cassandra.yaml file). We discuss racks later in the course.

  1. Start the second node via /home/ubuntu/node2/bin/dse cassandra command. This node will take longer to bootstrap and join the cluster. Wait for the second node to finish bootstrapping before continuing.

  2. Use /home/ubuntu/node1/resources/cassandra/bin/nodetool status again to view the current state of the cluster.

ubuntu@ds201-node1:~$ /home/ubuntu/node1/resources/cassandra/bin/nodetool status
Datacenter: Cassandra
=====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 127.0.0.1 124.53 KiB 1 ? 2f06ea12-e5cc-40fd-aca5-24a1accedc39 rack1
UN 127.0.0.2 117.34 KiB 1 ? 6025f510-1054-45d7-8c9d-cb40c60b5787 rack1

Notice both nodes are now up and normal. If not, please consult your instructor

Exception detail (2.1) NODE#1

$ /home/ubuntu/node1/bin/nodetool status
2023-03-19 23:51:15,589: error: No nodes present in the cluster. Has this node finished starting up?
-- StackTrace --
java.lang.RuntimeException: No nodes present in the cluster. Has this node finished starting up?
        at org.apache.cassandra.dht.Murmur3Partitioner.describeOwnership(Murmur3Partitioner.java:267)
        at org.apache.cassandra.service.StorageService.effectiveOwnership(StorageService.java:5807)
        at org.apache.cassandra.service.StorageService.effectiveOwnership(StorageService.java:213)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
        at jdk.internal.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at java.base/sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:260)
        at java.management/com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)
        at java.management/com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
        at java.management/com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
        at java.management/com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)
        at java.management/com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)
        at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:809)
        at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1466)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)
        at java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:827)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)

param@siva-Lenovo-Edge-15:/home/ubuntu/node1/bin$

/home/ubuntu/node1/bin$ ./cqlsh 127.0.0.1 9041
Connected to Test Cluster at 127.0.0.1:9041.
[cqlsh 6.8.0 | DSE 6.8.33 | CQL spec 3.4.5 | DSE protocol v2]
Use HELP for help.
cqlsh>

(2.1) NODE#2

/home/ubuntu/node2/bin$  ./nodetool status
Datacenter: Cassandra
=====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving/Stopped
--  Address    Load       Owns (effective)  Host ID                               Token                                    Rack
UN  127.0.0.2  238.88 KiB  100.0%            644cbad7-75d2-4f1c-ab05-427b1017b96f  0                                        rack1

/home/ubuntu/node2/bin$ ./cqlsh 127.0.0.1 9042
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 6.8.0 | DSE 6.8.33 | CQL spec 3.4.5 | DSE protocol v2]
Use HELP for help.
cqlsh>

diff of node1 cassandra.yaml and node2 cassandra.yaml

param@:/home/ubuntu/node1/resources/cassandra/conf$ diff  /home/ubuntu/node1/resources/cassandra/conf/cassandra.yaml  /home/ubuntu/node2/resources/cassandra/conf/cassandra.yaml
42c42
< initial_token: 0
---
> initial_token: 9223372036854775807
75c75
< hints_directory: /home/ubuntu/node1/data/hints
---
> hints_directory: /home/ubuntu/node2/data/hints
208c208
<    - /home/ubuntu/node1/data/data
---
>    - /home/ubuntu/node2/data/data
218c218
< commitlog_directory: /home/ubuntu/node1/data/commit-log
---
> commitlog_directory: /home/ubuntu/node2/data/commit-log
229c229
< cdc_raw_directory: /home/ubuntu/node1/data/cdc_raw
---
> cdc_raw_directory: /home/ubuntu/node2/data/cdc_raw
353c353
< saved_caches_directory: /home/ubuntu/node1/data/saved-caches
---
> saved_caches_directory: /home/ubuntu/node2/data/saved-caches
573c573
< listen_address: 127.0.0.1
---
> listen_address: 127.0.0.1
608c608
< native_transport_port: 9041
---
> native_transport_port: 9042
:/home/ubuntu/node1/resources/cassandra/conf$

1 Answer 1

2

Looks like you are doing lab 7 not lab 6. In this lab you need to run the config_node command twice. This command should modify cassandra.yaml for node1 and node2 and assign them listen IPs of 127.0.0.1 and 127.0.0.2

In your diff of the two yaml files I do not see the IP 127.0.0.2

This is the correct command sequence:

tar -xf dse-6.8.0-bin.tar.gz
mv dse-6.8.0 node1
cp -r node1 node2
labwork/config_node 1
labwork/config_node 2
5
  • Hi dchung Thank you for your response. You are correct, I am working on lab 7. Pointed issue in cassandra.yaml is corrected, still I spot issue, error: No nodes present in the cluster. Has this node finished starting up? INFO [DSE main thread] 2023-03-29 07:18:32,880 StorageService.java:3319 - Nodes /127.0.0.1 and /127.0.0.2 have the same token 0. /127.0.0.1 is the new owner WARN [DSE main thread] 2023-03-29 07:18:32,881 TokenMetadata.java:225 - Token 0 changing ownership from /127.0.0.2 to /127.0.0.1
    – Sivaparam
    Mar 29 at 14:51
  • @Sivaparam that message usually occurs because the node(s) have not completed their startup routines. Try waiting longer. Because you have more than one node running on thre same VM it may take a few minutes.
    – dchung
    Mar 30 at 15:06
  • Hi dchung . No I have no VM. I am installing under same host. $ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 siva-Lenovo-Edge-15 127.0.0.2 localhost 127.0.1.2 siva-Lenovo-Edge-15 127.0.0.3 localhost 127.0.1.3 siva-Lenovo-Edge-15
    – Sivaparam
    Mar 30 at 15:58
  • $ ping 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.030 ms 64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.034 ms ^C param@siva-Lenovo-Edge-15:/home/ubuntu/node2/bin$ ping 127.0.0.2 PING 127.0.0.2 (127.0.0.2) 56(84) bytes of data. 64 bytes from 127.0.0.2: icmp_seq=1 ttl=64 time=0.029 ms ^C
    – Sivaparam
    Mar 30 at 15:58
  • Do I have to install VM for this exercise?
    – Sivaparam
    Mar 30 at 16:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.