站長資訊網
最全最豐富的資訊網站

RabbitMQ 生產環境配置詳解

一 rabbitmq 生產部署

RabbitMQ 常用的三種自定義服務器的通用方法:

  • 配置文件 rabbitmq.conf
  • 環境變量文件 rabbitmq-env.conf
  • 補充配置文件 advanced.config

rabbitmq.conf和rabbitmq-env.conf的位置

  • 在二進制安裝中路徑是在 :安裝目錄下的/etc/rabbitmq/
  • rpm 安裝: /etc/rabbitmq/

如果rabbitmq.conf和rabbitmq-env.conf 的兩個文件不存在,那么我們可以創建該文件,然后我們可以通過環境變量
指定該文件的位置。

補充 :

  • rabbitmqctl rabbitmqctl 是管理虛擬主機和用戶權限的工具
  • rabbitmq-plugins 是管理插件的工具

1.1 rabbitmq.conf

在rabbitmq 3.7.0 之前,rabbitmq.conf 使用了Erlang語法配置格式,新的版本使用了sysctl 格式.

sysctl 語法:

  • 單個信息都在一行里面
  • 配置信息以key value 的形式保存。
  • ‘#’開頭表示注釋。

配置示例文件:rabbitmq.conf.example

配置屬性和描述(官網鏈接)

屬性 描述 默認值
listeners 要監聽 AMQP 0-9-1 and AMQP 1.0 的端口 listeners.tcp.default = 5672
num_acceptors.tcp 接受tcp連接的erlang 進程數 num_acceptors.tcp = 10
handshake_timeout AMQP 0-9-1 超時時間,也就是最大的連接時間,單位毫秒 handshake_timeout = 10000
listeners.ssl 啟用TLS的協議 默認值為none
num_acceptors.ssl 接受基于TLS協議的連接的erlang 進程數 num_acceptors.ssl = 10
ssl_options TLS 配置 ssl_options =none
ssl_handshake_timeout TLS 連接超時時間 單位為毫秒 ssl_handshake_timeout = 5000
vm_memory_high_watermark 觸發流量控制的內存閾值,可以為相對值(0.5),或者絕對值 vm_memory_high_watermark.relative = 0.6 ,vm_memory_high_watermark.absolute = 2GB 默認vm_memory_high_watermark.relative = 0.4
vm_memory_calculation_strategy 內存使用報告策略,assigned:使用Erlang內存分配器統計信息 rss:使用操作系統RSS內存報告。這使用特定于操作系統的方法,并可能啟動短期子進程。legacy:使用遺留內存報告(運行時認為將使用多少內存)。這種策略相當不準確。erlang 與legacy一樣 是為了向后兼容 vm_memory_calculation_strategy = allocated
vm_memory_high_watermark_paging_ratio 當內存的使用達到了50%后,隊列開始將消息分頁到磁盤 vm_memory_high_watermark_paging_ratio = 0.5
total_memory_available_override_value 該參數用于指定系統的可用內存總量,一般不使用,適用于在容器等一些獲取內存實際值不精確的環境 默認未設置
disk_free_limit Rabbitmq存儲數據的可用空間限制,當低于該值的時候,將觸發流量限制,設置可參考vm_memory_high_watermark參數 disk_free_limit.absolute = 50MB
log.file.level 控制記錄日志的等級,有info,error,warning,debug log.file.level = info
channel_max 最大通道數,但不包含協議中使用的特殊通道號0,設置為0表示無限制,不建議使用該值,容易出現channel泄漏 channel_max = 2047
channel_operation_timeout 通道操作超時,單位為毫秒 channel_operation_timeout = 15000
heartbeat 表示連接參數協商期間服務器建議的心跳超時的值。如果兩端都設置為0,則禁用心跳,不建議禁用 heartbeat = 60
default_vhost rabbitmq安裝后啟動創建的虛擬主機 default_vhost = /
default_user 默認創建的用戶名 default_user = guest
default_pass 默認用戶的密碼 default_pass = guest
default_user_tags 默認用戶的標簽 default_user_tags.administrator = true
default_permissions 在創建默認用戶是分配給默認用戶的權限 default_permissions.configure = .* default_permissions.read = .* default_permissions.write = .*
loopback_users 允許通過回環地址連接到rabbitmq的用戶列表,如果要允許guest用戶遠程連接(不安全)請將該值設置為none,如果要將一個用戶設置為僅localhost連接的話,配置loopback_users.username =true(username要替換成用戶名) loopback_users.guest = true(默認為只能本地連接)
cluster_formation.classic_config.nodes 設置集群節點cluster_formation.classic_config.nodes.1 = rabbit@hostname1
cluster_formation.classic_config.nodes.2 = rabbit@hostname2 默認為空,未設置
collect_statistics 統計收集模式,none 不發出統計信息事件,coarse每個隊列連接都發送統計一次,fine每發一條消息的統計數據 collect_statistics = none
collect_statistics_interval 統計信息收集間隔,以毫秒為單位 collect_statistics_interval = 5000
delegate_count 用于集群內通信的委托進程數。在多核的服務器上我們可以增加此值 delegate_count = 16
tcp_listen_options 默認的套接字選項 tcp_listen_options.backlog = 128 …..
hipe_compile 設置為true以使用HiPE預編譯RabbitMQ的部分,HiPE是Erlang的即時編譯器,啟用HiPE可以提高吞吐量兩位數,但啟動時會延遲幾分鐘。Erlang運行時必須包含HiPE支持。如果不是,啟用此選項將不起作用。HiPE在某些平臺上根本不可用,尤其是Windows。 hipe_compile = false
cluster_keepalive_interval 節點應該多長時間向其他節點發送keepalive消息(以毫秒為單位),keepalive的消息丟失不會被視為關閉 cluster_keepalive_interval = 10000
queue_index_embed_msgs_below 消息的字節大小,低于該大小,消息將直接嵌入隊列索引中 bytes queue_index_embed_msgs_below = 4096
mnesia_table_loading_retry_timeout 等待集群中Mnesia表可用的超時時間,單位毫秒 mnesia_table_loading_retry_timeout = 30000
mnesia_table_loading_retry_limit 集群啟動時等待Mnesia表的重試次數,不適用于Mnesia升級或節點刪除。 mnesia_table_loading_retry_limit = 10
mirroring_sync_batch_size 要在隊列鏡像之間同步的消息的批處理大小 mirroring_sync_batch_size = 4096
queue_master_locator 隊列主節點的策略,有三大策略 min-masters,client-local,random queue_master_locator = client-local
proxy_protocol 如果設置為true ,則連接需要通過反向代理連接,不能直連接 proxy_protocol = false
management.listener.port rabbitmq web管理界面使用的端口 management.listener.port = 15672

查看rabbitmq的有效配置

rabbitmqctl environment

1.2 advanced.config

示例文件
某些配置設置不可用或難以使用sysctl格式進行配置。因此,可以使用Erlang術語格式的其他配置文件advanced.config
它將與rabbitmq.conf 文件中提供的配置合并。

配置屬性和描述(官網鏈接)

屬性 描述 默認值
msg_store_index_module 設置隊列索引使用的模塊 {rabbit,[ {msg_store_index_module,rabbit_msg_store_ets_index} ]}
backing_queue_module 隊列內容的實現模塊。 {rabbit,[ {backing_queue_module,rabbit_variable_queue} ]}
msg_store_file_size_limit 消息儲存的文件大小,現有的節點更改是危險的,可能導致數據丟失 默認值16777216
trace_vhosts 內部的tracer使用,不建議更改 {rabbit,[ {trace_vhosts,[]} ]}
msg_store_credit_disc_bound 設置消息儲存庫給隊列進程的積分,默認一個隊列進程被賦予4000個消息積分 {rabbit, [{msg_store_credit_disc_bound, {4000, 800}}]}
queue_index_max_journal_entries 隊列的索引日志超過該閾值將刷新到磁盤 {rabbit, [{queue_index_max_journal_entries, 32768}]}
lazy_queue_explicit_gc_run_operation_threshold 在內存壓力下為延遲隊列設置的值,該值可以觸發垃圾回收和減少內存使用,降低該值,會降低性能,提高該值,會導致更高的內存消耗 {rabbit,[{lazy_queue_explicit_gc_run_operation_threshold, 1000}]}
queue_explicit_gc_run_operation_threshold 在內存壓力下,正常隊列設置的值,該值可以觸發垃圾回收和減少內存使用,降低該值,會降低性能,提高該值,會導致更高的內存消耗 {rabbit, [{queue_explicit_gc_run_operation_threshold, 1000}]}

1.3 rabbitmq-env.conf

官網鏈接
通過rabbitmq-env.conf 來定義環境變量
RABBITMQ_NODENAME 指定節點名稱

屬性 描述 默認值
RABBITMQ_NODE_IP_ADDRESS 綁定的網絡接口 默認為空字符串表示綁定本機所有的網絡接口
RABBITMQ_NODE_PORT 端口 默認為5672
RABBITMQ_DISTRIBUTION_BUFFER_SIZE 節點之間通信連接的數據緩沖區大小 默認為128000,該值建議不要使用低于64MB
RABBITMQ_IO_THREAD_POOL_SIZE 運行時用于io的線程數 建議不要低于32,linux默認為128 ,windows默認為64
RABBITMQ_NODENAME rabbitmq節點名稱,集群中要注意節點名稱唯一 linux 默認節點名為 rabbit@$hostname
RABBITMQ_CONFIG_FILE rabbitmq 的配置文件路徑,注意不要加文件的后綴(.conf) 默認 $RABBITMQ_HOME/etc/rabbitmq/rabbitmq(二進制安裝) /etc/rabbitmq/rabbitmq(rpm 安裝)
RABBITMQ_ADVANCED_CONFIG_FILE advanced.config文件路徑 默認 $RABBITMQ_HOME/etc/rabbitmq/advanced(二進制安裝) /etc/rabbitmq/advanced(rpm 安裝)
RABBITMQ_CONF_ENV_FILE 環境變量配置文件路徑 默認 $RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf(二進制安裝) /etc/rabbitmq/rabbitmq-env.conf(rpm 安裝)
RABBITMQ_SERVER_CODE_PATH 在使用HiPE 模塊時需要使用 默認為空
RABBITMQ_LOGS 指定日志文件位置 默認為 $RABBITMQ_HOME/etc/var/log/rabbitmq/

網絡設置 http://www.rabbitmq.com/networking.html
RABBITMQ_DISTRIBUTION_BUFFER_SIZE 節點間通信緩沖區大小,默認值 128Mb,節點流量比較多的集群中,可以提升該值,建議該值不要低于64MB。

tcp 緩存區大小
下示例將AMQP 0-9-1連接的TCP緩沖區設置為192 KiB:

tcp_listen_options.backlog = 128 tcp_listen_options.nodelay = true tcp_listen_options.linger.on = true tcp_listen_options.linger.timeout = 0 tcp_listen_options.sndbuf = 196608 tcp_listen_options.recbuf = 196608

1.4 在生產環境中不適用的策略。

官網鏈接

  • 1.4.1 vhost

在生產中,如果rabbitmq只為單個系統提供服務的時候,我們使用默認的(/)是可以的。在為多個系統提供的服務時,我們建議使用單獨的vhost.

  • 1.4.2 user

對于生產環境,請刪除默認用戶(guest),默認用戶只能從localhost 連接。
我們可以創建指定權限的單獨用戶為每個應用提供服務。對于開啟權限用戶來說,我們可以使用證書,和源ip地址過濾,和身份驗證。來加強安全性。

  • 1.4.3 最大打開文件限制

在生產環境我們可能需要調整一些系統的默認限制,以便處理大量的并發連接和隊列。
需要調整的值有打開的最大文件數。在生產環境為rabbitmq 運行的用戶設定為65536,但是對于大多數開發環境來說,4096就已經足夠了。

查看默認的打開文件的最大數量。

ulimit -n

更改方式:

  • 1 臨時修改
ulimit -n 65536
  • 2 永久修改
    • 2.1如果是systemed 來進行管理的話我們可以編輯systemed配置文件來進行控制
    [service] LimitNOFILE=300000
    • 2.2 如果不是systemed 來進行管理的話,我們可以更改rabbitmq的啟動加載的環境配置文件 rabbitmq-env.conf。在里面開頭添加ulimit -S -n 4096,但該值不能超過系統的默認值的最大值。

      ulimit -S -n 4096
    • 2.3 系統級別更改
      更改配置文件:/etc/security/limits.conf
      在文件末尾前面加入
      rabbitmq(啟動的用戶名) - nofile 65536
      如果更改前用戶已經登錄的話,需要重新登錄下才能生效。

  • 1.4.4 內存
    當rabbitmq 檢測到它使用的內存超過系統的40%,它將不會接受任何新的消息,這個值是由參數 vm_memory_high_watermark來控制的,默認值是一個安全的值,修改該值需要注意。 rabbitmq 的至少需要128MB,建議vm_memory_high_watermark 值為 0.4~0..66 ,不要使用大于0.7的值。

  • 1.4.5 磁盤
    磁盤默認的儲存數據閾值是50MB,當低于該值的時候,將觸發流量限制。50MB 只適用于開發環境,生產環境需要調高該值,不然容易由磁盤空間不足導致節點故障,也可能導致數據丟失。

    在生產環境中我們設置的值

    • 建議的最小值 {disk_free_limit, {mem_relative, 1.0}}

    它是基于mem_relative的值,例如在具有4GB內存的rabbitmq主機上,那么該磁盤的閾值就是4G,如果磁盤可用空間低于4G,所有生產者和消息都將拒絕。在允許恢復發布之前,通常需要消費者將隊列消息消費完。

    • 建議的更安全值 {disk_free_limit, {mem_relative, 1.5}}

    在具有4GB內存的RabbitMQ節點上,如果可用磁盤空間低于6GB,則所有新消息都將被阻止,但是如果我們在停止的時候rabbitmq需要儲存4GB的數據到磁盤,再下一次啟動的時候,就只有2G空間了。

    • 建議的最大值 {disk_free_limit, {mem_relative, 2.0}}
      這個是最安全的值,如果你的磁盤有足夠多的空間話,建議設置該值。但該值容易觸發警告,因為在具有4GB內存的rabbitmq主機上,需要最低空間大于8G,如果你的磁盤空間比較少的話,不建議設置該值。
  • 1.4.6 連接
    少使用短連接,使用連接池或者長連接。

  • 1.4.7 TLS
    建議盡可能使用TLS連接,使用TLS會對傳輸的數據加密,但是對系統的吞吐量產生很大的影響
  • -1.4.8 更改默認端口
    我們常用的web界面的端口 15672 和AMQP 0-9-1 協議端口 5672 ,建議更改,web界面更改,配置參數 management.listener.port ,AMQP 0-9-1 協議端口配置參數 listeners.tcp.default。

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
日韩电影免费在线观看视频| 特级精品毛片免费观看| 九九热这里只有在线精品视| 久久91精品综合国产首页| 日韩一区二区在线播放| 无码人妻精品一区二区蜜桃百度| 日韩精品系列产品| 久久亚洲精品成人AV| 国产精品麻豆VA在线播放| 日韩亚洲人成在线综合| 国产精品超碰12396| 久久精品国产亚洲Aⅴ蜜臀色欲| 国产精品亚洲专区无码牛牛| 国产精品1024永久免费视频| 韩日美无码精品无码| 国产精品无码午夜福利| 老司机午夜精品视频资源| 91大神精品全国在线观看| 国产69精品久久久久777| 97精品国产一区二区三区| 亚洲欧洲精品在线| 久久伊人精品热在75| 99re热久久精品这里都是精品 | 国产精品视频在线观看| 国产欧美一区二区精品仙草咪| 亚洲日韩中文在线精品第一| 亚洲精品tv久久久久| 久久无码人妻精品一区二区三区 | 日本精品视频在线播放| 国产亚州精品女人久久久久久| 国产a∨精品一区二区三区不卡| 国产精品无码素人福利免费| 亚洲中文字幕久久精品无码APP| 蜜臀98精品国产免费观看| 久久久91精品国产一区二区三区| 青青精品视频国产| 久久国产精品张柏芝| 国产精品网站在线观看| 亚洲日韩精品A∨片无码加勒比| 日韩精品中文乱码在线观看| 久久精品中文字幕无码|