当前位置: 首页 > news >正文

长春建站培训班专门做各种产品测评的网站

长春建站培训班,专门做各种产品测评的网站,特种作业人员成绩查询,网页编辑工具wordpressDockerCompose部署RabbitMQ集群 最近小黄在工作中正好需要部署RabbitMQ集群#xff0c;借此来记录一下#xff0c;也希望可以帮助到大家 前置条件 简单介绍一下咱们公司现有的条件以及想要达成的效果 服务器3台#xff0c;3台都是属于一个专有网络中#xff0c;也就是说3…DockerCompose部署RabbitMQ集群 最近小黄在工作中正好需要部署RabbitMQ集群借此来记录一下也希望可以帮助到大家 前置条件 简单介绍一下咱们公司现有的条件以及想要达成的效果 服务器3台3台都是属于一个专有网络中也就是说3台机子形成局域网可以互相访问 ServerA有公网ip的服务器可以访问公网ServerB只有私网的服务器需要通过ServerA来访问公网ServerC同ServerB 因为ServerA的内存占用已经比较高了所以小黄的想法是在ServerB、ServerC上各部署一个RabbitMQ形成集群因为程序也是跑在局域网中所以不需要向外暴露5672端口只需要在ServerA上通过反向代理暴露15672端口即可 修改hosts文件让他们通过ServerA这种命名的方式访问各自的ip 172.16.0.130 ServerA 172.16.0.131 ServerB 172.16.0.132 ServerC部署RabbitMQ 小黄采用的是DockerCompose方式部署这里刚开始小黄就踩坑了 拉镜像 因为ServerB、ServerC没办法直接去docker仓库拉镜像所以需要在ServerA上拉镜像在传到私网服务器上 # ServerA上执行 # 拉镜像这里要注意的是一定要拉management只有management才有可视化管理页面的插件 docker pull rabbitmq:management# 导出镜像 docker save -o rabbitmq.tar rabbitmq:management# 发送文件到ServerB、ServerC rsync -av /root/docker-images/rabbitmq.tar ServerB:/root# ServerB、ServerC上执行 docker load -i rabbitmq.tardocker-compose.yml 接下来需要编写docker-compose.yml文件以ServerB来介绍ServerC只是需要讲ServerB修改成ServerC即可 version: 3.2 services:rabbitmq:image: rabbitmq:managementcontainer_name: rabbitmqrestart: on-failure:5# 对应host文件hostname: ServerB# 这个是向容器内部添加hosts文件这里需要与ServerC形成集群所以要写ServerC的地址extra_hosts:- ServerC:172.16.0.132ports:- 4369:4369- 5672:5672- 15672:15672- 25672:25672volumes:- ./data:/var/lib/rabbitmq- ./erlang.cookie:/var/lib/rabbitmq/.erlang.cookieenvironment:- RABBITMQ_DEFAULT_USERadmin- RABBITMQ_DEFAULT_PASSadmin- RABBITMQ_NODENAMErabbitServerB # 节点名称networks:- rabbitmq-networknetworks:rabbitmq-network:driver: bridge接下来要解释几个关键信息 暴露端口 5672、15672就不介绍了这里注意安全组得开放这些端口出方向、入方向都需要 4369这是 Erlang 分布式节点之间通信的 epmdErlang Port Mapper Daemon端口。epmd 是一个用于管理 Erlang 节点之间通信的守护进程它负责维护一个节点注册表以便其他节点可以发现和连接到正在运行的节点。在 RabbitMQ 集群中节点之间使用 epmd 来进行通信和发现。25672这是 RabbitMQ 节点之间的 AMQP 0-9-1 协议端口。在 RabbitMQ 集群中节点之间使用此端口进行内部通信包括集群节点之间的消息传递和状态同步。 .erlang.cookie .erlang.cookie存储了一串密钥这个可以自定义需要加入相同的集群就需要里面的编码一致我这边采取挂载的方式来修改也可以进入容器内部修改 搭建集群 在ServerB、ServerC上启动RabbitMQ在mq中是不存在主节点、子节点的关系的但我还是比较习惯这样称呼目前讲ServerB作为主节点ServerC来主动加入该集群成为子节点 # 进入ServerC上的容器 docker exec -it rabbitmq /bin/bashrabbitmqctl stop_app rabbitmqctl reset # 加入集群rabbitServerB要对应上面设置的RABBITMQ_NODENAME # --ram将消息存储在内存中不加则存储在磁盘空间这取决于个人 rabbitmqctl join_cluster --ram rabbitServerB rabbitmqctl start_app执行完之后就可以查看集群信息 rabbitmqctl cluster_status看到这个输出集群就搭建成功了 测试 在ServerB上创建队列、交换机、绑定关系并且发送信息在ServerC上也可以获取到这些信 # 执行这些操作前需要向创建用户、授予权限 # 创建新用户 rabbitmqctl add_user your_username your_password# 授予管理员权限 rabbitmqctl set_user_tags your_username administrator# 授予访问虚拟主机的权限 rabbitmqctl set_permissions -p / your_username .* .* .*# 创建队列 rabbitmqadmin declare queue name队列名称 --usernameusername --passwordpassword# 创建交换机 rabbitmqadmin declare exchange name交换机名称 type交换机类型 --usernameusername --passwordpassword# 绑定队列到交换机 rabbitmqadmin declare binding source交换机名称 destination队列名称 routing_key路由键 --usernameusername --passwordpassword# 向交换机发送消息 rabbitmqadmin publish exchangeyour_exchange_name routing_keyyour_routing_key payloadYour message content --usernameusername --passwordpassword# 查看队列中的消息 rabbitmqadmin get queueyour_queue_name --usernameusername --passwordpassword在小黄的一系列测试中发现一个问题向ServerB中发送消息后消息其实是存在ServerB上的ServerC上并没有存储该消息的内容 也就是说现在的集群只能做到一部分的功能当程序连接到某一个RabbitMQ节点时他会自动发现集群加入到集群中当ServerB挂掉之后ServerC可以继续承担消息收发的功能当时ServerB挂掉之前假如队列中有消息没处理完那这些消息将不复存在也就是说会出现消息丢失的情况 镜像队列 优点镜像队列会将队列中的消息在集群中的多个节点之间进行复制。这样无论消息最初被发送到哪个节点它都会被复制到其他节点上确保即使某个节点发生故障消息仍然可以被其他节点消费提供冗余和高可用性 缺点资源消耗 使用正则表达式^myqueue.*来匹配myqueue开头的队列 rabbitmqctl set_policy ha-all ^myqueue.* {ha-mode:all} --priority 0 --apply-to queues如果设置所有队列都为镜像队列 rabbitmqctl set_policy ha-all .* {ha-mode:all} --apply-to queues再次测试发现ServerB即使挂掉还是可以从ServerC上读取数据 反向代理 我们还是用docker compose的方式来部署nginx只暴露我们需要的端口 version: 3.2 services:nginx:image: nginx:stable-perlcontainer_name: nginx-middlewareuser: rootprivileged: trueports:- 15672:15672volumes:- /root/nginx-middleware/html:/usr/share/nginx- /root/nginx-middleware/conf/nginx.conf:/etc/nginx/nginx.conf- /root/nginx-middleware/log:/var/log/nginxenvironment:- TZAsia/Shanghai- LANGC.UTF-8- LC_ALLC.UTF-8networks:nginx-middleware:aliases: - nignx-warelogging:driver: json-fileoptions:max-size: 30mnetworks:nginx-middleware: external: truenginx.conf worker_processes 1;events {worker_connections 1024; }http {server {listen 15683;server_name 外网ip;location / {proxy_pass http://私网服务器ip:15672;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}} }这里有一个很坑的点记录一下当时配的proxy_pass http://私网服务器ip:15672/因为结尾多了一个斜杠导致只能访问管理页面主界面其他请求全都是404 小Tip 必须要保证安全组开放了15672端口授权对象0.0.0.0 之前小黄只是授权了私网ip可以访问导致telnet访问不不通
http://www.sadfv.cn/news/348344/

相关文章:

  • 网站优化需求iss服务器网站建设
  • 做网站详情的图片厦门网站建设的公司
  • 京东优惠劵网站怎么做快速百度
  • 建网站的每年有费用国外自助建站免费建站平台
  • 深圳seo网站推广报价网站推广成本
  • 七星彩网站建设购物网站创建
  • 做网站软件下载手机版企业网站的建设水平直接关系到网络营销的效果
  • 电子商务网站建设考试wordpress 移动顶部菜单
  • seo都用在哪些网站注册集团公司需要什么条件?
  • 网站备案信息注销桐乡网站设计公司
  • wordpress同步博客长沙seo报价
  • 打开网站 输入内容存在危险字符经典重庆论坛上不了了
  • 网站短信验证怎么做的wordpress音乐播放页面
  • 基于thinkphp网站制作江西省建设厅网站资质升级查询
  • 呼和浩特网站网站建设唐山公司做网站
  • 做摄影网站厦门网站建设设计公司哪家好
  • 西安的商城网站建设咔咔做受视频网站
  • 做网站没有数据石家庄学设计的正规学校
  • 信息技术初二做网站网站模版html
  • 外贸led网站建设网站制作 培训
  • 临淄网站建设wordpress新手教程
  • 知名中文网站建设互联业务登录页 网站
  • 广州百度网站建设公司百度一下知道首页
  • 电脑建立网站平台网站建好后如何上线
  • 电子商务网站软件建设核心国际新闻最新报道
  • 云优化 网站建设装饰公司在哪个网站上接活
  • 兰山区网站建设推广建网站的目的是什么
  • 湘潭找个人做网站的室内设计软件哪个比较好
  • 免费做cpa单页网站江门住房和城乡建设部网站
  • 怎么给自己做网站吗文字设计图片在线生成