RabbitMQ集群搭建及使用(一)

服务器清单
主机 ip 安装软件
server1 192.168.56.102 rabbitmq服务
server2 192.168.56.107 haproxy代理+keepalived
server3 192.168.56.108 rabbitmq服务
server4 192.168.56.109 haproxy代理+keepalived
服务器架构图

RabbitMQ集群搭建及使用(一)_第1张图片

分别在server1、server3上配置host,确保能相互访问的地址

vim /etc/hosts

    192.168.56.102 server1
    192.168.56.108 server3

RabbitMQ的集群是依赖erlang集群,而erlang集群是通过这个cookie进行通信认证的

分别在server1,server3上安装erlang
    sudo apt-get install erlang    

rabbitmq集群需要通过主机名互相访问 所以必须在这两台机器 /etc/hosts配置以上内容 确保主机名正确
两台机器使用rabbitmq进行通信 使用的安全策略是 erlang.cookie 就是一个随机字符串 两节点必须保持一致 否则 无法添加节点到集群
该cookie文件 可能位于 /var/lib/rabbitmq/.erlang.cookie 或者 ~/.erlang.cookie 启动任何一台机器,刚才已经启动了一个节点
把启动节点的.erlang.cookie拷贝到其他节点相同目录下

复制.erlang.cookie到其他节点

.erlang.cookie是erlang分布式的token文件,集群内所有的节点要持有相同的.erlang.cookie文件,才允许彼此通信。

将server1的.erlang.cookie文件复制到server3的相关路径下面(在server1下执行)

scp /var/lib/rabbitmq/.erlang.cookie 192.168.56.108:/var/lib/rabbitmq/  

修改文件的权限(两台服务器都需要执行)

sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
分别在server1、server3上安装rabbitmq-server
sudo apt-get install rabbitmq-server

##启动rabbitmq服务
sudo service rabbitmq-server start
在server3下执行以下命令,将server2节点加入rabbitmq集群
sudo rabbitmqctl stop_app  #暂停server2服务
sudo rabbitmqctl join_cluster rabbit@server1  #server2加入集群,rabbit是server1默认名称
sudo rabbitmqctl start_app  #启动server2服务
sudo rabbitmqctl cluster_status  #查看集群状态

rabbitmq的内存节点和磁盘节点的作用
在RabbitMQ集群中的节点只有两种类型:内存节点/磁盘节点,单节点系统只运行磁盘类型的节点。而在集群中,可以选择配置部分节点为内存节点。
内存节点将所有的队列,交换器,绑定关系,用户,权限,和vhost的元数据信息保存在内存中。
磁盘节点将这些信息保存在磁盘中,但是内存节点的性能更高,
为了保证集群的高可用性,必须保证集群中有两个以上的磁盘节点,来保证当有一个磁盘节点崩溃了,集群还能对外提供访问服务。
在上面的操作中,可以通过如下的方式,设置新加入的节点为内存节点还是磁盘节点。

rabbitmqctl join_cluster --ram rabbit@server1  #加入--ram表示内存节点,否则表示磁盘节点
在server1上添加管理员用户
sudo rabbitmqctl add_user admin manager
server1上为新用户授权
sudo rabbitmqctl set_permissions -p / admin ".* " ".* " ".*"
设置admin用户角色:
sudo rabbitmqctl set_user_tags admin administrator
查看集群状态
sudo rabbitmqctl cluster_status
剔除节点:
  • 方法一:

    在节点上执行:

    rabbitmqctl stop
    rabbitmqctl forget_cluster_node rabbit@server3 --offline
    

    注意上面在使用 rabbitmqctl forget_cluster_node 命令的时候用到了
    “–offline” 参数,如果不添加这个参数,就需要保证 server3 节点中的 RabbitMQ 服务处于
    运行状态,而在这种情况下, server3 无法先行启动, 则 “–offline” 参数的添加让其可以在非运行状态下将 nodel 剥离出当前集群。

  • 方法二:

    在节点上执行:

    rabbitmqctl stop_app
    rabbitmqctl reset
    

    这样也能剔除该节点

分别在server2 和 server4 上安装haproxy
sudo apt-get install haproxy
在server2上配置haproxy
 vim /etc/haproxy/haproxy.conf

加入以下配置内容

#### 对MQ集群进行监听
listen rabbitmq_cluster
    bind 0.0.0.0:5673   #通过5673对m1和m2进行映射
    option tcplog       #记录TCP连接状态和时间
    mode tcp            #四层协议代理,即对TCP进行转发
    option clitcpka     #开启TCP的Keep Alive(长连接模式)
    timeout connect 1s  #haproxy与mq建立连接的超时时间
    timeout client 10s  #客户端与haproxy最大空闲时间
    timeout server 10s  #服务器与haproxy最大空闲时间
    balance roundrobin  #采用轮询转发消息
    #每5秒发送一次心跳包,如果连续两次有响应则代表状态良好  
    #如果连续3次没有响应,则视为服务故障,该节点将被剔除
    server server1 192.168.56.102:5672 check inter 5s rise 2 fall 3
    server server3 192.168.56.108:5672 check inter 5s rise 2 fall 3

    #log /dev/log    local0

#### 开启监控服务
listen http_front
        bind 0.0.0.0:1080          #监听端口
        stats refresh 30s          #每30秒刷新一次
        stats uri /haproxy?stats   #统计页面uri
        stats auth admin:manager   #统计页面用户名和密码设置

#### RabbitMQ管理界面
listen rabbitmq_admin
    bind 0.0.0.0:8804            #这里注意端口不要冲突,冲突会导致haproxy服务启动失败
    server server1 192.168.56.102:15672
    server server3 192.168.56.108:15672
分别在server2 和 server3 上安装keepalived
sudo apt-get install keepalived
在server2上配置keepalived ,默认在server2上启用虚拟IP:192.168.56.110
vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret
    }
    virtual_ipaddress {
        192.168.56.110
    }
}
在server4上配置keepalived, 默认是备份机
vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass secret
    }
    virtual_ipaddress {
        192.168.56.110
    }
}
验证rabbitmq集群是否正常

访问 RabbitMQ管理界面 在server1上添加一个queue,看能否在server2上看到该queue
登录http://192.168.56.102:15672/ 添加一个queue queue:new
RabbitMQ集群搭建及使用(一)_第2张图片

在server1上发布一个消息到queue:new队列中
RabbitMQ集群搭建及使用(一)_第3张图片

登录http://192.168.56.108:15672/ 查看等否看到 queue:new
RabbitMQ集群搭建及使用(一)_第4张图片

在server3上看能否读取到该消息
RabbitMQ集群搭建及使用(一)_第5张图片

验证能否通过代理读取到数据

登录代理服务器地址 通过虚拟IP访问 http://192.168.56.110:8804
RabbitMQ集群搭建及使用(一)_第6张图片

测试VIP是否能够故障漂移

关闭server3上的keepalived服务,模拟 server3发生故障,看虚拟IP是否还能正常访问
在这里插入图片描述

再次访问 http://192.168.56.110:8804 仍能正常显示
RabbitMQ集群搭建及使用(一)_第7张图片

最后测试能否让程序通过虚拟IP访问rabbitmq集群

编写创建rabbitmq客户端连接服务的go代码示例
RabbitMQ集群搭建及使用(一)_第8张图片

你可能感兴趣的:(GO,服务器,消息队列)