docker搭建rabbitmq集群

11.2.1 搭建步骤
  • 修改3台机器名称

    • nano /etc/hostname
      
  • 配置各个节点的hosts文件,让各个节点都能互相识别对方

    • nano /etc/hosts
      192.168.17.130 hx-lps-test-redis01
      192.168.17.131 hx-lps-test-redis02
      192.168.17.132 hx-lps-test-redis03
      
  • 以确保各个节点的cookie文件使用的是同一个值

    • # 在main节点上执行远程操作命令
      scp /var/lib/rabbitmq/.erlang.cookie root@hx-lps-test-redis02:/var/lib/rabbitmq/.erlang.cookie
      scp /var/lib/rabbitmq/.erlang.cookie root@hx-lps-test-redis03:/var/lib/rabbitmq/.erlang.cookie
      
  • 启动RabbitMQ服务,顺带启动Erlang虚拟机和RabbitMQ应用服务(在三台节点上分别执行以下命令)

    • rabbitmq-server -detached
      
  • 在节点2执行

    • rabbitmqctl stop_app
      # rabbitmqctl stop会将Erlang虚拟机关闭,rabbitmqctl stop_app只关闭RabbitMQ服务
      rabbitmqctl reset
      rabbitmqctl join_cluster rabbit@hx-lps-test-redis01
      # 只启动应用服务
      rabbitmqctl start_app
      
  • 在节点3执行

    • rabbitmqctl stop_app
      rabbitmqctl reset
      rabbitmqctl join_cluster rabbit@hx-lps-test-redis02
      rabbitmqctl start_app
      
  • 集群状态

    • rabbitmqctl cluster_status
      
  • 需要重新设置用户

    • # 创建用户
      rabbitmqctl add_user admin admin
      # 设置用户角色
      rabbitmqctl set_user_tags admin administrator
      # 设置用户权限,用户admin具有/vhost1这个virtual host中所有资源的配置、写、读权限
      rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
      # 当前用户和角色
      rabbitmqctl list_users
      
  • 解除集群节点(slave1和slave2机器分别执行)

    • rabbitmqctl stop_app
      rabbitmqctl reset
      rabbitmqctl start_app
      rabbitmqctl cluster_status
      # main节点上执行
      rabbitmqctl forget_cluster_node rabbit@hx-lps-test-redis02
      
11.3 镜像队列

如果RabbitMQ集群中只有一个Broker节点,那么该节点的失效将导致整体服务的临时性不可用,并且也可能导致消息的丢失。可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true,但是这样仍然无法避免由于缓存导致的问题:因为消息在发送之后和被写入磁盘并执行刷盘动作之间存在一个短暂却会产生问题的时间窗。通过publisherconfirm机制能够确保客户端知道哪些消息已经存入磁盘,尽管如此,一般不希望遇到因单点故障导致的服务不可用。

引入镜像队列(Mirror Queue)的机制,可以将队列镜像到集群中的其他Broker节点之上,如果集群中的一个节点失效了,队列能自动切换到镜像中的另一个节点上以确保服务的可用性。

在这里插入图片描述

11.4 高可用负载均衡-haproxy

http://www.ha97.com/5646.html

HAProxy 官方下载地址为:www.haproxy.org/#down ,如果这个网站无法访问,也可以从 src.fedoraproject.org/repo/pkgs/h… 上进行下载。这里我下载的是 2.x 的版本,下载后进行解压:

wget https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-2.4.8.tar.gz/sha512/8e1d28191a8c26d46989359a213444f30a09e439d32b5ab6cb01a3ca267788fc7677dd14deaa43a7f6c7741cbf6c8fcf6cdd5cf927d23e48f82b9e7723d8a6f9/haproxy-2.4.8.tar.gz
# 解压
tar -zxvf haproxy-2.4.8.tar.gz haproxy2.4.8
# 进入解压后根目录,执行下面的编译命令:
make TARGET=linux-glibc  PREFIX=/usr/local/haproxy2.4.8
make install PREFIX=/usr/local/haproxy2.4.8

make编译可能因环境出错:/bin/sh: cc: 未找到命令

yum install gcc-c++ -y
# 如果yum出错,重新配置yum源
cd /etc/yum.repos.d/ 
# 删除所有文件:
rm -f /etc/yum.repos.d/*  
# 重新下载阿里的 
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  
# 清理缓存 yum clean all 
  • 配置环境变量
nano /etc/profile

export HAPROXY_HOME=/usr/local/haproxy2.4.8
export PATH=$PATH:$HAPROXY_HOME/sbin
# 使得配置的环境变量立即生效:
source /etc/profile
# 检查安装是否成功:
haproxy -v
# 负载均衡配置
# 创建目录
mkdir /etc/haproxy
# 编辑文件内容
nano /etc/haproxy/haproxy.cfg
  • 文件内容如下:
# 全局配置
global
    # 日志输出配置、所有日志都记录在本机,通过 local0 进行输出
    log 127.0.0.1 local0 info
    # 最大连接数
    maxconn 4096
    # 改变当前的工作目录
    chroot /usr/local/haproxy2.4.8
    # 以指定的 UID 运行 haproxy 进程
    uid 99
    # 以指定的 GID 运行 haproxy 进程
    gid 99
    # 以守护进行的方式运行
    daemon
    # 当前进程的 pid 文件存放位置
    pidfile /usr/local/haproxy2.4.8/haproxy.pid

# 默认配置
defaults
    # 应用全局的日志配置
    log global
    # 使用4层代理模式,7层代理模式则为"http"
    mode tcp
    # 日志类别
    option tcplog
    # 不记录健康检查的日志信息
    option dontlognull
    # 3次失败则认为服务不可用
    retries 3
    # 每个进程可用的最大连接数
    maxconn 2000
    # 连接超时
    timeout connect 5s
    # 客户端超时
    timeout client 120s
    # 服务端超时
    timeout server 120s

# 绑定配置
listen rabbitmq_cluster
    bind :5671
    # 配置AMQP模式
    mode tcp
    # 采用加权轮询的机制进行负载均衡
    balance roundrobin
    # RabbitMQ 集群节点配置
    server hx-lps-test-redis01  192.168.17.130:15672 check inter 5000 rise 2 fall 3 weight 1
    server hx-lps-test-redis02  192.168.17.131:15672 check inter 5000 rise 2 fall 3 weight 1
    server hx-lps-test-redis03  192.168.17.132:15672 check inter 5000 rise 2 fall 3 weight 1
    

# amqp绑定配置
listen rabbitmq_cluster2
    bind :5673
    # 配置TCP模式
    mode amqp
    # 采用加权轮询的机制进行负载均衡
    balance roundrobin
    # RabbitMQ 集群节点配置
    server hx-lps-test-redis01  192.168.17.130:5672 check inter 5000 rise 2 fall 3 weight 1
    server hx-lps-test-redis02  192.168.17.131:5672 check inter 5000 rise 2 fall 3 weight 1
    server hx-lps-test-redis03  192.168.17.132:5672 check inter 5000 rise 2 fall 3 weight 1

# 配置监控页面
listen monitor
    bind :8100
    mode http
    option httplog
    stats enable
    stats uri /stats
    stats refresh 5s

  • 启动服务
# 启动
haproxy -f /etc/haproxy/haproxy.cfg
# 查看运行
ps aux|grep haproxy
# 停止 没有killall命令, 安装yum -y install psmisc
killall haproxy
# 开启监控页面访问端口
firewall-cmd --zone=public --add-port=8100/tcp --permanent
systemctl restart firewalld.service
  • http://192.168.17.130:8100/stats
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值