设为首页 收藏本站
查看: 470|回复: 0

[经验分享] centos7上Rabbit集群主从部署

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-12-9 08:49:07 | 显示全部楼层 |阅读模式
1.软件环境
操作系统:centos 7.2 X64
Erlang:18.3
Rabbit:3.5.1
节点IP:node1 192.168.1.21
             Node 2 192.168.1.22
Node1为主,node2为从
2.安装部署
以下安装均使用root权限安装。
在两个节点服务器上安装:
安装依赖包
1
yum install gcc gcc-c++ ncurses-developenssl-devel -y




1)   安装Erlang
下载地址:
1
2
3
4
5
6
7
wget http://distfiles.macports.org/erlang/otp_src_18.3.tar.gz
mkdir ../src
tar zxf otp_src_18.3.tar.gz -C ../src/  
cd ../src/otp_src_18.3/  
./configure --with-ssl=/etc/ssl
make   
make install




2)   安装RabbitMQ
下载地址:
1
2
3
4
wget http://www.rabbitmq.com/releases ... c-unix-3.5.1.tar.gz
tar zxfrabbitmq-server-generic-unix-3.5.1.tar.gz -C ../src/   
cd ../src/
mv rabbitmq_server-3.5.1/usr/local/rabbitmq





3)   配置 rabbitmq
rpm安装后配置文件目录:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
mkdir /etc/rabbitmq
cd /etc/rabbitmq
源码解压配置文件目录:
/usr/local/rabbitmq/etc/rabbitmq
默认是没有rabbitmq.conf和rabbitmq-env.conf文件,需要手工创建:
rabbitmq.config配置方法(含调优):
[iyunv@node1 rabbitmq]# vim rabbitmq.config
[
{rabbit,
  [
{tcp_listeners, [5672]},
{dump_log_write_threshold, [1000]},
{vm_memory_high_watermark, 0.5},
{hipe_compile,true}
  ]
  }
].
  
  
  
或者在/usr/local/rabbitmq/etc/rabbitmq
cp rabbitmq.config.example rabbitmq.config
  
vim rabbitmq-env.conf   创建配置文件
RABBITMQ_MNESIA_BASE=/data/rabbitmq/db  #指定数据目录
RABBITMQ_LOG_BASE=/data/rabbitmq/logs   #指定日志目录



4)   确保节点之间主机名称可以相互解析。
在两台节点服务器上分别配置hosts文件,加入所有的节点主机名称
1
2
3
vim /etc/hosts
192.168.1.21 node1
192.168.1.22 node2



注意:配置的主机名不要含有特殊符号,如.\-之类的,如主机名不能为node1.xxx.com
5)   安装web界面访问插件,以生成.erlang.cookie文件创建erlang集群。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
进入目录:
cd /usr/local/rabbitmq/sbin
安装web访问插件:
./rabbitmq-plugins enablerabbitmq_management
查看插件列表:
[iyunv@node1 sbin]$ ./rabbitmq-plugins list
Configured: E = explicitly enabled; e =implicitly enabled
|Status:   [failed to contact rabbit@web3- status not shown]
|/
[e ] amqp_client                       3.5.1
[  ]cowboy                           0.5.0-rmq3.5.1-git4b93c2d
[e ] mochiweb                         2.7.0-rmq3.5.1-git680dba8
[  ]rabbitmq_amqp1_0                  3.5.1
[  ]rabbitmq_auth_backend_ldap        3.5.1
[  ]rabbitmq_auth_mechanism_ssl       3.5.1
[  ]rabbitmq_consistent_hash_exchange 3.5.1
[  ]rabbitmq_federation               3.5.1
[  ]rabbitmq_federation_management    3.5.1
[E ] rabbitmq_management               3.5.1
[e ] rabbitmq_management_agent         3.5.1
[  ]rabbitmq_management_visualiser    3.5.1
[  ]rabbitmq_mqtt                     3.5.1
[  ]rabbitmq_shovel                   3.5.1
[  ]rabbitmq_shovel_management        3.5.1
[  ]rabbitmq_stomp                    3.5.1
[  ]rabbitmq_test                     3.5.1
[  ]rabbitmq_tracing                  3.5.1
[e ] rabbitmq_web_dispatch             3.5.1
[  ]rabbitmq_web_stomp                3.5.1
[  ]rabbitmq_web_stomp_examples       3.5.1
[  ]sockjs                           0.3.4-rmq3.5.1-git3132eb9
[e ] webmachine                       1.10.3-rmq3.5.1-gite9359c7
  
查看生成的.erlang.cookie文件
[iyunv@web4 sbin]$ ll ~/.erlang.cookie
-r-------- 1 root root 20 Dec  7 00:00 /root/.erlang.cookie



可以看到.erlang.cookie文件的权限是400.
在node2服务器也创建web界面插件。然后查看.erlang.cookie是否生成。

6)   同步.erlang.cookie文件
Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。Erlang的集群中各节点是通过一个magic cookie来实现的,这个cookie存放在$HOME/.erlang.cookie 中,文件是400的权限。所以必须保证各节点cookie保持一致,否则节点之间就无法通信。
1
2
3
4
5
6
7
将node1中的.erlang.cookie通过scp传输到node1中去
[iyunv@node1 ~]$ scp -rp ~/.erlang.cookie root@192.168.1.22:/root
分别在node1和node2查看同步后的.erlang.cookie是否一致
[iyunv@node1 ~]$ cat ~/.erlang.cookie
GGWQARTSOKFNZTLLIITV
[iyunv@node2 ~]$ cat ~/.erlang.cookie
GGWQARTSOKFNZTLLIITV



7)   启动RabbitMQ
同步完成后,就可以在两个节点上启动rabbitmq了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd rabbitmq/sbin
启动RabbitMQ           ./rabbitmq-server -detached
停止RabbitMQ           ./rabbitmqctl stop
查看状态:
[iyunv@node1 sbin]$ ./rabbitmqctlcluster_status
Cluster status of node rabbit@ node1...
[{nodes,[{disc,[rabbit@ node1]}]},
{running_nodes,[rabbit@ node1]},
{cluster_name,<<"rabbit@ node1">>},
{partitions,[]}]
  
[iyunv@node2 sbin]#  ./rabbitmqctl cluster_status
Cluster status of node rabbit@node2 ...
[{nodes,[{disc,[rabbit@node2]}]},
{running_nodes,[rabbit@node2]},
{cluster_name,<<"rabbit@node2">>},
{partitions,[]}]




8)   将node2加入node1节点,创建主从同步
主机在加入集群之前必须停掉本机的集群服务;
如node2要加入node1,需要现在node2上执行命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
关闭集群服务,然后再执行以下命令加入node1的集群:
[iyunv@node2 sbin]# ./rabbitmqctlstop_app
加入node1节点,执行此步骤之前确保主节点服务器是开启的:
[iyunv@node2 sbin]# ./rabbitmqctljoin_cluster --ram rabbit@node1
注:--ram指的是作为内存节点,要是想做为磁盘节点的话,就不用加--ram这个参数了,如果磁盘是ssd,建议不加—ram
执行加入集群命令后,再次开始集群服务:
[iyunv@node2 sbin]# ./rabbitmqctlstart_app
分别在node1和node2上查看节点状态:
node1节点:
[iyunv@node1 sbin]#  ./rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node1]},{ram,[rabbit@node2]}]},
{running_nodes,[rabbit@node1]},
{cluster_name,<<"rabbit@node1">>},
{partitions,[]}]
  
node2节点:
[iyunv@node2 sbin]# ./rabbitmqctlcluster_status
Cluster status of node rabbit@node2 ...
[{nodes,[{disc,[rabbit@node1]},{ram,[rabbit@node2]}]},
{running_nodes,[rabbit@node1,rabbit@node2]},
{cluster_name,<<"rabbit@node1">>},
{partitions,[]}]




9)   验证同步
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
在node1上创建一个用户:
[iyunv@node1 sbin]# ./rabbitmqctl  add_user mxd_mq mxd123456
Creating user "mxd_mq" ...
查看用户列表:
[iyunv@node1 sbin]# ./rabbitmqctl  list_users
\Listing users ...
guest  [administrator]
mxd_mq    []
  
然后在node2上查看用户列表:
[iyunv@node2 sbin]# ./rabbitmqctl list_users
Listing users ...
guest  [administrator]
mxd_mq    []
node2上也有在node1上创建的用户,表示两个节点完成主从同步。
10)重启集群节点:
如果node2要关闭节点,可以执行操作:
[iyunv@node2 sbin]#./rabbitmqctl stop
查看集群节点状态
[iyunv@node2 sbin]# ./rabbitmqctl cluster_status
启动节点:
[iyunv@node2 sbin]# ./rabbitmq-server –detached



11)节点退出集群:
1
2
3
4
5
6
7
如果node2要关闭节点,可以执行操作:
[iyunv@node2 sbin]#./rabbitmqctl stop_app
如果node2要退出集群,则执行操作:
[iyunv@node2 sbin]#./rabbitmqctl reset
注:如果只剩最后一个节点,退出集群时使用force_reset
启动节点集群服务
[iyunv@node2 sbin]#./rabbitmqctl start_app




12)测试:在断开(关闭)一个节点时,另一节点的状态:
1
2
3
4
5
6
7
关闭node2时,查看node1的状态:
[iyunv@node1 sbin]# ./rabbitmqctl  cluster_status
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},
{running_nodes,[rabbit@node1]},
{cluster_name,<<"rabbit@node2">>},
{partitions,[]}]




3.其他说明
1)  关闭node1时,查看node2的状态:
1
2
3
4
5
6
[iyunv@node2 sbin]#  ./rabbitmqctl cluster_status
Cluster status of node rabbit@node2 ...
[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},
{running_nodes,[rabbit@node2]},
{cluster_name,<<"rabbit@node2">>},
{partitions,[]}]




再次启动node1后,大约30秒回复正常
注:从节点重启后,会自动连接上集群,不过需要大约15-20秒。
2)  如何将节点中磁盘点修改为内存点:
1
2
3
4
5
6
7
8
9
10
11
12
如,将node1的磁盘点改为内存点
root@node1 sbin]# rabbitmqctl stop_app
root@node1 sbin]# rabbitmqctlchange_cluster_node_type ram
root@node1 sbin]# rabbitmqtl start_app
查看修改后的状态:
[iyunv@node1 sbin]$ ./rabbitmqctlcluster_status
Cluster status of node rabbit@ node1...
[{nodes,[{disc,[rabbit@ node2]},{ram,[rabbit@ node1]}]},
{running_nodes,[rabbit@ node2,rabbit@ node1]},
{cluster_name,<<"rabbit@ node1 ">>},
{partitions,[]}]
注:节点中必须最少要有一个disc点(磁盘点),这是为了永久化存储考虑,






3)  关于使用其他用户(普通用户)启动rabbitmq的操作方法
如果想要使用其他用户,比如创建一个www用户启动rabbitmq,则操作方法为:
使用root安装完成erlang后,并将rabbitmq包解压并移动至/usr/local目录下,将rabbitmq目录以及rabbitmq数据和日志的目录的所属用户修改为www:
1
2
chown -R www.www /usr/local/rabbitmq
chown -R www.www /data/rabbitmq/



然后使用www登录服务器,并安装rabbitmq的web插件,此时会在www的家目录下生成.erlang.cookie文件,在其他从节点服务器也如此操作,从节点操作完成后,需要将从节点下的.erlang.cookie文件修改权限为700,否则从主节点同步.erlang.cookie到从节点时会报权限不足,完成后,使用scp命令同步.erlang.cookie文件到从节点:
1
2
3
4
5
6
7
[www@node1~]$ scp -rp ~/.erlang.cookie www@192.168.1.22:/home/www
完成以上配置后,在主从节点上使用www用户启动rabbitmq即可,
小提醒:如果执行启动命令
./rabbitmq-server –detached出现以下提示,表示erlang在编译,
HiPE compiling…….
可以在启动命令后加“&”
./rabbitmq-server -detached &





4)  用户管理说明以及常用命令
在使用过程中的问题:使用默认的账号guest登陆管理控制台,却提示登陆失败。是因为出于安全因素的考虑,guest用户只能通过localhost登陆使用。所以若是在其他机子上登入远端的rabbitmq服务器需要新建一个用户,并且新用户需要赋予超级管理员(administrator)权限

一些常用的rabbitmq/sbin/下的命令
启用监控插件             ./rabbitmq-pluginsenable rabbitmq_management
关闭监控插件             ./rabbitmq-plugins disable rabbitmq_management
新增一个用户             ./rabbitmqctl  add_user  Username Password
删除一个用户             ./rabbitmqctl  delete_user  Username
修改用户的密码            ./rabbitmqctl  change_password  Username Newpassword
查看当前用户列表           ./rabbitmqctl  list_users
赋予超级管理员权限         ./rabbitmqctlset_user_tags newuser administrator

5)  关于集群中节点的说明
集群中有两种节点:
   1 内存节点:只保存状态到内存(一个例外的情况是:持久的queue的持久内容将被保存到disk)
   2 磁盘节点:保存状态到内存和磁盘。
内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。集群中,只需要一个磁盘节点来保存状态就足够了;
如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失。
服务器安装完成rabbitmq,并安装web界面访问插件后,会在/root/下生成一个.erlang.cookie文件,该文件将在集群中使用到。


6)  疑难问题解决:
如果在rabbitmq单机版服务开启的过程中,改动erlang.cookie,就会在服务重启后出现各种各样的问题,所以建议在rabbitmq的服务开启之前要把erlang.cookie配置好。如果出现问题,解决方法就是将服务停掉后执行以下命令:
rm -f /var/lib/rabbitmq/mnesia/rabbit/*
如果在rabbitmq-server的配置文件中更改了数据库存放目录,则执行以下命令:
rm -f /path/to/rabbitmq/db/rabbit/*
重启服务即可!



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-311697-1-1.html 上篇帖子: Linux命令:ssh,scp使用及免密码登录 下篇帖子: CentOS6 NFS的安装配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表