安装RabbitMQ
xuej@xuej-VirtualBox:~/Downloads$ vim cloudsmith-quick-start-script.sh
#!/bin/bash
sudo apt-get install curl gnupg apt-transport-https -y
## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Cloudsmith: modern Erlang repository
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Cloudsmith: RabbitMQ repository
curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg > /dev/null
## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main
## Provides RabbitMQ
##
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main
EOF
## Update package indices
sudo apt-get update -y
## Install Erlang packages
sudo apt-get install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing
"cloudsmith-quick-start-script.sh" 36L, 2144C 1,1 All
xuej@xuej-VirtualBox:~/Downloads$ chmod +x cloudsmith-quick-start-script.sh
xuej@xuej-VirtualBox:~/Downloads$ ./cloudsmith-quick-start-script.sh
[sudo] password for xuej:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
dirmngr gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client gpg-wks-server gpgconf gpgsm gpgv
Suggested packages:
tor parcimonie xloadimage scdaemon
The following NEW packages will be installed:
apt-transport-https curl
The following packages will be upgraded:
dirmngr gnupg gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client gpg-wks-server gpgconf gpgsm gpgv
11 upgraded, 2 newly installed, 0 to remove and 164 not upgraded.
Need to get 213 kB/2,316 kB of archives.
After this operation, 551 kB of additional disk space will be used.
Get:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/main amd64 gnupg-l10n all 2.2.4-1ubuntu1.5 [50.0 kB]
Get:2 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/universe amd64 apt-transport-https all 1.6.14 [4,348 B]
Get:3 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/main amd64 curl amd64 7.58.0-2ubuntu3.18 [159 kB]
Fetched 213 kB in 1s (208 kB/s)
(Reading database ... 123732 files and directories currently installed.)
Preparing to unpack .../00-gpg-wks-client_2.2.4-1ubuntu1.5_amd64.deb ...
Unpacking gpg-wks-client (2.2.4-1ubuntu1.5) over (2.2.4-1ubuntu1.4) ...
Preparing to unpack .../01-dirmngr_2.2.4-1ubuntu1.5_amd64.deb ...
Unpacking dirmngr (2.2.4-1ubuntu1.5) over (2.2.4-1ubuntu1.4) ...
Preparing to unpack .../02-gnupg-l10n_2.2.4-1ubuntu1.5_all.deb ...
Unpacking gnupg-l10n (2.2.4-1ubuntu1.5) over (2.2.4-1ubuntu1.4) ...
Preparing to unpack .../03-gpg_2.2.4-1ubuntu1.5_amd64.deb ...
Unpacking gpg (2.2.4-1ubuntu1.5) over (2.2.4-1ubuntu1.4) ...
Preparing to unpack .../04-gnupg-utils_2.2.4-1ubuntu1.5_amd64.deb ...
Unpacking gnupg-utils (2.2.4-1ubuntu1.5) over (2.2.4-1ubuntu1.4) ...
Preparing to unpack .../05-gpg-agent_2.2.4-1ubuntu1.5_amd64.deb ...
Unpacking gpg-agent (2.2.4-1ubuntu1.5) over (2.2.4-1ubuntu1.4) ...
Preparing to unpack .../06-gpgsm_2.2.4-1ubuntu1.5_amd64.deb ...
Unpacking gpgsm (2.2.4-1ubuntu1.5) over (2.2.4-1ubuntu1.4) ...
Preparing to unpack .../07-gpgconf_2.2.4-1ubuntu1.5_amd64.deb ...
Unpacking gpgconf (2.2.4-1ubuntu1.5) over (2.2.4-1ubuntu1.4) ...
Preparing to unpack .../08-gnupg_2.2.4-1ubuntu1.5_amd64.deb ...
Unpacking gnupg (2.2.4-1ubuntu1.5) over (2.2.4-1ubuntu1.4) ...
Preparing to unpack .../09-gpg-wks-server_2.2.4-1ubuntu1.5_amd64.deb ...
Unpacking gpg-wks-server (2.2.4-1ubuntu1.5) over (2.2.4-1ubuntu1.4) ...
Preparing to unpack .../10-gpgv_2.2.4-1ubuntu1.5_amd64.deb ...
Unpacking gpgv (2.2.4-1ubuntu1.5) over (2.2.4-1ubuntu1.4) ...
Setting up gpgv (2.2.4-1ubuntu1.5) ...
Selecting previously unselected package apt-transport-https.
(Reading database ... 123732 files and directories currently installed.)
Preparing to unpack .../apt-transport-https_1.6.14_all.deb ...
Unpacking apt-transport-https (1.6.14) ...
Selecting previously unselected package curl.
Preparing to unpack .../curl_7.58.0-2ubuntu3.18_amd64.deb ...
Unpacking curl (7.58.0-2ubuntu3.18) ...
Setting up apt-transport-https (1.6.14) ...
Setting up curl (7.58.0-2ubuntu3.18) ...
Setting up gpgconf (2.2.4-1ubuntu1.5) ...
Setting up gpg-agent (2.2.4-1ubuntu1.5) ...
Setting up gnupg-l10n (2.2.4-1ubuntu1.5) ...
Setting up gpgsm (2.2.4-1ubuntu1.5) ...
Setting up gnupg-utils (2.2.4-1ubuntu1.5) ...
Setting up dirmngr (2.2.4-1ubuntu1.5) ...
Setting up gpg (2.2.4-1ubuntu1.5) ...
Setting up gpg-wks-server (2.2.4-1ubuntu1.5) ...
Setting up gpg-wks-client (2.2.4-1ubuntu1.5) ...
Setting up gnupg (2.2.4-1ubuntu1.5) ...
Processing triggers for install-info (6.5.0.dfsg.1-2) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
gpg: WARNING: unsafe ownership on homedir '/home/xuej/.gnupg'
gpg: WARNING: unsafe ownership on homedir '/home/xuej/.gnupg'
gpg: WARNING: unsafe ownership on homedir '/home/xuej/.gnupg'
## Provides modern Erlang/OTP releases
##
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main
## Provides RabbitMQ
##
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main
Hit:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic InRelease
Get:2 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates InRelease [88.7 kB]
Get:3 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-backports InRelease [74.6 kB]
Get:4 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic InRelease [5,179 B]
Get:5 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security InRelease [88.7 kB]
Get:6 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/main i386 Packages [1,482 kB]
Get:7 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/main amd64 Packages [2,595 kB]
Get:8 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic InRelease [5,143 B]
Get:9 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/main amd64 DEP-11 Metadata [297 kB]
Get:10 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/universe i386 Packages [1,613 kB]
Get:11 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/universe amd64 Packages [1,817 kB]
Get:12 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main i386 Packages [44.7 kB]
Get:13 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/universe amd64 DEP-11 Metadata [302 kB]
Get:14 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/multiverse amd64 DEP-11 Metadata [2,468 B]
Get:15 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-backports/universe amd64 DEP-11 Metadata [9,268 B]
Get:16 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security/main amd64 Packages [2,254 kB]
Get:17 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 Packages [252 kB]
Get:18 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security/main i386 Packages [1,182 kB]
Get:19 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic/main i386 Packages [8,557 B]
Get:20 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security/main amd64 DEP-11 Metadata [55.3 kB]
Get:21 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security/universe amd64 DEP-11 Metadata [61.1 kB]
Get:22 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security/multiverse amd64 DEP-11 Metadata [2,464 B]
Get:23 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic/main amd64 Packages [8,557 B]
Fetched 12.3 MB in 7s (1,643 kB/s)
Reading package lists... Done
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libsctp1
Suggested packages:
erlang erlang-manpages erlang-doc lksctp-tools
The following NEW packages will be installed:
erlang-asn1 erlang-base erlang-crypto erlang-eldap erlang-ftp erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssl
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl libsctp1
0 upgraded, 18 newly installed, 0 to remove and 166 not upgraded.
Need to get 19.8 MB of archives.
After this operation, 32.2 MB of additional disk space will be used.
Get:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic/main amd64 libsctp1 amd64 1.0.17+dfsg-2 [8,008 B]
Get:2 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-base amd64 1:25.0-1 [9,671 kB]
Get:3 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-asn1 amd64 1:25.0-1 [917 kB]
Get:4 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-crypto amd64 1:25.0-1 [191 kB]
Get:5 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-public-key amd64 1:25.0-1 [754 kB]
Get:6 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-mnesia amd64 1:25.0-1 [896 kB]
Get:7 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-runtime-tools amd64 1:25.0-1 [254 kB]
Get:8 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-ssl amd64 1:25.0-1 [1,602 kB]
Get:9 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-eldap amd64 1:25.0-1 [154 kB]
Get:10 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-ftp amd64 1:25.0-1 [115 kB]
Get:11 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-tftp amd64 1:25.0-1 [134 kB]
Get:12 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-inets amd64 1:25.0-1 [640 kB]
Get:13 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-snmp amd64 1:25.0-1 [1,848 kB]
Get:14 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-os-mon amd64 1:25.0-1 [122 kB]
Get:15 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-parsetools amd64 1:25.0-1 [220 kB]
Get:16 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-syntax-tools amd64 1:25.0-1 [326 kB]
Get:17 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-tools amd64 1:25.0-1 [601 kB]
Get:18 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic/main amd64 erlang-xmerl amd64 1:25.0-1 [1,345 kB]
Fetched 19.8 MB in 42s (468 kB/s)
Selecting previously unselected package erlang-base.
(Reading database ... 123743 files and directories currently installed.)
Preparing to unpack .../00-erlang-base_1%3a25.0-1_amd64.deb ...
Unpacking erlang-base (1:25.0-1) ...
Selecting previously unselected package erlang-asn1.
Preparing to unpack .../01-erlang-asn1_1%3a25.0-1_amd64.deb ...
Unpacking erlang-asn1 (1:25.0-1) ...
Selecting previously unselected package erlang-crypto.
Preparing to unpack .../02-erlang-crypto_1%3a25.0-1_amd64.deb ...
Unpacking erlang-crypto (1:25.0-1) ...
Selecting previously unselected package erlang-public-key.
Preparing to unpack .../03-erlang-public-key_1%3a25.0-1_amd64.deb ...
Unpacking erlang-public-key (1:25.0-1) ...
Selecting previously unselected package erlang-mnesia.
Preparing to unpack .../04-erlang-mnesia_1%3a25.0-1_amd64.deb ...
Unpacking erlang-mnesia (1:25.0-1) ...
Selecting previously unselected package erlang-runtime-tools.
Preparing to unpack .../05-erlang-runtime-tools_1%3a25.0-1_amd64.deb ...
Unpacking erlang-runtime-tools (1:25.0-1) ...
Selecting previously unselected package erlang-ssl.
Preparing to unpack .../06-erlang-ssl_1%3a25.0-1_amd64.deb ...
Unpacking erlang-ssl (1:25.0-1) ...
Selecting previously unselected package erlang-eldap.
Preparing to unpack .../07-erlang-eldap_1%3a25.0-1_amd64.deb ...
Unpacking erlang-eldap (1:25.0-1) ...
Selecting previously unselected package erlang-ftp.
Preparing to unpack .../08-erlang-ftp_1%3a25.0-1_amd64.deb ...
Unpacking erlang-ftp (1:25.0-1) ...
Selecting previously unselected package erlang-tftp.
Preparing to unpack .../09-erlang-tftp_1%3a25.0-1_amd64.deb ...
Unpacking erlang-tftp (1:25.0-1) ...
Selecting previously unselected package erlang-inets.
Preparing to unpack .../10-erlang-inets_1%3a25.0-1_amd64.deb ...
Unpacking erlang-inets (1:25.0-1) ...
Selecting previously unselected package erlang-snmp.
Preparing to unpack .../11-erlang-snmp_1%3a25.0-1_amd64.deb ...
Unpacking erlang-snmp (1:25.0-1) ...
Selecting previously unselected package erlang-os-mon.
Preparing to unpack .../12-erlang-os-mon_1%3a25.0-1_amd64.deb ...
Unpacking erlang-os-mon (1:25.0-1) ...
Selecting previously unselected package erlang-parsetools.
Preparing to unpack .../13-erlang-parsetools_1%3a25.0-1_amd64.deb ...
Unpacking erlang-parsetools (1:25.0-1) ...
Selecting previously unselected package erlang-syntax-tools.
Preparing to unpack .../14-erlang-syntax-tools_1%3a25.0-1_amd64.deb ...
Unpacking erlang-syntax-tools (1:25.0-1) ...
Selecting previously unselected package erlang-tools.
Preparing to unpack .../15-erlang-tools_1%3a25.0-1_amd64.deb ...
Unpacking erlang-tools (1:25.0-1) ...
Selecting previously unselected package erlang-xmerl.
Preparing to unpack .../16-erlang-xmerl_1%3a25.0-1_amd64.deb ...
Unpacking erlang-xmerl (1:25.0-1) ...
Selecting previously unselected package libsctp1:amd64.
Preparing to unpack .../17-libsctp1_1.0.17+dfsg-2_amd64.deb ...
Unpacking libsctp1:amd64 (1.0.17+dfsg-2) ...
Setting up erlang-base (1:25.0-1) ...
Searching for services which depend on erlang and should be started... none found.
Setting up libsctp1:amd64 (1.0.17+dfsg-2) ...
Setting up erlang-xmerl (1:25.0-1) ...
Setting up erlang-tftp (1:25.0-1) ...
Setting up erlang-crypto (1:25.0-1) ...
Setting up erlang-asn1 (1:25.0-1) ...
Setting up erlang-mnesia (1:25.0-1) ...
Setting up erlang-runtime-tools (1:25.0-1) ...
Setting up erlang-syntax-tools (1:25.0-1) ...
Setting up erlang-parsetools (1:25.0-1) ...
Setting up erlang-public-key (1:25.0-1) ...
Setting up erlang-snmp (1:25.0-1) ...
Setting up erlang-ssl (1:25.0-1) ...
Setting up erlang-tools (1:25.0-1) ...
Setting up erlang-ftp (1:25.0-1) ...
Setting up erlang-os-mon (1:25.0-1) ...
Setting up erlang-eldap (1:25.0-1) ...
Setting up erlang-inets (1:25.0-1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1.4) ...
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
rabbitmq-server
0 upgraded, 1 newly installed, 0 to remove and 166 not upgraded.
Need to get 12.8 MB of archives.
After this operation, 32.9 MB of additional disk space will be used.
Get:1 https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic/main amd64 rabbitmq-server all 3.10.5-1 [12.8 MB]
Fetched 12.8 MB in 7s (1,734 kB/s)
Selecting previously unselected package rabbitmq-server.
(Reading database ... 124859 files and directories currently installed.)
Preparing to unpack .../rabbitmq-server_3.10.5-1_all.deb ...
Unpacking rabbitmq-server (3.10.5-1) ...
Setting up rabbitmq-server (3.10.5-1) ...
Adding group `rabbitmq' (GID 129) ...
Done.
Adding system user `rabbitmq' (UID 125) ...
Adding new user `rabbitmq' (UID 125) with group `rabbitmq' ...
Not creating home directory `/var/lib/rabbitmq'.
Created symlink /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service → /lib/systemd/system/rabbitmq-server.service.
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for systemd (237-3ubuntu10.52) ...
xuej@xuej-VirtualBox:~/Downloads$ systemctl status rabbitmq-server.service
● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-06-07 23:52:01 CST; 24s ago
Main PID: 13113 (beam.smp)
Tasks: 24 (limit: 2326)
CGroup: /system.slice/rabbitmq-server.service
├─13113 /usr/lib/erlang/erts-13.0/bin/beam.smp -W w -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -sbwt none -sbwtdcpu none -sb
├─13123 erl_child_setup 32768
├─13151 /usr/lib/erlang/erts-13.0/bin/epmd -daemon
├─13174 /usr/lib/erlang/erts-13.0/bin/inet_gethost 4
└─13175 /usr/lib/erlang/erts-13.0/bin/inet_gethost 4
6月 07 23:51:58 xuej-VirtualBox rabbitmq-server[13113]: Doc guides: https://rabbitmq.com/documentation.html
6月 07 23:51:58 xuej-VirtualBox rabbitmq-server[13113]: Support: https://rabbitmq.com/contact.html
6月 07 23:51:58 xuej-VirtualBox rabbitmq-server[13113]: Tutorials: https://rabbitmq.com/getstarted.html
6月 07 23:51:58 xuej-VirtualBox rabbitmq-server[13113]: Monitoring: https://rabbitmq.com/monitoring.html
6月 07 23:51:58 xuej-VirtualBox rabbitmq-server[13113]: Logs: /var/log/rabbitmq/rabbit@xuej-VirtualBox.log
6月 07 23:51:58 xuej-VirtualBox rabbitmq-server[13113]: /var/log/rabbitmq/rabbit@xuej-VirtualBox_upgrade.log
6月 07 23:51:58 xuej-VirtualBox rabbitmq-server[13113]: <stdout>
6月 07 23:51:58 xuej-VirtualBox rabbitmq-server[13113]: Config file(s): (none)
6月 07 23:52:01 xuej-VirtualBox rabbitmq-server[13113]: Starting broker... completed with 0 plugins.
6月 07 23:52:01 xuej-VirtualBox systemd[1]: Started RabbitMQ broker.
部署RabbitMQ Cluster
修改rabbit1的hosts
xuej@xuej-VirtualBox:~$ sudo vi /etc/hosts
xuej@xuej-VirtualBox:~$ sudo cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 xuej-VirtualBox
192.168.246.37 rabbit1
192.168.246.38 rabbit2
192.168.246.39 rabbit3
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
xuej@xuej-VirtualBox:~$ sudo hostnamectl --transient --static --pretty set-hostname rabbit1
修改rabbit2的hosts
xuej@xuej-VirtualBox:~$ sudo vi /etc/hosts
xuej@xuej-VirtualBox:~$ sudo hostnamectl --transient --static --pretty set-hostname rabbit2
修改rabbit3的hosts
xuej@xuej-VirtualBox:~$ sudo vi /etc/hosts
xuej@xuej-VirtualBox:~$ sudo hostnamectl --transient --static --pretty set-hostname rabbit3
重新登陆所有节点
启动rabbit1的实例
xuej@rabbit1:~$ sudo systemctl stop rabbitmq-server.service
[sudo] password for xuej:
xuej@rabbit1:~$ sudo rabbitmq-server -detached
xuej@rabbit1:~$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit1 ...
Basics
Cluster name: rabbit@rabbit1
Disk Nodes
rabbit@rabbit1
Running Nodes
rabbit@rabbit1
Versions
rabbit@rabbit1: RabbitMQ 3.10.5 on Erlang 25.0
Maintenance status
Node: rabbit@rabbit1, status: not under maintenance
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@rabbit1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Feature flags
Flag: classic_mirrored_queue_version, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
启动rabbit2的实例
xuej@rabbit2:~$ sudo systemctl stop rabbitmq-server.service
[sudo] password for xuej:
xuej@rabbit2:~$ sudo rabbitmq-server -detached
xuej@rabbit2:~$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit2 ...
Basics
Cluster name: rabbit@rabbit2
Disk Nodes
rabbit@rabbit2
Running Nodes
rabbit@rabbit2
Versions
rabbit@rabbit2: RabbitMQ 3.10.5 on Erlang 25.0
Maintenance status
Node: rabbit@rabbit2, status: not under maintenance
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@rabbit2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Feature flags
Flag: classic_mirrored_queue_version, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
启动rabbit3的实例
xuej@rabbit3:~$ sudo systemctl stop rabbitmq-server.service
[sudo] password for xuej:
xuej@rabbit3:~$ sudo rabbitmq-server -detached
xuej@rabbit3:~$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit3 ...
Basics
Cluster name: rabbit@rabbit3
Disk Nodes
rabbit@rabbit3
Running Nodes
rabbit@rabbit3
Versions
rabbit@rabbit3: RabbitMQ 3.10.5 on Erlang 25.0
Maintenance status
Node: rabbit@rabbit3, status: not under maintenance
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@rabbit3, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit3, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Feature flags
Flag: classic_mirrored_queue_version, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
构建集群
xuej@rabbit2:~$ sudo rabbitmqctl join_cluster rabbit@rabbit1
Clustering node rabbit@rabbit2 with rabbit@rabbit1
02:03:05.095 [warning] Feature flags: the previous instance of this node must have failed to write the `feature_flags` file at `/var/lib/rabbitmq/mnesia/rabbit@rabbit2-feature_flags`:
02:03:05.095 [warning] Feature flags: - list of previously disabled feature flags now marked as such: [:maintenance_mode_status]
02:03:05.257 [warning] Feature flags: the previous instance of this node must have failed to write the `feature_flags` file at `/var/lib/rabbitmq/mnesia/rabbit@rabbit2-feature_flags`:
02:03:05.257 [warning] Feature flags: - list of previously enabled feature flags now marked as such: [:maintenance_mode_status]
02:03:05.277 [error] Failed to create a tracked connection table for node :rabbit@rabbit2: {:node_not_running, :rabbit@rabbit2}
02:03:05.278 [error] Failed to create a per-vhost tracked connection table for node :rabbit@rabbit2: {:node_not_running, :rabbit@rabbit2}
02:03:05.279 [error] Failed to create a per-user tracked connection table for node :rabbit@rabbit2: {:node_not_running, :rabbit@rabbit2}
xuej@rabbit2:~$ sudo rabbitmqctl join_cluster rabbit@rabbit1
Clustering node rabbit@rabbit2 with rabbit@rabbit1
The node is already a member of this cluster
xuej@rabbit3:~$ sudo rabbitmqctl join_cluster rabbit@rabbit2
Clustering node rabbit@rabbit3 with rabbit@rabbit2
02:12:42.373 [warning] Feature flags: the previous instance of this node must have failed to write the `feature_flags` file at `/var/lib/rabbitmq/mnesia/rabbit@rabbit3-feature_flags`:
02:12:42.373 [warning] Feature flags: - list of previously disabled feature flags now marked as such: [:maintenance_mode_status]
02:12:42.562 [warning] Feature flags: the previous instance of this node must have failed to write the `feature_flags` file at `/var/lib/rabbitmq/mnesia/rabbit@rabbit3-feature_flags`:
02:12:42.562 [warning] Feature flags: - list of previously enabled feature flags now marked as such: [:maintenance_mode_status]
02:12:42.585 [error] Failed to create a tracked connection table for node :rabbit@rabbit3: {:node_not_running, :rabbit@rabbit3}
02:12:42.588 [error] Failed to create a per-vhost tracked connection table for node :rabbit@rabbit3: {:node_not_running, :rabbit@rabbit3}
02:12:42.588 [error] Failed to create a per-user tracked connection table for node :rabbit@rabbit3: {:node_not_running, :rabbit@rabbit3}
xuej@rabbit3:~$ sudo rabbitmqctl join_cluster rabbit@rabbit2
Clustering node rabbit@rabbit3 with rabbit@rabbit2
The node is already a member of this cluster
查看集群状态
xuej@rabbit1:~$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit1 ...
Basics
Cluster name: rabbit@rabbit1
Disk Nodes
rabbit@rabbit1
rabbit@rabbit2
rabbit@rabbit3
Running Nodes
rabbit@rabbit1
rabbit@rabbit2
rabbit@rabbit3
Versions
rabbit@rabbit1: RabbitMQ 3.10.5 on Erlang 25.0
rabbit@rabbit2: RabbitMQ 3.10.5 on Erlang 25.0
rabbit@rabbit3: RabbitMQ 3.10.5 on Erlang 25.0
Maintenance status
Node: rabbit@rabbit1, status: not under maintenance
Node: rabbit@rabbit2, status: not under maintenance
Node: rabbit@rabbit3, status: not under maintenance
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@rabbit1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbit2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbit3, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit3, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Feature flags
Flag: classic_mirrored_queue_version, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
xuej@rabbit2:~$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit2 ...
Basics
Cluster name: rabbit@rabbit2
Disk Nodes
rabbit@rabbit1
rabbit@rabbit2
rabbit@rabbit3
Running Nodes
rabbit@rabbit1
rabbit@rabbit2
rabbit@rabbit3
Versions
rabbit@rabbit1: RabbitMQ 3.10.5 on Erlang 25.0
rabbit@rabbit2: RabbitMQ 3.10.5 on Erlang 25.0
rabbit@rabbit3: RabbitMQ 3.10.5 on Erlang 25.0
Maintenance status
Node: rabbit@rabbit1, status: not under maintenance
Node: rabbit@rabbit2, status: not under maintenance
Node: rabbit@rabbit3, status: not under maintenance
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@rabbit1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbit2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbit3, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit3, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Feature flags
Flag: classic_mirrored_queue_version, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
xuej@rabbit3:~$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit3 ...
Basics
Cluster name: rabbit@rabbit3
Disk Nodes
rabbit@rabbit1
rabbit@rabbit2
rabbit@rabbit3
Running Nodes
rabbit@rabbit1
rabbit@rabbit2
rabbit@rabbit3
Versions
rabbit@rabbit1: RabbitMQ 3.10.5 on Erlang 25.0
rabbit@rabbit2: RabbitMQ 3.10.5 on Erlang 25.0
rabbit@rabbit3: RabbitMQ 3.10.5 on Erlang 25.0
Maintenance status
Node: rabbit@rabbit1, status: not under maintenance
Node: rabbit@rabbit2, status: not under maintenance
Node: rabbit@rabbit3, status: not under maintenance
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@rabbit1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbit2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbit3, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit3, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Feature flags
Flag: classic_mirrored_queue_version, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
死信问题
参考https://www.rabbitmq.com/dlx.html
脑裂问题
参考https://www.rabbitmq.com/partitions.html
参考https://www.rabbitmq.com/partitions.html#recovering
参考https://www.rabbitmq.com/partitions.html#automatic-handling
参考https://www.rabbitmq.com/partitions.html#options
从脑裂中恢复
- 要从脑裂中恢复,首先选择一个您最信任的分区。该分区将成为系统状态(模式、消息)使用的权限;其他分区上发生的任何更改都将丢失。
- 停止其他分区中的所有节点,然后重新启动它们。当他们重新加入集群时,他们将从受信任的分区恢复状态。
- 最后,您还应该重新启动受信任分区中的所有节点以清除警告。
- 停止整个集群并重新启动它可能更简单;如果是这样,请确保您启动的第一个节点来自受信任的分区。
分区处理策略
RabbitMQ 还提供了三种自动处理网络分区的方法:pause-minority 模式、pause-if-all-down 模式和 autoheal 模式。默认行为称为忽略模式。
- 在 pause-minority 模式下,RabbitMQ 会在看到其他节点宕机后自动暂停确定自己属于少数(即少于或等于节点总数的一半)的集群节点。因此,它从 CAP 定理中选择分区容差而不是可用性。这确保了在发生网络分区的情况下,最多单个分区中的节点将继续运行。少数节点将在分区开始时暂停,并在分区结束时重新开始。此配置可防止脑裂,因此能够自动从网络分区中恢复而不会出现不一致。
- 在 pause-if-all-down 模式下,RabbitMQ 将自动暂停无法到达任何列出的节点的集群节点。换句话说,所有列出的节点都必须关闭,RabbitMQ 才能暂停集群节点。这接近于暂停少数模式,但是,它允许管理员决定首选哪些节点,而不是依赖于上下文。例如,如果集群由机架 A 中的两个节点和机架 B 中的两个节点组成,并且机架之间的链接丢失,则暂停少数模式将暂停所有节点。在 pause-if-all-down 模式下,如果管理员列出了机架 A 中的两个节点,则只有机架 B 中的节点会暂停。请注意,列出的节点可能会在分区的两侧分裂:在这种情况下,没有节点会暂停。这就是为什么有一个额外的忽略/自动修复参数来指示如何从分区中恢复。
- 在 autoheal 模式下,如果一个分区被认为已经发生,RabbitMQ 将自动决定一个获胜的分区,并将重新启动所有不在获胜分区中的节点。与 pause_minority 模式不同,它因此在分区结束时生效,而不是在分区开始时生效。
- 获胜的分区是连接的客户端最多的分区(或者如果这产生平局,则具有最多节点的分区;如果仍然产生平局,则以未指定的方式选择其中一个分区)。
如何选择模式
重要的是要理解允许 RabbitMQ 自动处理网络分区需要权衡取舍。
如介绍中所述,要通过通常不可靠的链接连接 RabbitMQ 集群,首选 Federation 或 Shovel。
话虽如此,以下是一些指导方针,可帮助操作员确定哪种模式可能合适,也可能不合适:
- ignore:当网络可靠性实际上可能最高且节点可用性最重要时使用。例如,所有集群节点可以在同一个机架或同等设备上,连接一个交换机,该交换机也是通往外界的路由。【AP】
- pause_minority:适合在单个区域中跨机架或可用区域进行集群时,一次丢失大多数节点(区域)的概率被认为非常低。如果/当丢失的节点回来时,这种模式会牺牲一些可用性来自动恢复。【CP】
- autoheal:适用于更关注服务连续性而不是节点间数据一致性的情况。【AP】