rabbitmq集群安装与布置(故障恢复生机卡塔尔国分

作者:电脑系统

由于工作需求,需要安装rabbitmq,学习之余,记录一下安装过程

分分快三全天计划网站 1

默认集群配置方法

  • 按顺序安装erlangrabbitmq
  • 安装过程中需要注意,如果rabbitmq检测到和erlang的依赖关系有问题,可先用--nodeps安装上
  • 修改/etc/hosts
    所有节点必须都加入,保证相互之间可以解析到,地址用局域网地址
    <pre>
    172.16.25.172 rabbit1 rabbit1
    172.16.25.171 rabbit2 rabbit2
    </pre>
  • hostname修改
    <pre>
    hostname 主机名
    </pre>
  • /etc/sysconfig/network中的hostname修改
  • /var/lib/rabbitmq/.erlang.cookie
    保证各节点之间的cookie一致,注意权限为400, 用户名和组为rabbitmq:rabbitmq
  • 各节点启动rabbitmq
    <pre>
    rabbitmq-server -detached
    </pre>
  • 查看状态
    <pre>
    rabbitmqctl status
    </pre>
  • rabbit2加入rabbit1
    rabbit2上执行
    <pre>
    rabbitmqctl stop_app
    rabbitmqctl join_cluster --ram rabbit@rabbit1
    rabbitmqctl start_app
    </pre>
    其中--ram是作为内存节点加入,若作为磁盘节点,不加ram即可。
    rabbit1启动时默认是作为磁盘节点。
  • 查看集群状态
    <pre>
    rabbitmqctl cluster_status
    </pre>

 

当前有如下tag:

测试流程

https://github.com/alanxz/rabbitmq-c
编译好rabbitmq-c之后
<pre>
./amqp_listen localhost 5672 amq.direct test
./amqp_sendstring localhost 5672 amq.direct test "hello world"
</pre>
所有加入集群的节点,都可以收到第一个节点发送的消息。

//保存:wq
yum clean all
yum makecache
yum update
yum install erlang

10、如果某些时候因为过去时间较长、消息较多,不想同步,而是作为新节点重新join,怎么办?

其他操作

  • 开机启动
    <pre>
    chkconfig --level 35 rabbitmq-server on
    </pre>
  • 安装web管理插件
    <pre>
    rabbitmq-plugins enable rabbitmq_management
    </pre>
  • 增加用户
    <pre>
    rabbitmqctl add_user user_admin passwd_admin
    </pre>
  • 赋予用户权限
    <pre>
    rabbitmqctl set_user_tags user_admin administrator
    </pre>
  • 删除用户
    <pre>
    delete_user
    </pre>
  • 列出用户
    <pre>
    list_users
    </pre>

下载rabbitmq安装包
cd /home/software
wget
安装(可以使用yum和rpm -ivh安装,rpm的话需要在安装一个插件)
yum install rabbitmq-server/3.7.6/rabbitmq-server-3.7.6-1.el7.noarch.rpm
/usr/sbin/rabbitmq-server -detached //后台启动服务
/usr/sbin/rabbitmq-plugins enable rabbitmq_management //启动web管理插件
/usr/sbin/rabbitmqctl add_user test test //添加用户test,密码test
/usr/sbin/rabbitmqctl set_user_tags test administrator //设置test为administrator权限
_________________________________________________________________________________________
常用命令(在test1)上:
/usr/sbin/rabbitmq-server -detached //后台启动服务
/usr/sbin/rabbitmqctl start_app //启动服务
/usr/sbin/rabbitmqctl stop_app //关闭服务
/usr/sbin/rabbitmq-plugins enable rabbitmq_management //启动web管理插件
/usr/sbin/rabbitmqctl add_user test test //添加用户,密码
/usr/sbin/rabbitmqctl set_user_tags test administrator //设置test为administrator权限
/usr/sbin/rabbitmqctl status //查看mq状态
/usr/sbin/rabbitmqctl cluster_status //查看mq集群状态
/usr/sbin/rabbitmqctl join_cluster --ram rabbit@test2 //将test2的mq加入到test1集群中来
_________________________________________________________________________________________
启动服务
/usr/sbin/rabbitmq-server -detached
查看状态
/usr/sbin/rabbitmqctl status
###########################################################################################
如果实在执行rabbitmqctl出现错误类似(rabbitmq "Error: unable to connect to node 'rabbit@OS-controller': nodedown")
这里需要重新启动rabbitmq服务
systemctl restart rabbitmq-server.service
然后再执行ok
###########################################################################################启动后查看配置集群的erlang.cookie(这个文件是隐藏文件可以在相关目录ls -a查看,配置集群需要将加入的cookie都设为一个值,rpm和编译安装的位置可能不同,通过find找出所有的cookie,为了方便,我都设置成为一个值)
find / -name .erlang.cookie
cat .erlang.cookie
AOTYJPXOZUTGVGSZIDEN
1将所有的cookie值设置为相同
2将所有的cookie权限设置为rw
chmod 600 .erlang.cookie

[root@devel2 ~]# rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
[root@devel2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@devel2 ...
[{nodes,[{disc,[rabbit@devel2]}]},
{running_nodes,[rabbit@devel2]},
{cluster_name,<<"rabbit@devel2">>},
{partitions,[]}]
[root@devel2 ~]# rabbitmqctl stop_app
Stopping node rabbit@devel2 ...

镜像集群配置方法

  • 配置策略
    <pre>
    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
    </pre>

192.168.12.11 test1
192.168.12.21 test2
//保存:wq
//测试 ping test1 test2
test2服务器同样配置
######################################################################################

2、vi /etc/hosts 在两个节点分别添加别名,互ping对方,确保通。确保防火墙没有开或者相应的端口开放

准备基础编译环境
yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto

4、后台模式启动rabbitmq

  //Rabbitmq集群高可用部署详细

[root@devel2 ~]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...
[root@devel2 ~]# rabbitmqctl add_user monitor monitor
Creating user "monitor" ...
[root@devel2 ~]# rabbitmqctl set_user_tags monitor monitoring
Setting tags for user "monitor" to [monitoring] ...

// 官方文档

每个节点都需要启用manage插件才能显示统计信息。

  //CentOS7下RabbitMQ服务安装配置

 11、rabbitmq集群日常维护的注意事项和故障恢复可参考rabbitmq集群故障恢复详解。

Eshell V7.3 (abort with ^test1)
1>
当出现以上信息时表示安装完成。ctrl z退出即可。
#######################################################################################
安装之前,确认每一台linux的设备的主机名都是唯一的(十分重要)
这里以最简单的例子作为演示,将作为集群的rabbitmq服务器设置编号这里
192.168.12.11 test1
192.168.12.21 test2
#######################################################################################
[root@test1 ]#vi /etc/hosts

启动后,可以发现有些queue没有同步,需要人工进行同步。

#######################################################################################
安装 erlang
首先编辑/etc/yum.repos.d/rabbitmq-erlang.repo(没有则创建一个)
vi /etc/yum.repos.d/rabbitmq-erlang.repo
编辑以下内容
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=
gpgcheck=1
gpgkey=
repo_gpgcheck=0
enabled=1

[root@devel2 ~]# rabbitmqctl join_cluster rabbit@dev3
Clustering node rabbit@devel2 with rabbit@dev3 ...
[root@devel2 ~]# rabbitmqctl start_app
Starting node rabbit@devel2 ...
[root@devel2 ~]# rabbitmqctl cluster_status  ##默认都是disk模式,如果要ram模式,则加上--ram选项
Cluster status of node rabbit@devel2 ...
[{nodes,[{disc,[rabbit@dev3,rabbit@devel2]}]},

 

比如,设置sys开头的队列复制到所有节点:

127.0.0.1 test1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 test1 localhost localhost.localdomain localhost6 localhost6.localdomain6

{cluster_name,<<"rabbit@dev3">>},
{partitions,[]}]

开始配置集群
第一步,停止当前的mq服务器,(test2)为例子
/usr/sbin/rabbitmqctl stop_app
第二步,将test2加入到test1中
/usr/sbin/rabbitmqctl join_cluster --ram rabbit@test1
第三步,启动服务
/usr/sbin/rabbitmqctl start_app
第四步,查看状态
/usr/sbin/rabbitmqctl cluster_status
也可以打开web界面查看
web界面默认为15672 网页管理 5672 AMQP端口
访问192.168.12.11:15672即可
账户密码为我们上面设置的test
配置ok

0、首先按照

参考文档

分分快三全天计划网站 2

输入erl查看安装状态。
# erl
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

分分快三全天计划网站 3

可以在目标节点执行

[root@dev3 ~]# rabbitmq-server -detached  #因为已经是cluster的一部分,所以就不需要重新join了,启动的时候会自动join。否则会出错如下:

分分快三全天计划网站 4

 

{running_nodes,[rabbit@dev3,rabbit@devel2]},

# 必须确保.erlang.cookie的权限位400,否则启动的时候会报“{error_logger,{{2017,2,27},{20,11,25}},"Cookie file /root/.erlang.cookie must be accessible by owner only",[]}”

[root@dev3 ~]# rabbitmqctl join_cluster rabbit@devel2
Clustering node rabbit@dev3 with rabbit@devel2 ...
{"init terminating in do_boot",{function_clause,[{rabbit_ctl_misc,print_cmd_result,[join_cluster,already_member],[]},{rabbit_cli,main,3,[]},{init,start_it,1,[]},{init,start_em,1,[]}]}}

Crash dump is being written to: erl_crash.dump...done
init terminating in do_boot ()

重启宕机的节点:

[root@dev3 ~]# scp .erlang.cookie devel2:/root/
The authenticity of host 'devel2 (172.18.30.192)' can't be established.
RSA key fingerprint is e3:76:d5:eb:d3:7d:86:43:de:bc:5d:31:cb:21:0d:d2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'devel2,172.18.30.192' (RSA) to the list of known hosts.
root@devel2's password:
.erlang.cookie 100% 20 0.0KB/s 00:00
[root@dev3 ~]# cat .erlang.cookie
YQSISAMKQWVOZMRQZJDV

7、登录控制台查看状态

[root@dev3 ~]# rabbitmqctl set_policy -p / ha-allqueue "^sys" '{"ha-mode":"all"}'
Setting policy "ha-allqueue" for pattern "^sys" to "{"ha-mode":"all"}" with priority "0" ...

5、启用控制台插件

分分快三全天计划网站 5

[root@devel2 ~]# chmod 400 .erlang.cookie

rabbitmqctl reset

 8、设置mirror,一般来说应该在设计阶段或者开发早期根据应用模块或者子系统规划exchange/queue的命名规范,这样便于从维护的角度进行统一处理,而不是将MQ作为一个临时补充。

1、先了解rabbitmq集群架构,

RabbitMQ节点之间和命令行工具 (e.g. rabbitmqctl)是使用Cookie互通的,Cookie是一组随机的数字 字母的字符串。当RabbitMQ服务器启动的时候,Erlang VM会自动创建一个随机内容的Cookie文件。如果是通过rpm安装RabbitMQ的话,Erlang Cookie 文件在/var/lib/rabbitmq/.erlang.cookie。如果是通过源码或者二进制解压安装的RabbitMQ,Erlang Cookie文件$HOME/.erlang.cookie。确保组成集群的每个erlang节点的cookie相同。

3、设置erlang集群通信用的cookie,通常每种集群都有一种机制,可能是共享磁盘比如rac或者session比如tomcat亦或是token比如分布式系统

 

然后重新执行加入节点的步骤即可。

[root@dev3 ~]# kill -9 19496

[root@devel2 ~]# rabbitmqctl add_user admin admin
Creating user "admin" ..

分分快三全天计划网站 6

 

宕机期间消费消息/并生成新的消息:

[root@devel2 ~]# rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'  ##仅仅设置权限是不足以登录服务器进行管理的,还需要为用户分配user_tag,简单理解就是角色
Setting permissions for user "admin" in vhost "/" ...

[root@dev3 ~]# chmod 400 .erlang.cookie

分分快三全天计划网站 7

[root@dev3 ~]# rabbitmq-server -detached
Warning: PID file not written; -detached was passed.

9、测试某节点宕机。

[root@devel2 ~]# rabbitmq-plugins list
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@devel2
|/
[ ] amqp_client 3.5.7
[ ] cowboy 0.5.0-rmq3.5.7-git4b93c2d
[ ] mochiweb 2.7.0-rmq3.5.7-git680dba8
[ ] rabbitmq_amqp1_0 3.5.7
[ ] rabbitmq_auth_backend_ldap 3.5.7
[ ] rabbitmq_auth_mechanism_ssl 3.5.7
[ ] rabbitmq_consistent_hash_exchange 3.5.7
[ ] rabbitmq_federation 3.5.7
[ ] rabbitmq_federation_management 3.5.7
[ ] rabbitmq_management 3.5.7
[ ] rabbitmq_management_agent 3.5.7
[ ] rabbitmq_management_visualiser 3.5.7
[ ] rabbitmq_mqtt 3.5.7
[ ] rabbitmq_shovel 3.5.7
[ ] rabbitmq_shovel_management 3.5.7
[ ] rabbitmq_stomp 3.5.7
[ ] rabbitmq_test 3.5.7
[ ] rabbitmq_tracing 3.5.7
[ ] rabbitmq_web_dispatch 3.5.7
[ ] rabbitmq_web_stomp 3.5.7
[ ] rabbitmq_web_stomp_examples 3.5.7
[ ] sockjs 0.3.4-rmq3.5.7-git3132eb9
[ ] webmachine 1.10.3-rmq3.5.7-gite9359c7
[root@devel2 ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management

Applying plugin configuration to rabbit@devel2... started 6 plugins.

 

6、创建用户。默认情况下,内置的guest只能通过localhost访问,通常我们都是在linux服务器上安装rabbitmq,在本地客户端操作,所以需要创建管理用户。

 同步后可见消息都是正确的,已经消费的会删掉,新增的会拷贝过去。

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 开发 rabbitmq&roc