nodetool assassinate
Forcibly removes a dead node from gossip when normal removal methods fail.
Synopsis
Section titled “Synopsis”nodetool [connection_options] assassinate <ip_address>See connection options for connection options.
Description
Section titled “Description”nodetool assassinate forcibly removes a node's gossip state from the cluster. This is a last-resort operation when a dead node cannot be removed through normal means (decommission or removenode).
Last Resort Only
Assassinate should only be used when:
- Node is permanently dead
removenodehas failed or hung- Gossip state is corrupted
- Normal cluster operations are blocked
Arguments
Section titled “Arguments”| Argument | Description |
|---|---|
ip_address | IP address of the node to assassinate |
When to Use
Section titled “When to Use”Removenode Failed
Section titled “Removenode Failed”When nodetool removenode fails or hangs:
# Removenode stuck for hoursnodetool removenode status# Shows: InProgress but no movement
# Assassinate as last resortnodetool assassinate 192.168.1.102Ghost Node in Cluster
Section titled “Ghost Node in Cluster”Node was removed but still appears in nodetool status:
# Node shows DN or LEFT but won't disappearnodetool status# Shows: DN 192.168.1.102 ...
nodetool assassinate 192.168.1.102Stuck Decommission
Section titled “Stuck Decommission”When a node started decommissioning but failed midway:
# Node shows UL but hasn't progressed# Node is now unreachablenodetool assassinate 192.168.1.102Schema Blocked by Dead Node
Section titled “Schema Blocked by Dead Node”Schema changes fail due to unreachable node:
# Schema change times out waiting for dead node# After confirming node is permanently deadnodetool assassinate 192.168.1.102When NOT to Use
Section titled “When NOT to Use”Node is Still Running
Section titled “Node is Still Running”Never Assassinate Live Nodes
If the node is actually running:
- Data inconsistency will occur
- Node will try to rejoin
- Causes data inconsistency as both nodes serve conflicting data
Verify node is truly dead first.
Before Trying Normal Methods
Section titled “Before Trying Normal Methods”Always attempt in this order:
- Node alive? → Use
decommissionon the node - Node dead? → Use
removenodefrom any live node - Removenode failed? → Use
assassinateas last resort
Network Issues
Section titled “Network Issues”If the node is temporarily unreachable (not dead):
- Fix network issues instead
- Don't assassinate - node will recover
Before Assassinating
Section titled “Before Assassinating”Verify Node is Dead
Section titled “Verify Node is Dead”# Try to reach nodeping 192.168.1.102ssh 192.168.1.102 'nodetool info'
# Check cluster statusnodetool statusnodetool gossipinfo | grep -A10 "/192.168.1.102"Document the Situation
Section titled “Document the Situation”Document Before Acting
Record:
- Why node is being assassinated
- Node details (Host ID, tokens)
- Current cluster state
- Any error messages from removenode
Ensure Quorum
Section titled “Ensure Quorum”Verify remaining nodes can satisfy read/write quorum for all keyspaces.
Examples
Section titled “Examples”Basic Assassination
Section titled “Basic Assassination”nodetool assassinate 192.168.1.102Verify Removal
Section titled “Verify Removal”# Check node is gonenodetool status
# Check gossip statenodetool gossipinfo | grep 192.168.1.102# Should return nothingProcess Flow
Section titled “Process Flow”Node Removal Decision Tree
Section titled “Node Removal Decision Tree”| Step | Question | Action |
|---|---|---|
| 1 | Is node responding? | Yes: Use nodetool decommission (on the node itself) |
| 2 | Did nodetool removenode <host-id> succeed? | Yes: Done. No: Continue |
| 3 | Have you waited a reasonable time? | No: Wait longer, monitor removenode status |
| 4 | Is node confirmed dead? | Yes: Use nodetool assassinate <ip> (last resort). No: Investigate further, try to recover node |
After Assassination
Section titled “After Assassination”Verify Cluster State
Section titled “Verify Cluster State”# Check cluster statusnodetool status
# Verify schema agreementnodetool describecluster
# Check gossip is cleannodetool gossipinfo | grep -c "192.168.1.102" # Should be 0Run Repair
Section titled “Run Repair”Data may be inconsistent after forced removal:
# On each remaining nodenodetool repair -prClean Up Hardware
Section titled “Clean Up Hardware”If the assassinated node still exists physically:
- Remove it from the network
- Clear its data directories if reusing hardware
Common Issues
Section titled “Common Issues”Node Reappears After Assassination
Section titled “Node Reappears After Assassination”If the "dead" node was actually alive:
Data Inconsistency
The node will attempt to rejoin, causing data conflicts:
- Immediately stop Cassandra on that node
- Clear its data directories
- Run repair on remaining nodes
"Unknown endpoint"
Section titled “"Unknown endpoint"”ERROR: Unknown endpoint /192.168.1.102The node is not in the cluster's gossip state. No action needed.
Assassination Doesn't Complete
Section titled “Assassination Doesn't Complete”If assassinate hangs:
- Check logs for errors
- Try from a different node
- May need to restart affected nodes
Schema Still Blocked
Section titled “Schema Still Blocked”If schema changes still fail after assassination:
# Check schema versionsnodetool describecluster
# Force schema reset if needed (last resort)nodetool resetlocalschemaRisks and Consequences
Section titled “Risks and Consequences”Data Loss Risk
Section titled “Data Loss Risk”Potential Data Loss
Assassinating a node that had unique data (RF=1 ranges) results in permanent data loss. Ensure:
- RF > 1 for all keyspaces
- Other replicas exist and are healthy
Cluster Instability
Section titled “Cluster Instability”Assassination can cause temporary instability:
- Gossip reconvergence
- Token range recalculation
- Schema propagation issues
Recovery Difficulty
Section titled “Recovery Difficulty”Once assassinated, the node cannot easily rejoin:
- Must be bootstrapped as new node
- Or completely replaced
Best Practices
Section titled “Best Practices”Assassination Guidelines
- Last resort only - Try all other methods first
- Verify node is dead - Ping, SSH, check physically
- Document everything - Record why and when
- Ensure quorum - Verify remaining capacity
- Repair after - Run repair on remaining nodes
- Remove hardware - Prevent zombie node from returning
- Review root cause - Understand why node died
Related Commands
Section titled “Related Commands”| Command | Relationship |
|---|---|
| decommission | Graceful removal of live node |
| removenode | Remove dead node (preferred) |
| status | Check cluster state |
| gossipinfo | View gossip details |
| repair | Run after assassination |
| describecluster | Check schema agreement |