我想将Rabbitmq MNESIA目录更改为/disk
文件夹而不是默认的/var/lib
。我在/usr/lib/rabbitmq/bin
做了rabbitmq-env
的变化
RABBITMQ_MNESIA_BASE=/disk/rabbitmq/
RABBITMQ_LOG_BASE=/disk/rabbitmq/log/
并重新启动后
service rabbitmq-server restart
Restarting rabbitmq-server (via systemctl): [ OK ]
但是当我检查状态时
> service rabbitmq-server status
WARNING: Removing trailing slash from RABBITMQ_MNESIA_BASE
WARNING: Removing trailing slash from RABBITMQ_MNESIA_BASE
Status of node 'rabbit@ip-10-03-209-294' ...
Error: unable to connect to node 'rabbit@ip-10-03-209-294': nodedown
DIAGNOSTICS
===========
attempted to contact: ['rabbit@ip-10-03-209-294']
rabbit@ip-10-03-209-294:
* connected to epmd (port 4369) on ip-10-03-209-294
* epmd reports: node 'rabbit' not running at all
no other nodes on ip-10-03-209-294
* suggestion: start the node
current node details:
- node name: 'rabbitmq-cli-61@10-03-209-294'
- home dir: /var/lib/rabbitmq
- cookie hash: D1JxYyl9vuDgVmH5K4dGyQ==
删除所有更改后,它工作正常。但我希望MNESIA目录是/磁盘。我也重新启动了这个实例。
请尝试以下步骤:
/etc/init.d/rabbitmq-server stop
nano /etc/rabbitmq/rabbitmq-env.conf
并添加:
RABBITMQ_MNESIA_BASE = /磁盘/ RabbitMQ的
RABBITMQ_LOG_BASE = /磁盘/ RabbitMQ的/日志chown rabbitmq:rabbitmq /disk/(and all subdirs)
/etc/init.d/rabbitmq-server start
service rabbitmq-server status
刚试试我的debian:
root@bae18650cea4:/# service rabbitmq-server status
Status of node rabbit@bae18650cea4 ...
[{pid,15240},
{running_applications,[{rabbit,"RabbitMQ","3.6.2"},
{mnesia,"MNESIA CXC 138 12","4.13.3"},
{os_mon,"CPO CXC 138 46","2.4"},
{rabbit_common,[],"3.6.2"},
{xmerl,"XML parser","1.3.10"},
{ranch,"Socket acceptor pool for TCP protocols.",
"1.2.1"},
{sasl,"SASL CXC 138 11","2.7"},
{stdlib,"ERTS CXC 138 10","2.8"},
{kernel,"ERTS CXC 138 10","4.2"}]},
{os,{unix,linux}},
{erlang_version,"Erlang/OTP 18 [erts-7.3] [source] [64-bit] [async-threads:64] [kernel-poll:true]\n"},
{memory,[{total,139371632},
{connection_readers,0},
{connection_writers,0},
{connection_channels,0},
{connection_other,0},
{queue_procs,2592},
{queue_slave_procs,0},
{plugins,0},
{other_proc,18525024},
{mnesia,58264},
{mgmt_db,0},
{msg_index,41880},
{other_ets,920384},
{binary,19128},
{code,19777571},
{atom,752537},
{other_system,99274252}]},
{alarms,[]},
{listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]},
{vm_memory_high_watermark,0.4},
{vm_memory_limit,839966720},
{disk_free_limit,50000000},
{disk_free,17685676032},
{file_descriptors,[{total_limit,1048476},
{total_used,2},
{sockets_limit,943626},
{sockets_used,0}]},
{processes,[{limit,1048576},{used,137}]},
{run_queue,0},
{uptime,399},
{kernel,{net_ticktime,60}}]
root@bae18650cea4:/#
而不是这些env变量
RABBITMQ_MNESIA_BASE=/disk/rabbitmq/
RABBITMQ_LOG_BASE=/disk/rabbitmq/log/
尝试
MNESIA_BASE=/disk/rabbitmq/
LOG_BASE=/disk/rabbitmq/log/
在我停止并重新启动后,这至少对我有用。
我强烈建议安装凳子和setroubleshoot-server,并在适当的情况下使用selinux实现完全安全的解决方案。
见https://www.systutorials.com/docs/linux/man/8-rabbitmq_selinux/
用一些ansible-love-例子:
- name: Enabling Selinux by default
selinux:
policy: targeted
state: enforcing
- name: selinux | allow selinux rabbitmq_t
selinux_permissive:
name: rabbitmq_t
permissive: true
- name: Run selinux restore context on /etc
shell: "restorecon -Rv /etc/"
- name: rabbitmq | Fix the SELINUX fcontenxt
sefcontext:
target: '/var/lib/rabbitmq/(.*)?'
setype: rabbitmq_var_lib_t
state: present
notify:
- reset permissions
- restart rabbitmq-server
- name: Allow RabbitMQ Selinux TCP to listen on
seport:
ports: 5672,15672
proto: tcp
setype: rabbitmq_port_t
state: present