IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 初学RabbitMQ (三) 集群高可用 -> 正文阅读

[系统运维]初学RabbitMQ (三) 集群高可用

RabbitMQ集群

rabbitmq有3种模式,但集群模式是2种。

? 详细如下: 单一模式:即单机情况不做集群,就单独运行一个rabbitmq而已。之前一直在用

  • 普通模式:默认模式,以两个节点(A、B)为例来进行说明

  • 当消息进入A节点的Queue后,consumer从B节点消费时,RabbitMQ会在A和B之间创建临 时通道进行消息传输,把A中的消息实体取出并经过通过交给B发送给consumer

  • 当A故障后,B就无法取到A节点中未消费的消息实体

    • 如果做了消息持久化,那么得等A节点恢复,然后才可被消费
    • 如果没有持久化的话,就会产生消息丢失的现象
  • 镜像模式:

    • 非常经典的 mirror 镜像模式,保证 100% 数据不丢失。
    • 高可靠性解决方案,主要就是实现数据的同步,一般来讲是 2 - 3 个节点实现数据同步 对于 100% 数据可靠性解决方案,一般是采用 3 个节点。
    • 在实际工作中也是用得最多的,并且实现非常的简单,一般互联网大厂都会构建这种镜像集群模式

集群搭建

准备两台Liunx服务器,并安装好RabbitMQ。

  • 集群步骤如下:

    ? 1、修改 /etc/hosts 映射文件

    [root@a ~]# vim /etc/hosts
    

    一号服务器

127.0.0.1 A localhost localhost.localdomain localhost4 localhost4.localdomain4
::1       A      localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.152.129 A
192.168.204.130 B

? 二号服务器

127.0.0.1 B localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 B localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.204.141 A
192.168.204.142 B

考虑到一些CentOS改Host文件后主机名不变,可以执行以下命令改变主机名。

[root@a ~]# hostnamectl set-hostname 主机名 
[root@a ~]# reboot  ##重启liunx

? 2、相互通信,cookie必须保持一致,同步 rabbitmq的cookie 文件:跨服务器拷贝 .erlang.cookie (隐藏文件,使用 ls -all 显示)

.erlang.cookie 文件在/var/lib/rabbitmq/下

为了保持rabbitmq的cookie文件一致性,我们可以跨服务器拷贝.erlang.cookie文件

root@A opt]# scp /var/lib/rabbitmq/.erlang.cookie  192.168.204.142:/var/lib/rabbitmq

? 3、两台服务器都关闭防火墙,开启Rabbitmq服务

[root@A ~]# systemctl stop firewalld 

[root@A ~]# systemctl start rabbitmq-server

? 4、加入集群节点

[root@B ~]# rabbitmqctl stop_app   ##关闭本机RabbitMQ节点

[root@B ~]# rabbitmqctl join_cluster rabbit@A  ##将本机节点集群加入A节点

[root@B ~]# rabbitmqctl start_app ##启动本机节点

5、查看管理端

  • 搭建集群结构之后,之前创建的交换机、队列、用户都属于单一结构,在新的集群环境中是 不能用的

  • 所以在新的集群中重新手动添加用户即可(任意节点添加,所有节点共享)

  • [root@A ~]# rabbitmqctl add_user 用户名 密码
    [root@A ~]# rabbitmqctl set_user_tags 用户名 administrator 
    [root@A ~]# rabbitmqctl set_permissions -p "/" 用户名 ".*" ".*" ".*"
    
  • 注意:当节点脱离集群还原成单一结构后,交换机,队列和用户等数据 都会重新回来

  • 这就是集群成功后的页面,但是默认集群是普通模式,系统可用性不高。因此我们要设置为镜像模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bSo4Z82q-1643461665580)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220129191943461.png)]

  • 设置镜像模式
    • 将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态一致

      • 语法:set_policy {name} {pattern} {definition}

      • name:策略名,可自定义

      • pattern:队列的匹配模式(正则表达式)

        • “^” 可以使用正则表达式,比如"^queue_" 表示对队列名称以“queue_”开头的所有 队列进行镜像,而"^"表示匹配所有的队列
      • definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode

      • ha-mode:(High Available,高可用)模式,指明镜像队列的模式,有效值为 all/exactly/nodes,当前策略模式为 all,即复制到所有节点,包含新增节点

      • all:表示在集群中所有的节点上进行镜像
        exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
        nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
        
      • ha-params:ha-mode模式需要用到的参数

        • ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manua
[root@A ~]# rabbitmqctl set_policy xall "^" '{"ha-mode":"all"}'

这样镜像模式就设置成功了,在任意节点发送消息后,集群节点消息同步。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lUrfkOOi-1643461665581)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220129204531152.png)]

  • 除了以上方式设置镜像模式以外,还可以在管理页面设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ifz4juf8-1643461665581)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220129204811334.png)]

HAProxy负载均衡

  • 虽然我们在程序中访问A服务器,可以实现消息的同步,虽然在同步,但都是A服务器在接收消 息,A太累。

  • 是否可以想Nginx一样,做负载均衡,A和B轮流接收消息,再镜像同步。

安装和配置

HAProxy下载:http://www.haproxy.org/download/1.8/src/haproxy-1.8.12.tar.gz

  • 解压
[root@localhost opt]# tar -zxvf haproxy-1.8.12.tar.gz
  • make时需要使用 TARGET 指定内核及版本
[root@localhost opt]# uname -r

? 根据内核版本选择编译参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dPb83AGb-1643461665581)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220129210128263.png)]

  • 进入目录,编译和安装

    [root@localhost opt]# cd haproxy-1.8.12
    [root@localhost haproxy-1.8.12]# make TARGET=linux2628
    [root@localhost haproxy-1.8.12]# make install PREFIX=/usr/local/haproxy
    
  • 安装成功后,查看版本

    [root@localhost haproxy-1.8.12]# /usr/local/haproxy/sbin/haproxy -v
    
  • 配置启动文件,复制haproxy文件到/usr/sbin下 ,复制haproxy脚本,到/etc/init.d下

[root@localhost haproxy-1.8.12]# cp /usr/local/haproxy/sbin/haproxy /usr/sbin/

[root@localhost haproxy-1.8.12]# cp ./examples/haproxy.init /etc/init.d/haproxy

[root@localhost haproxy-1.8.12]# chmod 755 /etc/init.d/haproxy

  • 创建系统账号
[root@localhost haproxy-1.8.12]# useradd -r haproxy
  • haproxy.cfg 配置文件需要自行创建
[root@localhost haproxy-1.8.12]# mkdir /etc/haproxy
[root@localhost haproxy-1.8.12]# vim /etc/haproxy/haproxy.cfg
  • 添加配置信息到haproxy.cfg

  • #全局配置
    global
    #设置日志
    log 127.0.0.1 local0 info
    #当前工作目录
    chroot /usr/local/haproxy
    #用户与用户组
    user haproxy
    group haproxy
    #运行进程ID
    uid 99
    gid 99
    #守护进程启动
    daemon
    #最大连接数
    maxconn 4096
    #默认配置
    defaults
    #应用全局的日志配置
    log global
    #默认的模式mode {tcp|http|health},TCP是4层,HTTP是7层,health只返回OK
    mode tcp
    #日志类别tcplog
    option tcplog
    #不记录健康检查日志信息
    option dontlognull
    #3次失败则认为服务不可用
    retries 3
    #每个进程可用的最大连接数
    maxconn 2000
    #连接超时
    timeout connect 5s
    #客户端超时30秒,ha就会发起重新连接
    timeout client 30s
    #服务端超时15秒,ha就会发起重新连接
    timeout server 15s
    #绑定配置
    listen rabbitmq_cluster
    bind 192.168.204.143:5672
    #配置TCP模式
    mode tcp
    #简单的轮询
    balance roundrobin
    #RabbitMQ集群节点配置,每隔5秒对mq集群做检查,2次正确证明服务可用,3次失败证
    明服务不可用
    server A 192.168.204.141:5672 check inter 5000 rise 2 fall 3
    server B 192.168.204.142:5672 check inter 5000 rise 2 fall 3
    #haproxy监控页面地址
    listen monitor
    bind 192.168.204.143:8100
    mode http
    option httplog
    stats enable
    # 监控页面地址 http://192.168.204.143:8100/monitor
    stats uri /monitor
    stats refresh 5s
    
    
  • 启动HAProxy

[root@localhost haproxy]# service haproxy start
  • 访问监控中心:http://192.168.204.143:8100/monitor
    • 记得关闭防火墙: systemctl stop firewalld

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oZDexXih-1643461665582)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220129210625918.png)]

  • 项目发消息,只需要将服务器地址修改为143即可,其余不变

  • 所有的请求都会交给HAProxy,其负载均衡给每个rabbitmq服务器

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 19:17:57  更:2022-01-30 19:20:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 7:42:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码