How do we convert a service fabric seed node to a regular node?

Billy Soomro 1 Reputation point
2022-01-05T11:58:38.47+00:00

Hi,

I'm trying to remove seed nodes in a stand alone service fabric cluster but I can't find any information to convert them to regular nodes or vice versa in preparation for removal for replacement nodes.

I found the following on Microsoft Learn:

"Starting from Service Fabric 6.5, in order to use this cmdlet for seed nodes, please change the seed nodes to regular (non-seed) nodes and then invoke this cmdlet to remove the node state"

But I'm not exactly sure how to change the seed nodes to regular (non-seed) nodes.

Please advise.

Thanks,
Billy

Azure Service Fabric
Azure Service Fabric
An Azure service that is used to develop microservices and orchestrate containers on Windows and Linux.
252 questions
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. Prrudram-MSFT 21,966 Reputation points
    2022-01-13T10:50:22.217+00:00

    Hello @Billy Soomro ,

    The following statement, "Starting from Service Fabric 6.5, in order to use this cmdlet for seed nodes, please change the seed nodes to regular (non-seed) nodes and then invoke this cmdlet to remove the node state" from the documentation is really only applicable to Azure clusters (SFRP clusters), to change a seed node to a regular node in Azure you would call Disable-ServiceFabricNode -NodeName myNT_4 -Intent RemoveNode, which will trigger a Cluster upgrade and reassigns the seed node status to another node in the primary node type.

    For standalone clusters the “Seed nodes” are managed by the SF runtime and will be reassigned during the cluster config upgrade when you remove a node.

    Using the example config below:
    You have NodeType0 which is marked “isPrimary”: true. When the cluster was created it had 5 nodes, SF runtime selected seed nodes from this primary nodetype and effectively set the reliability level as high as it could for the cluster based on the # of available nodes in the primary nodetype (3 bronze, 5 silver, 7 gold, 9 platinum). In this case since you had 5 nodes it would have marked all five nodes as “Seed Node”, and the cluster Reliability will be Silver.

    If you simply want to remove a node in this scenario (let’s say you want to remove vm4), when you run the configuration upgrade it will initiate multiple upgrades. First the cluster reliability would be reduced to Bronze, which will cause the “Seed Node” count to be reduced to 3, and then vm4 would be removed from the cluster.

    If you are attempting to upgrade the machines(VM) in the cluster and want to ensure the Reliability level is not affected, then add the new machine (1 additional node of NodeType0) to the cluster before removing the machine being retired.

    best practice: The replacement of primary nodes should be performed one node after another, instead of removing and then adding in batches.

    "nodes": [  
        {  
            "nodeName": "vm0",  
            "iPAddress": "machine1",  
            "nodeTypeRef": "NodeType0",  
            "faultDomain": "fd:/dc1/r0",  
            "upgradeDomain": "UD0"  
        },  
        {  
            "nodeName": "vm1",  
            "iPAddress": "machine2",  
            "nodeTypeRef": "NodeType0",  
            "faultDomain": "fd:/dc1/r1",  
            "upgradeDomain": "UD1"  
        },  
        {  
            "nodeName": "vm2",  
            "iPAddress": "machine3",  
            "nodeTypeRef": "NodeType0",  
            "faultDomain": "fd:/dc1/r2",  
            "upgradeDomain": "UD2"  
        },  
        {  
            "nodeName": "vm3",  
            "iPAddress": "machine4",  
            "nodeTypeRef": "NodeType0",  
            "faultDomain": "fd:/dc1/r3",  
            "upgradeDomain": "UD3"  
        },  
        {  
            "nodeName": "vm4",  
            "iPAddress": "machine5",  
            "nodeTypeRef": "NodeType0",  
            "faultDomain": "fd:/dc1/r4",  
            "upgradeDomain": "UD4"  
       }  
    ],  
    


    "nodeTypes": [
    {
    "name": "NodeType0",
    "clientConnectionEndpointPort": "19000",
    "clusterConnectionEndpointPort": "19001",
    "leaseDriverEndpointPort": "19002",
    "serviceConnectionEndpointPort": "19003",
    "httpGatewayEndpointPort": "19080",
    "reverseProxyEndpointPort": "19081",
    "applicationPorts": {
    "startPort": "20001",
    "endPort": "20031"
    },
    "ephemeralPorts": {
    "startPort": "49152",
    "endPort": "65535"
    },
    "isPrimary": true
    }
    ],

    Hope this helps.

    (If the response was helpful please don't forget to upvote and/or accept as answer, thank you)

    0 comments No comments