设为首页 收藏本站

运维网

查看: 213|回复: 0

[经验分享] centos7 rabbitmq集群安装配置管理

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2018-11-1 17:46:35 | 显示全部楼层 |阅读模式
本帖最后由 shang 于 2018-11-22 17:40 编辑

下载
http://www.rabbitmq.com/releases/erlang/erlang-19.0-1.el7.centos.x86_64.rpm
https://dl.bintray.com/rabbitmq/rabbitmq-server-rpm/:rabbitmq-server-3.6.12-1.el7.noarch.rpm


基础知识:
参考:http://www.cnblogs.com/flying607/p/9505386.html


消息和队列可以指定是否持久化,如果指定持久化则会保存到硬盘上 ,不然只在内存里。

普通集群模式下持久化的队列不能重建,内存节点和磁盘节点的区别就是将元数据放在了内存还是硬盘,仅此而已,当在集群中声明队列、交换器和绑定 ,这些操作会同步元数据到所有节点

元数据必须至少保存在一个硬盘上,内存节点重启会去磁盘节点下载当前集群元数据拷贝,磁盘节点全挂了,那么集群就无法创建新的东西了,但是还能继续使用已有的东西。

默认情况下,队列只会保存在一个节点上,其他只是保存元数据,当然消息也会投递到这个队列所在的机器上,所以我们才有了创建镜像队列的需求,镜像队列则需要队列适配了策略。



三节点IP
192.168.22.177
192.168.22.178
192.168.22.179


# cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)


修改三个节点的/etc/hosts文件,把三个节点IP和对应的主机名分别写入三个节点的文件中。


1、安装
三个节点安装
# rpm -ivh erlang-19.0-1.el7.centos.x86_64.rpm


# rpm -ivh rabbitmq-server-3.6.12-1.el7.noarch.rpm
warning: rabbitmq-server-3.6.12-1.el7.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 6026dfca: NOKEY
error: Failed dependencies:
        socat is needed by rabbitmq-server-3.6.12-1.el7.noarch

# yum install socat


# rpm -ivh rabbitmq-server-3.6.12-1.el7.noarch.rpm


启动服务
# rabbitmq-server -detached


查看状态
# rabbitmqctl status

列出插件
# rabbitmq-plugins list


开启页面管理插件
# rabbitmq-plugins enable rabbitmq_management


2、创建集群
保持三个节点.erlang.cookie文件一致
# find / -name "*.erlang.cookie*"
/var/lib/rabbitmq/.erlang.cookie


# ll /var/lib/rabbitmq/.erlang.cookie
-r-------- 1 rabbitmq rabbitmq 20 Oct 24 00:00 /var/lib/rabbitmq/.erlang.cookie


将177作为主节点,拷贝177上的.erlang.cookie文件到另外两个节点的/var/lib/rabbitmq目录下
并修改拷贝后的文件权限
# chown rabbitmq:rabbitmq .erlang.cookie


178、179两个节点
杀掉rabbitmq的进程
# kill -9


把节点加入集群
# rabbitmq-server -detached


关闭应用
# rabbitmqctl stop_app


加入集群
# rabbitmqctl join_cluster rabbit@rabbitmq-server1


启动应用
# rabbitmqctl start_app




177节点查看
# rabbitmqctl cluster_status
Cluster status of node 'rabbit@rabbitmq-server1'
[{nodes,[{disc,['rabbit@rabbitmq-server2','rabbit@rabbitmq-server3',
                'rabbit@rabbitmq-server1']}]},
{running_nodes,['rabbit@rabbitmq-server3','rabbit@rabbitmq-server2',
                 'rabbit@rabbitmq-server1']},
{cluster_name,<<"rabbit@rabbitmq-server1">>},
{partitions,[]},
{alarms,[{'rabbit@rabbitmq-server3',[]},
          {'rabbit@rabbitmq-server2',[]},
          {'rabbit@rabbitmq-server1',[]}]}]


3、web管理页面配置         
177创建rabbitmq管理页面管理用户
# rabbitmqctl add_user root Password
# rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
# rabbitmqctl set_user_tags root administrator


可以使用用户root通过浏览器登录web管理界面http://192.168.22.177:15672


在web界面,登陆后,点击“Admin--Virtual Hosts(页面右侧)”,在打开的页面上的下方的“Add a new virtual host”处增加一个虚拟主机test,同时给用户“root”和“guest”均加上权限


177上做
# rabbitmqctl set_policy -p test  ha-all "^" '{"ha-mode":"all"}'


"test" vhost名称, "^"匹配所有的队列, ha-all 策略名称为ha-all, '{"ha-mode":"all"}' 策略模式为 all 即复制到所有节点,包含新增节点。


则此时镜像队列设置成功。(这里的虚拟主机test是代码中需要用到的虚拟主机,虚拟主机的作用是做一个消息的隔离,本质上可认为是一个rabbitmq-server,是否增加虚拟主机,增加几个,这是由开发中的业务决定,即有哪几类服务,哪些服务用哪一个虚拟主机,这是一个规划)。


# rabbitmqctl add_user mquser mqpassword
# rabbitmqctl set_permissions -p test mquser '.*' '.*' '.*'



4、安装haproxy
177上安装haproxy
# yum install haproxy


# vi /etc/haproxy/haproxy.cfg


删除60行之后的内容
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
......


添加
listen rabbitmq_local_cluster 0.0.0.0:5670
    mode tcp
    balance roundrobin
    server rabbit1 192.168.22.177:5672 check inter 5000 rise 2 fall 3
    server rabbit2 192.168.22.178:5672 check inter 5000 rise 2 fall 3
    server rabbit3 192.168.22.179:5672 check inter 5000 rise 2 fall 3
listen private_monitoring :8100
    mode http
    option httplog
    stats enable
    stats uri       /stats
    stats refresh 60s
    stats auth admin:admin


# systemctl start haproxy.service


http://192.168.22.177:8100/stats


结合springboot,类似下面的配置
rabbitmq:
rabbitmq.host: 192.168.22.177
rabbitmq.port: 5670
rabbitmq.username: mquser
rabbitmq.password: mqpassword
rabbitmq.virtual-host: test



5、rabbitmq使用的日常命令
启动rabbitmq
rabbitmq-server -detached

查看rabbitmq状态
rabbitmqctl status


节点服务管理
systemctl start rabbitmq-server.service
systemctl stop rabbitmq-server.service
systemctl restart rabbitmq-server.service

添加节点到集群
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@HOSTNAME
rabbitmqctl start_app

查看集群状态
rabbitmqctl cluster_status


添加账号:
rabbitmqctl add_user admin admin
添加 权限tag
rabbitmqctl set_user_tags admin administrator


删除用户(删除guest用户)
rabbitmqctl delete_user guest


修改用户的密码
rabbitmqctl  change_password  Username  Newpassword


查看当前用户列表
rabbitmqctl  list_users


添加vhost
# rabbitmqctl add_vhost test


查看vhost
# rabbitmqctl list_vhosts

修改硬盘节点为内存节点
rabbitmqctl change_cluster_node_type ram

6、两台服务器做集群,一台服务器做硬盘节点,一台服务器做内存节点


把rabbitmq用户接入sudo权限
# visudo
rabbitmq       ALL=(ALL:ALL) NOPASSWD:ALL


编辑hosts文件,两台服务器做解析
$ sudo vi /etc/hosts


两台服务器安装启动服务
# su rabbitmq


$ sudo yum install erlang-19.0-1.el7.centos.x86_64.rpm


$ sudo yum install rabbitmq-server-3.6.12-1.el7.noarch.rpm


$ rabbitmq-server -detached


$ sudo rabbitmqctl status


$ sudo rabbitmq-plugins list


$ sudo rabbitmq-plugins enable rabbitmq_management


同步文件
A服务器拷贝文件到B服务器
$ sudo scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.88:/var/lib/rabbitmq/


B服务器
$ sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie


重启两台服务
杀掉进程
sudo rabbitmq-server -detached  


B服务器加入A服务器
$ sudo rabbitmqctl stop_app


serverA是A服务器主机名
$ sudo rabbitmqctl join_cluster --ram rabbit@serverA


$ sudo rabbitmqctl cluster_status
Cluster status of node 'rabbit@serverA'
[{nodes,[{disc,['rabbit@serverA']},{ram,['rabbit@serverB']}]},
{running_nodes,['rabbit@serverA']},
{cluster_name,<<"rabbit@serverA">>},
{partitions,[]},
{alarms,[{'rabbit@serverA',[]}]}]

从上面可以看出A服务器为disc,即硬盘模式,B服务器为ram,即内存模式。


查看账户
$ sudo rabbitmqctl list_users
Listing users
guest   [administrator]


默认用户名:guest 密码:guest


为guest用户赋予根的权限
$ sudo rabbitmqctl set_permissions -p / guest ".*" ".*" ".*"
Setting permissions for user "guest" in vhost "/"


$ sudo rabbitmqctl set_policy -p /  ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{\"ha-mode\":\"all\"}" with priority "0"

注意:
rabbitmq从3.3.0开始禁止使用guest/guest权限通过除localhost外的访问。如果想使用guest/guest通过远程机器访问,需要在rabbitmq配置文件中(/etc/rabbitmq/rabbitmq.config)中设置loopback_users为[],配置文件不存在创建即可。

两个节点添加配置文件
$ sudo vi /etc/rabbitmq/rabbitmq.config
[{rabbit, [{loopback_users, ["admin"]}]}].

重启服务
$ sudo systemctl stop rabbitmq-server.service
$ sudo systemctl start rabbitmq-server.service

另外好的设计架构可以如下:(参考之前转载的文章)
在一个集群里,有3台以上机器,其中1台使用磁盘模式,其它使用内存模式。内存节点速度更快,因此客户端(consumer、producer)连接访问它们。而磁盘模式的节点,由于磁盘IO相对较慢,作数据备份使用。


完整的架构如下:
三个节点组成rabbitma集群,一个硬盘节点,两个内存节点
haproxy做三个节点的负载均衡
keepalived做高可用


参考:http://www.cnblogs.com/lylife/p/5584019.html
https://blog.csdn.net/u012062455/article/details/80003763
https://www.cnblogs.com/saneri/p/7798251.html
https://blog.csdn.net/jxdl6655/article/details/78194191
http://www.bubuko.com/infodetail-2710921.html



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

点击关注更多内容
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则  允许回帖邮件提醒楼主

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

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

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

扫描微信二维码查看详情

客服 E-mail:kefu@yunvn.com

本站由青云提供云计算服务

运维网--中国最专业的运维工程师交流社区

京ICP备14039699号-1 Copyright © 2012-2020

使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

Good good study day day up !


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


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


独家合作伙伴: 青云cloud

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