Apache Cassandra nodes need reachable seed addresses when they start so gossip can discover the rest of the ring. If the list points at retired hosts, unreachable networks, or a joining non-seed node points only at itself, startup can stall and cluster checks may show missing or down peers.
The seed list lives under seed_provider in /etc/cassandra/cassandra.yaml on packaged Linux installs. SimpleSeedProvider expects one comma-delimited string of addresses, and Cassandra uses those addresses as gossip contact points rather than as replica owners or client connection targets.
Use existing UN nodes as seeds, normally more than one per datacenter or failure domain when available. Change the file on each Cassandra node and restart nodes one at a time so at least one seed remains reachable while the cluster gossips the updated view.
$ nodetool status Datacenter: DC1 ============== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.10.20.11 842.31 MiB 16 ? 8f87a6f2-3bb0-4d09-b63c-5d6f6b9c45d1 RAC1 UN 10.10.20.12 819.44 MiB 16 ? 67d2b72a-4d55-42c7-a85f-c662b08ec8e8 RAC1 UN 10.10.20.13 807.02 MiB 16 ? b7b90a0a-391a-420d-97c6-a34a2cf97f9f RAC1
Choose seed candidates that already show UN. Fix down nodes or topology mismatches before using them as seed contact points.
Use stable private addresses or resolvable hostnames that Cassandra nodes can reach on the internode storage port. In a multi-datacenter cluster, keep at least one reachable seed in each datacenter; using two per datacenter is common when capacity allows it.
$ sudo cp -a /etc/cassandra/cassandra.yaml /etc/cassandra/cassandra.yaml.bak
$ sudoedit /etc/cassandra/cassandra.yaml
seed_provider: - class_name: org.apache.cassandra.locator.SimpleSeedProvider parameters: - seeds: "10.10.20.11,10.10.20.12"
The same seed list can be used on every node in the datacenter. When a new server should become a seed, bootstrap it first with existing seeds, wait until it is UN, then add it to the seed list during a later rolling restart.
$ sudo grep -n -- "- seeds:" /etc/cassandra/cassandra.yaml 706: - seeds: "10.10.20.11,10.10.20.12"
$ sudo systemctl restart cassandra
Do not restart every node at once. Wait for the edited node to rejoin before changing the next node so seed contact points remain available.
$ nodetool statusgossip running
$ nodetool status Datacenter: DC1 ============== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.10.20.11 842.93 MiB 16 ? 8f87a6f2-3bb0-4d09-b63c-5d6f6b9c45d1 RAC1 UN 10.10.20.12 819.44 MiB 16 ? 67d2b72a-4d55-42c7-a85f-c662b08ec8e8 RAC1 UN 10.10.20.13 807.02 MiB 16 ? b7b90a0a-391a-420d-97c6-a34a2cf97f9f RAC1
The edited node should return as UN. If it stays down or missing, check Cassandra logs for seed reachability, listen address, and internode port errors.
Keep the seed list consistent across nodes unless a node has a documented network reason to use a different contact point.