创建高可用规则

ha-promote-on-shutdown: 表示主动停止主节点的服务,其它节点如何替代主节点,选取主节点的行为,是在可用性和可靠性之间做出的权衡的选择;选择参数有:when-synced | always

when-sysnced 表示只有镜像队列消息体同步的情况下,才切换,相反:always是不同步也可以切换。

ha-promote-on-failure: 表示异常情况下其它节点如何替代主节点,比如Crash、断网等,默认参数when-synced.
选择参数有: when-synced | always

ha-promote-on-failure 值设置为always 可以提升不同步的镜像为主镜像(这里针对的是镜像消息体不同步,前提镜像队列是同步的),同时 ha-promote-on-shutdown 不管为always还是when-synced,都会发生提升这个过程。

ha-promote-on-failure 默认值就是when-synced 不提升不同步的镜像为主镜像(这里针对的是镜像消息体不同步,前提镜像队列是同步的),同时 ha-promote-on-shutdown 不管为always还是when-synced,都不会发生提升这个过程。

所以 ha-promote-on-failure 策略优先级高于 ha-promote-on-shutdown。

所以咱们的策略可以写成:(原因是咱能可以容忍一定比例的消息丢失,但不容许队列丢失)。
rabbitmqctl set_policy ha-two “^.*” ‘{“ha-mode”:“exactly”,“ha-params”:2,“ha-sync-mode”:“automatic”,“ha-promote-on-failure”: “always”,“ha-promote-on-shutdown”:“always”}’

因3.6.14没有ha-promote-on-failure参数,可以不设置。

rabbitmqctl set_policy ha-two “^.*” ‘{“ha-mode”:“exactly”,“ha-params”:2,“ha-sync-mode”:“automatic”,“ha-promote-on-shutdown”:“always”}’

总结: rabbitmq 可以使用镜像模式,但没必要all全量镜像,保留两个镜像就行,一个是主另一个是备,有两个好处,一个脑裂因素干扰少,另一个可以减少同步开销。
同时必须配置 “ha-sync-mode”:“automatic”,不然如果主恢复后,还需要人工点击同步步骤。

配置文件的调优

/etc/rabbitmq/rabbitmq.config
{log_levels, [{connection, error}]}, # 只收取logs error 日志
{vm_memory_high_watermark, 0.7}, # 调整内存最大水槽
{vm_memory_high_watermark_paging_ratio, 0.75}, #调整在使用多大内存落盘数据 举个例子: 比如物理内存是32G 迫使消息体落地的方式就是 32G0.70.75= 16.8G 也就是超过16.8G的时候,rabbitmq 被迫内存消息体落地

{cluster_partition_handling, pause_minority} #有三种模式 ignore 网络很可靠,不执行rabbitmqctl stop_app rabbitmqctl start_app 来恢复rabbitmq集群状态,需要人工参与 (适合两个节点的集群)

#pause_minority 网络不是很可靠,关闭少数派选举的权利,自动执行恢复的命令rabbitmqctl stop_app rabbitmqctl start_app,避免没必要的脑裂

                                                                           # autoheal: 你的网络非常不可靠,你更关心服务的连续性而不是元数据的完整性。适合有两个节点的集群。

调整文件描述符和socket描述符大小

/etc/docker/daemon.json
{
“default-ulimits”: {
 “nofile”: {
 “Name”: “nofile”,
 “Hard”: 655350,
 “Soft”: 655350
 }
 }
 }