load_balancing
Random (默认)
最近的主机名
主机名的 Levenshtein 距离
nearest_hostname 类似,但它会根据 Levenshtein 距离 来比较主机名。例如:
主机名最长公共前缀
nearest_hostname 类似,但会优先选择主机名与本地主机名具有最长公共前缀的副本 (公共前缀越长,优先级越高) 。不同于 nearest_hostname 按字符位置逐一统计差异,这种策略不会因主机名中数字分段的长度不同而受到干扰。例如,对于本地主机名 sfe301:
sfe10101,因为它与 sfe301 具有最长的公共前缀 (sfe,长度为 3) 。
公共前缀长度相同的副本会被随机选中。特别是,当没有任何副本与本地主机名共享前缀时 (即所有公共前缀长度都为 0) ,此策略的行为与 random 完全相同。
主机名最长公共后缀
hostname_longest_common_prefix 类似,但这里比较的是最长公共 后缀,而不是前缀。当数据中心标识被编码到主机名的后缀中时,这一点会很有用。例如,对于本地主机名 et46gtghn.qc.localdomain:
ab999.qc.localdomain,因为它与 et46gtghn.qc.localdomain 共享最长的公共后缀 (.qc.localdomain,长度为 15) 。
如果副本的公共后缀长度相同,则会随机选择。特别是,当没有任何副本与本地主机名共享任何后缀时 (即所有公共后缀长度都为 0) ,此策略的行为与 random 完全一致。
按顺序
第一个或随机
first_or_random 算法解决了 in_order 算法存在的问题。使用 in_order 时,如果某个副本宕机,下一个副本会承受双倍负载,而其余副本仍处理平常的流量。使用 first_or_random 算法时,负载会在仍然可用的副本之间均匀分配。
可以通过设置 load_balancing_first_offset 来显式指定哪个副本是第一个副本。这样可以更好地控制在各副本之间重新平衡查询工作负载。
轮询
round_robin 策略的查询计入统计) 。