Class PartitionGroupConfig
Hazelcast will always place partitions on different partition groups so as to provide redundancy.
There are seven partition group schemes defined in PartitionGroupConfig.MemberGroupType
: PER_MEMBER, HOST_AWARE
CUSTOM, ZONE_AWARE, NODE_AWARE, PLACEMENT_AWARE, SPI.
In all cases a partition will never be created on the same group. If there are more partitions defined than there are partition groups, then only those partitions, up to the number of partition groups, will be created. For example, if you define 2 backups, then with the primary, that makes 3. If you have only two partition groups only two will be created.
PER_MEMBER Partition Groups
This is the default partition scheme and is used if no other scheme is defined. Each Member is in a group of its own.Partitions (primaries and backups) will be distributed randomly but not on the same Member.
<partition-group enabled="true" group-type="PER_MEMBER"/>This provides good redundancy when Members are on separate hosts but not if multiple instances are being run from the same host.
HOST_AWARE Partition Groups
In this scheme, a group corresponds to a host, based on its IP address. Partitions will not be written to any other members on the same host.This scheme provides good redundancy when multiple instances are being run on the same host.
<partition-group enabled="true" group-type="HOST_AWARE"/>
CUSTOM Partition Groups
In this scheme, IP addresses, or IP address ranges, are allocated to groups. Partitions are not written to the same group. This is very useful for ensuring partitions are written to different racks or even availability zones.
For example, members in data center 1 have IP addresses in the range 10.10.1.* and for data center 2 they have
the IP address range 10.10.2.*. You would achieve HA by configuring a CUSTOM
partition group as follows:
<partition-group enabled="true" group-type="CUSTOM"> <member-group> <interface>10.10.1.*</interface> </member-group> <member-group> <interface>10.10.2.*</interface> </member-group> </partition-group>The interfaces can be configured with wildcards ('*') and also with address ranges e.g. '10-20'. Each member-group can have an unlimited number of interfaces.
You can define as many member-group
s as you want. Hazelcast will always store backups in a different
member-group to the primary partition.
ZONE_AWARE Partition Groups
In this scheme, groups are allocated according to the metadata provided by Discovery SPI. These metadata are availability zone, rack and host. The backups of the partitions are not placed on the same group so this is very useful for ensuring partitions are placed on different availability zones without providing the IP addresses to the config ahead.
<partition-group enabled="true" group-type="ZONE_AWARE"/>
NODE_AWARE Partition Groups
In this scheme, groups are allocated according to node name metadata provided by Discovery SPI. For container orchestration tools like Kubernetes and Docker Swarm, node is the term used to refer machine that containers/pods run on. A node may be a virtual or physical machine. The backups of the partitions are not placed on same group so this is very useful for ensuring partitions are placed on different nodes without providing the IP addresses to the config ahead.
<partition-group enabled="true" group-type="NODE_AWARE"/>
PLACEMENT_AWARE Partition Groups
In this scheme, groups are allocated according to the placement metadata provided by Discovery SPI. Depending on the cloud provider, this metadata indicates the placement information (rack, fault domain, etc.) of a VM in a zone. This scheme provides a finer granularity than ZONE_AWARE for partition groups and is useful to provide good redundancy when running members within a single availability zone.
<partition-group enabled="true" group-type="PLACEMENT_AWARE"/>
SPI Aware Partition Groups
In this scheme, groups are allocated according to the implementation provided by Discovery SPI.
<partition-group enabled="true" group-type="SPI"/>
Overlapping Groups
Care should be taken when selecting overlapping groups, e.g.
<partition-group enabled="true" group-type="CUSTOM">
<member-group>
<interface>10.10.1.1</interface>
<interface>10.10.1.2</interface>
</member-group>
<member-group>
<interface>10.10.1.1</interface>
<interface>10.10.1.3</interface>
</member-group>
</partition-group>
In this example there are 2 groups, but because interface 10.10.1.1 is shared between the 2 groups, this member
may store store primary and backups.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic enum
Type of member groups. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionaddMemberGroupConfig
(MemberGroupConfig memberGroupConfig) Adds aMemberGroupConfig
.clear()
Removes all thePartitionGroupConfig.MemberGroupType
instances.final boolean
Returns the MemberGroupType configured.Returns an unmodifiable collection containing allMemberGroupConfig
elements.final int
hashCode()
boolean
Checks if this PartitionGroupConfig is enabled.setEnabled
(boolean enabled) Enables or disables this PartitionGroupConfig.setGroupType
(PartitionGroupConfig.MemberGroupType memberGroupType) Sets the MemberGroupType.setMemberGroupConfigs
(Collection<MemberGroupConfig> memberGroupConfigs) Adds a MemberGroupConfig.toString()
-
Constructor Details
-
PartitionGroupConfig
public PartitionGroupConfig()
-
-
Method Details
-
isEnabled
public boolean isEnabled()Checks if this PartitionGroupConfig is enabled.- Returns:
true
if this PartitionGroupConfig is enabled,false
otherwise
-
setEnabled
Enables or disables this PartitionGroupConfig.- Parameters:
enabled
-true
to enable,false
to disable- Returns:
- the updated PartitionGroupConfig
-
getGroupType
Returns the MemberGroupType configured. Could benull
if no MemberGroupType has been configured.- Returns:
- the MemberGroupType
-
setGroupType
Sets the MemberGroupType. A @{link MemberGroupType#CUSTOM} indicates that custom groups are created. With thePartitionGroupConfig.MemberGroupType.HOST_AWARE
group type, Hazelcast makes a group for every host, that prevents a single host containing primary and backup. See theMemberGroupConfig
for more information.- Parameters:
memberGroupType
- the MemberGroupType to set- Returns:
- the updated PartitionGroupConfig
- Throws:
IllegalArgumentException
- if memberGroupType isnull
- See Also:
-
addMemberGroupConfig
Adds aMemberGroupConfig
. Duplicate elements are not filtered.- Parameters:
memberGroupConfig
- the MemberGroupConfig to add- Returns:
- the updated PartitionGroupConfig
- Throws:
IllegalArgumentException
- if memberGroupConfig isnull
- See Also:
-
getMemberGroupConfigs
Returns an unmodifiable collection containing allMemberGroupConfig
elements.- Returns:
- an unmodifiable collection containing all
MemberGroupConfig
elements - See Also:
-
clear
Removes all thePartitionGroupConfig.MemberGroupType
instances.- Returns:
- the updated PartitionGroupConfig
- See Also:
-
setMemberGroupConfigs
Adds a MemberGroupConfig. This MemberGroupConfig only has meaning when the group-type is set toPartitionGroupConfig.MemberGroupType.CUSTOM
. See thePartitionGroupConfig
for more information and examples of how this mechanism works.- Parameters:
memberGroupConfigs
- the collection of MemberGroupConfig to add- Returns:
- the updated PartitionGroupConfig
- Throws:
IllegalArgumentException
- if memberGroupConfigs isnull
- See Also:
-
equals
-
hashCode
public final int hashCode() -
toString
-