一、环境准备
- 我这里准备了三台centos7 虚拟机
主机名 | 主机地址 | 软件 |
---|---|---|
node-01 | 192.168.157.133 | rabbitmq、erlang、haproxy、keepalived |
node-02 | 192.168.157.134 | rabbitmq、erlang、haproxy、keepalived |
node-03 | 192.168.157.135 | rabbitmq、erlang |
- 关闭三台机器的防火墙
bash
# 关闭防火墙
service firewalld stop
# 关闭防火墙开机自启
systemctl disable firewalld
- 三台主机的host和hostname配置
bash
#配置hostname,重启生效
hostnamectl set-hostname <hostname>
# 加入三台主机的ip和hostname
vi /etc/hosts
192.168.157.133 node-01
192.168.157.134 node-02
192.168.157.135 node-03
-
erlang与rabbitmq版本选择RabbitMQ Erlang Version Requirements --- RabbitMQhttps://www.rabbitmq.com/which-erlang.html二、安装erlang环境
-
下载erlang,选择与rabbitmq版本匹配的版本,这里我选择的是25.0.4版本Downloads - Erlang/OTPThe official home of the Erlang Programming Languagehttps://www.erlang.org/downloads
-
下载相关erlang编译依赖包
bash
yum install --y ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-devel
yum install --y openssl-devel zlib-devel
yum install --y make ncurses-devel gcc gcc-c++ unixODBC unixODBC-devel openssl openssl-devel
- 解压安装erlang
bash
#创建erlang目录
mkdir /usr/local/erlang
#解压
tar -zxvf otp_src_25.0.4.tar.gz
#进入otp_src_25.0.4目录
./configure --prefix=/opt/erlang --without-javac
make && make install
-
configure的时候一般会遇到一些依赖不存在的情况,只需要用yum安装一下,重新运行configure命令即可。
-
提示找不到wx-config: command not found
bash
#更新epel第三方软件库
yum install -y epel-release
#再次执行,就可以安装了
yum install --y wxWidgets-devel
yum install wxBase #for /usr/bin/wx-config-3.0
cd /usr/bin
#创建软连接
ln -s wx-config-3.0 wx-config
- 配置环境变量并验证
bash
#修改/etc/profile
#加入如下配置,并保存
export ERLANG_HOME=/usr/local/erlang
export PATH=$ERLANG_HOME/bin:$PATH
#重新加载配置
source /etc/profile
#验证,输入erl命令,出现erlang命令行就是安装成功
三、安装rabbitmq镜像集群
-
github下载rabbitmq,我选择的 rabbitmq-server-generic-unix-3.11.21.tar.xzhttps://github.com/rabbitmq/rabbitmq-server/releaseshttps://github.com/rabbitmq/rabbitmq-server/releases
-
解压安装
bash
#解压到/usr/local目录
tar -xvf rabbitmq-server-generic-unix-3.11.21.tar.xz -C /usr/local
#配置rabbitmq环境变量
export ERLANG_HOME=/usr/local/erlang
export RABBITMQ_HOME=/usr/local/rabbitmq_server-3.11.21
export PATH=$ERLANG_HOME/bin:$RABBITMQ_HOME/sbin:$PATH
#重新加载/etc/profile
source /etc/profile
#开启rabbitmq管理界面
rabbitmq-plugins enable rabbitmq_management
#后台启动rabbitmq
rabbitmq-server -detached
- 访问对应的host:15672进入rabbitmq管理页面,默认用户密码 guest/guest
- 创建rabbitmq用户
bash
#创建admin用户,密码admin
rabbitmqctl add_user admin admin
#设置用户角色
#超级管理员 administrator
#监控者 monitoring
#策略制定者 policymaker
#普通管理者 management
rabbitmqctl set_user_tags admin administrator
#设置权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
#查看所有用户
rabbitmqctl list_users
- 拷贝.erlang.cookie到其他主机
如果启动rabbitmq的是root用户那么这个文件就在/root/用户下的隐藏文件,可以用ls -al查看到
bash
#使用scp命令将node-01上的.erlang.cookie复制到其他主机上
scp /root/.erlang.cookie node-02:/root/.erlang.cookie
scp /root/.erlang.cookie node-03:/root/.erlang.cookie
- 将node-02和node-03加入到node-01集群
在node-02和node-03上执行
bash
#以后台模式启动
rabbitmq-server -detached
#停掉rabbitmq服务,不会关闭erlang服务环境
rabbitmqctl stop_app
#用来清空数据,如果主节点有数据也需要清空
rabbitmqctl reset
#加入node-01集群
rabbitmqctl join_cluster rabbit@node-01
#启动rabbitmq
rabbitmqctl start_app
- 查看集群状态
登录任意节点后台可以看到集群状态
- 添加集群同步策略
ha-mode: all,在集群中所有的节点上进行镜像
ha-sync-mode: automatic,在集群节点宕机重新连接后自动同步
方式一:命令添加
bash
# 添加策略
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
# 查看策略
rabbitmqctl list_policies
方式二:管理后台界面上添加
- 验证镜像模式
在node-01上创建一个队列ha-queue,可以看到node里面有三个节点,进去查看可以看到使用的策略为ha-all,并且node-02和node-03为镜像节点。
四、安装haproxy
node-01 和 node-02上操作
bash
#yum 安装haproxy
yum install -y haproxy
#修改haproxy.cnf配置,配置文件在/etc/haproxy目录下
vi haproxy.cnf
#增加如下配置
#页面配置
listen status
# 绑定9188端口
bind 0.0.0.0:9188
mode http
stats enable
stats refresh 30s
stats uri /stats
# 登录用户admin 密码admin
stats auth admin:admin
stats realm (Haproxy\ statistic)
stats admin if TRUE
#配置rabbitmq管理端
listen rabbitmq_admin
# 绑定15673端口
bind 0.0.0.0:15673
server node-01 192.168.157.133:15672
server node-02 192.168.157.134:15672
server node-03 192.168.157.135:15672
#配置rabbitmq集群
listen rabbitmq_cluster
# 绑定5673端口
bind 0.0.0.0:5673
mode tcp
option tcplog
maxconn 10000
# 负载模式为轮训
balance roundrobin
server node-03 192.168.157.135:5672 check inter 1000 rise 2 fall 2 backup
server node-02 192.168.157.134:5672 check inter 1000 rise 2 fall 2 backup
server node-01 192.168.157.133:5672 check inter 1000 rise 2 fall 2
启动haproxy
bash
haproxy -f /etc/haproxy/haproxy.cnf
访问haproxy监控管理页面
通过haproxy配置的端口访问rabbitmq管理页面
五、安装keepalived
bash
#yum安装keepalived
yum install -y keepalived
#修改keepalived.cnf配置,在/etc/keepalived/keepalived.cnf
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#检测脚本
vrrp_script check_haproxy {
# 检测HAProxy脚本
script "/etc/keepalived/script/check_haproxy.sh"
# 每隔两秒检测
interval 2
# 权重
weight 2
}
vrrp_instance haproxy {
#MASTER为主 BACKUP为备
state MASTER
#填自己网卡的名字
interface eno16777736
mcast_src_ip 192.168.157.133
virtual_router_id 51
priority 100
advert_int 1
#认证方式,主备配置一致就行
authentication {
auth_type PASS
auth_pass 1111
}
#脚本
track_script {
check_haproxy
}
#虚拟IP地址
virtual_ipaddress {
192.168.157.11
}
}
启动keepalived
bash
service keepalived restart
验证通过虚拟IP访问haproxy负载的rabbitmq管理端地址
至此安装全部完成。