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