linux怎么查看本机内存大小
205
2022-10-13
消息中间件Rabbitmq的使用
一:消息中间件的描述1、简介消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信。当下主流的消息中间件有RabbitMQ、Kafka、ActiveMQ、RocketMQ等
2、消息中间件主要作用• 冗余(存储)• 扩展性• 可恢复性• 顺序保证• 缓冲• 异步通信• 削峰 :消息队列中的常用场景,一般在秒杀或抢够活动中使用广泛。一般会因为流量过大,应用系统配置承载不了这股瞬间流量,导致系统直接挂掉,即传说中的“宕机”现象。为解决这个问题,我们会将那股巨大的流量拒在系统的上层,即将其转移至 MQ 而不直接涌入我们的接口。
二.消息队列之一RabbiMQ简介1, RabbiMQ是⽤Erang开发的,集群⾮常⽅便,因为Erlang天⽣就是⼀⻔分布式语⾔,但其本身并不⽀持负载均衡,支持高并发,支持可扩展。支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
2, RabbiMQ的特点 • 可靠性• 扩展性• 高可用性• 多种协议• 多语言客户端• 管理界面• 插件机制
3.什么是消息队列MQ 全称为Message Queue, 消息队列。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信。
4.RabbiMQ模式注意:RabbitMQ模式⼤概分为以下三种:(1)单⼀模式 (一台主机部署rabbitmq)(2)普通模式 (默认的集群模式)。(3) 镜像模式 (把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA⽅案,在对业务可靠性要求较⾼的场合中⽐较适⽤)。要实现镜像模式,需要先搭建⼀个普通集群模式,在这个模式的基础上再配置镜像模式以实现⾼可⽤,在镜像模式中设置策略可以将主rabbitmq中的数据同步到集群中其他节点里
++++++++++++RabbitMQ 集 群 基 础 部 署 (普通模式)++++++++++++
一:基础部署,集群里的主机都需要实施的操作
1,若有三台服务器作为三个节点,且都联⽹,关闭防火墙,selinux,编辑域名解析/etc/hosts(ip与主机名称应该对应好,要不然容易影响实验)[root@rabbitmq-1 ~]# vim /etc/hosts192.168.50.138 rabbitmq-1192.168.50.139 rabbitmq-2192.168.50.140 rabbitmq-3
2,三个节点配置安装rabbitmq软件安装依赖: [root@rabbitmq-1 ~]# yum install -y gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel [root@rabbitmq-1 ~]# wget --content-disposition [root@rabbitmq-1 ~]# rpm -ivh erlang-20.3-1.el7.centos.x86_64.rpm
测试;[root@rabbitmq-1 ~]# erl
安装rabbitmq:[root@rabbitmq-1 ~]# wget ~]# yum install rabbitmq-server-3.7.5-1.el7.noarch.rpm
3.启动启动方式一:[root@rabbitmq-1 ~]# systemctl daemon-reload [root@rabbitmq-1 ~]# systemctl start rabbitmq-server[root@rabbitmq-1 ~]# systemctl enable rabbitmq-server[root@rabbitmq-1 ~]# systemctl status rabbitmq-server启动方式二:[root@rabbitmq-1 ~]# /sbin/service rabbitmq-server status ---查看状态[root@rabbitmq-1 ~]# /sbin/service rabbitmq-server start ---启动
4,开启rabbitmq的web访问界面:[root@rabbitmq-1 ~]# rabbitmq-plugins enable rabbitmq_management
5.创建用户:注意:创建用户只需要在一台主机上添加就可以,即把谁当作管理员就在哪儿创建(1)添加用户和密码谁在[root@rabbitmq-1 ~]# rabbitmqctl add_user soho 123Creating user "soho" ......done.(2)这是为管理员[root@rabbitmq-1 ~]# rabbitmqctl set_user_tags soho administratorSetting tags for user "soho" to [administrator] ......done.(3)查看用户[root@rabbitmq-1 ~]# rabbitmqctl list_usersListing users ...guest [administrator]soho [administrator]...done.(4)权限[root@rabbitmq-1 ~]# rabbitmqctl set_permissions -p "/" soho "." "." "."Setting permissions for user "soho" in vhost "/" ......done. 此处设置权限时注意'.'之间需要有空格 三个'.*'分别代表了conf权限,read权限与write权限 例如:当没有给soho设置这三个权限前是没有权限查询队列,在ui界面也看不见
6,所有机器都操作:开启用户远程登录: [root@rabbitmq-1 ~]# cd /etc/rabbitmq/[root@rabbitmq-1 rabbitmq]# cp /usr/share/doc/rabbitmq-server-3.7.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config[root@rabbitmq-1 rabbitmq]# lsenabled_plugins rabbitmq.config[root@rabbitmq-1 rabbitmq]# vim rabbitmq.config修改如下:
9,注意如果是云服务器,切记添加安全组端口放行。web访问:192.168.50.138:15672这里需要注意:rabbitmq默认管理员用户:guest 密码:guest新添加的用户为:soho 密码:123
++++++++++++RabbitMQ 集 群 正 式 部 署 (普通模式)+++++++++++++
二,正式部署集群
1.首先创建好数据存放目录和日志存放目录[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/data[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/logs[root@rabbitmq-1 ~]# chmod 777 -R /data/rabbitmq[root@rabbitmq-1 ~]# chown rabbitmq.rabbitmq /data/ -R
2,创建配置文件:[root@rabbitmq-1 ~]# vim /etc/rabbitmq/rabbitmq-env.conf (添加如下内容)RABBITMQ_MNESIA_BASE=/data/rabbitmq/dataRABBITMQ_LOG_BASE=/data/rabbitmq/logs
[root@rabbitmq-1 ~]# cat /etc/rabbitmq/rabbitmq-env.conf
3,重启服务[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server
4.拷⻉erlang.cookie原因:集群中各节点是经由⼀个cookie来实现的,所以必须保证各节点cookie⼀致,不然节点之间就⽆法通信.(cookie存放的位置:解压缩方式安装部署的rabbitmq存放于/home/.erlang.cookie。rpm等安装包方式进行安装的/var/lib/rabbitmq)
[root@rabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookieHOUCUGJDZYTFZDSWXTHJ⽤scp的⽅式将rabbitmq-1节点的.erlang.cookie的值复制到其他两个节点中。[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.50.139:/var/lib/rabbitmq/[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.50.140:/var/lib/rabbitmq/
3.将mq-2、mq-3作为内存节点加⼊mq-1节点集群中.mq-1用作磁盘节点,在RabbitMQ集群中,必须⾄少有⼀个磁盘节点,否则队列元数据⽆法写⼊到集群中,当磁盘节点宕掉时,集群将⽆法写⼊新的队列元数据信息。在mq-2、mq-3执⾏如下命令:[root@rabbitmq-2 ~]# rabbitmqctl stop_app #停止节点,切记不是停止服务[root@rabbitmq-2 ~]# rabbitmqctl reset #如果有数据需要重置,没有则不用[root@rabbitmq-2 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq-1 #添加到磁盘节点Clustering node 'rabbit@rabbitmq-2' with 'rabbit@rabbitmq-1' ...[root@rabbitmq-2 ~]# rabbitmqctl start_app #启动节点Starting node 'rabbit@rabbitmq-2' ...
3.1.0此处节点问题解决方式:(1)如果执行rabbitmqctl stop_app 这条命令报错:需要执行#chmod 400 .erlang.cookie ⽂件是400的权限 #chown rabbitmq.rabbitmq .erlang.cookie(2)由于更改hostname文件,在每次rabbitmqctl stop或者rabbitmqctl cluster_status等,只要是rabbitmq的命令就报错,提示大概如下Cluster status of node rabbit@web2 ...Error: unable to connect to node rabbit@web2: nodedown..............此时先ps aux | grep mq,然后kill -9 所有mq的进程,然后再rabbitmq-server -detached即可解决。(即先强杀,再重新启动)(3)使用rabbitmqctl stop,rabbitmq-server -detached重新启动后,原先添加的用户admin、虚拟主机coresystem等均丢失,还需要重新添加。(4) rabbitmqctl join_cluster --ram rabbit@rabbitmq-1报错时检查域名解析(5)其他问题关于使用 rabbitmq-server -detached命令启动rabbitmq时,出现以下提示Warning: PID file not written; -detached was passed,此时使用rabbitmqctl status提示服务已启动,可知此问题不用解决。3.1.1节点补充:(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq-2和mq-3是内存节点,mq-1是磁盘节点。( 2)如果要使mq-2、mq-3都是磁盘节点,去掉--ram参数即可。(3)如果想要更改节点类型,可以使⽤命令rabbitmqctl change_cluster_node_type disc(ram),前提是必须停掉rabbit应⽤ 注:#如果有需要使用磁盘节点加入集群[root@rabbitmq-2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1[root@rabbitmq-3 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1
++++++由以上RABBITMQ普通模式+镜像模式+++++++++++++
三,添加镜像模式的原因:
上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,队列内容不会复制。如果队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。 镜像队列是基于普通的集群模式的。
1,创建镜像集群:三台机器相同操作rabbitmq set_policy :设置策略[root@rabbitmq-1 ~]#rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...
3,此时镜像队列设置成功。已经部署完成,将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一致。``
简单安装并配置负载均衡器HA
注意:如果使用阿里云,可以使用阿里云的内网slb来实现负载均衡,不用自己搭建HA。安装并配置负载均衡器HA1、在192.168.50.138安装HAProxyyum -y install haproxy2、修改 /etc/haproxy/haproxy.cfg[root@rabbitmq-1 ~]# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak[root@rabbitmq-1 ~]# vim /etc/haproxy/haproxy.cfggloballog 127.0.0.1 local2
chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy nbproc 4 daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------defaultsmode globalretries 3timeout connect 10stimeout client 1mtimeout server 1mtimeout check 10smaxconn 2048#---------------------------------------------------------------------##监控查看本地状态#####listen admin_statsbind :80mode 127.0.0.1 local0 errstats uri /haproxystats auth xingdian:123 (用户+密码)stats refresh 30s#######################################反代监控frontend serverbind :5670log globalmode tcp#option forwardfordefault_backend rabbitmqmaxconn 3backend rabbitmqmode tcplog globalbalance roundrobinserver rabbitmq1 192.168.50.138:5672 check inter 2000s rise 2 fall 3server rabbitmq2 192.168.50.139:5672 check inter 2000s rise 2 fall 3server rabbitmq3 192.168.50.140:5672 check inter 2000s rise 2 fall 3
[root@rabbitmq-1 ~]# systemctl restart haproxy
浏览器输入http://192.168.50.138/haproxy查看rabbitmq的状态。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~