Replacing a node's FQDN
Sometimes, a node's FQDN changes, but the node itself remains in the system under a different name. Simply changing the node name in the hosts section will not work because BS_CONTROLLER
internally stores the resource bindings to the FQDN:IcPort
pairs, where IcPort is the Interconnect port number on which the node operates.
Replacement procedure
- Determine the NodeId of the node to be replaced.
- Prepare the DefineBox command that describes the cluster resources, in which an element
EnforcedNodeId: <NodeId>
will be added for the resources of the node to be replaced. - Execute this command.
- Replace the FQDN in the hosts list in
cluster.yaml
. - Perform a rolling restart.
- Remove the EnforcedNodeId field from DefineBox and replace the Fqdn with the new node name.
- Execute DefineBox with the new values.
Example
Suppose a cluster consisting of three nodes:
config.yaml
:
- host: host1.my.sub.net
node_id: 1
location: {unit: 12345, data_center: MYDC, rack: r1}
- host: host2.my.sub.net
node_id: 2
location: {unit: 23456, data_center: MYDC, rack: r2}
- host: host3.my.sub.net
node_id: 3
location: {unit: 34567, data_center: MYDC, rack: r3}
DefineBox looks like this:
DefineBox {
BoxId: 1
Host { Key { Fqdn: "host1.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
Host { Key { Fqdn: "host2.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
Host { Key { Fqdn: "host3.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
}
Suppose we want to rename host1.my.sub.net to host4.my.sub.net. First, we create a DefineBox as follows:
DefineBox {
BoxId: 1
Host { Key { Fqdn: "host1.my.sub.net" IcPort: 19001 } HostConfigId: 1 EnforcedNodeId: 1 }
Host { Key { Fqdn: "host2.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
Host { Key { Fqdn: "host3.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
}
Then modify config.yaml
:
- host: host4.my.sub.net
node_id: 1
location: {unit: 12345, data_center: MYDC, rack: r1}
- host: host2.my.sub.net
node_id: 2
location: {unit: 23456, data_center: MYDC, rack: r2}
- host: host3.my.sub.net
node_id: 3
location: {unit: 34567, data_center: MYDC, rack: r3}
Next, perform a rolling restart of the cluster.
Finally, perform the second adjusted DefineBox:
DefineBox {
BoxId: 1
Host { Key { Fqdn: "host4.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
Host { Key { Fqdn: "host2.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
Host { Key { Fqdn: "host3.my.sub.net" IcPort: 19001 } HostConfigId: 1 }
}