注:将需要安装的 erlang 和 rabbimq 包放在/usr/src 目录下。erlang 的下载需要注意.centos7 下载的是 el7 版本。生产者和消费者同时打开生产和消费都很快,如果只开生产者,每 5s 才生产一条消息,还没找到办法解决
安装
安装 erlang 依赖:rpm -ivh erlang-23.3.4.7-1.el7.x86_64.rpm
查看 erlang 版本:rpm -qa | grep erlang
安装 socat 插件:yum install socat -y (需联网)
安装 rabbitmq:rpm -ivh rabbitmq-server-3.10.0-1.el7.noarch.rpm
设置 rabbitmq 开机自启动(可不设):chkconfig rabbitmq-server on
启动 rabbitmq 服务:systemctl start rabbitmq-server 或 /sbin/service rabbitmq-server start
查看 rabbitmq 服务状态:systemctl status rabbitmq-server 或 /sbin/service rabbitmq-server status
停止 rabbitmq 服务:systemctl stop rabbitmq-server 或 /sbin/service rabbitmq-server stop
安装 web 管理插件,需要先停掉 rabbitmq 服务:rabbitmq-plugins enable rabbitmq_management
rabbitmq 默认 web 端口 15672
关闭防火墙:systemctl stop firewalld
开机关闭防火墙:systemctl disable firewalld
查看防火墙状态:systemctl status firewalld
创建用户
1.创建用户账号
创建一个名为 admin 的用户,密码也是 admin
rabbitmqctl add_user admin 'admin'
2.设置 admin 账号角色为 administrator
rabbitmqctl set_user_tags admin administrator
3.添加账号权限
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
4.修改密码
rabbitmqctl change_password admin '123456'
5.查看用户列表
rabbitmqctl list_users
6.删除用户
rabbitmqctl delete_user admin
7.查看权限列表
rabbitmqctl list_permissions
8.查看策略列表
rabbitmqctl list_policies
9.查看节点状态
rabbitmqctl status
10.查看集群状态
rabbitctl cluster_status
11.修改节点类型
rabbitmqctl stop_app #关闭应用
rabbitmqctl change_cluster_node_type ram #更改为内存模式,磁盘模式改为 disk 即可
rabbitmqctl start_app #重启应用
12.将第一个节点上的 cookie 文件复制到另外 2 台克隆的节点上,确保各节点用的同一个 cookie。在 node1 上执行下面 2 条命令,把 node1 节点上的 cookie 文件复制到 node2 和 node3 上。执行的时候会提示输入密码。
scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/.erlang.cookie
13.启动 rabbitmq 服务,顺带启动 Erlang 虚拟机和 rabbitmq 应用服务
rabbitmq-server -detached
14.在节点 2 执行(节点 3:改一下节点名称)
rabbitmqctl stop_app (rabbitmqctl stop_会将 Erlang 虚拟机关闭,rabbitmqctl stop_app 只会关闭 rabbitmq 服务)
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app (只启动应用服务)
查看集群状态:rabbitmqctl cluster_status
web 客户端:
15.配置镜像
将集群中的队列彼此之间进行镜像,此时消息就会被拷贝到处于同一个镜像分组中的所有队列上
参数解释:
name:policy 的名称,用户自定义。
pattern:queue 的匹配模式(正则表达式)。^表示所有队列都是镜像队列,^后面可以拼接队列名称的前缀,比如^aa_。
Definition:镜像定义,包括三个部分 ha-sync-mode、ha-mode、ha-params
ha-mode: 指明镜像队列的模式,有效取值范围为 all/exactly/nodes
all:表示在集群所有的代理上进行镜像
exactly :表示在指定个数的代理上进行镜像,代理名称通过 ha-params 指定
nodes:表示在指定的代理上进行镜像,代理名称通过 ha-params 指定
ha-params: ha-mode 模式需要用到的参数
ha-sync-mode:表示镜像队列中消息的同步方式,有效取值范围为:automatic,manually。
automatic:表示自动向 master 同步数据
manually:表示手动向 master 同步数据
Priority:可选参数,policy 的优先级。
安装 haproxy
1.下载依赖包:yum install gcc vim wget
3.解压:tar -zxvf haproxy-2.7.3.tar.gz -C /usr/local
4.进入目录,进行编辑、安装
cd /usr/local/haproxy-2.7.3
编辑:make TARGET=linux30 PREFIX=/usr/local/haproxy
安装:make install PREFIX=/usr/local/haproxy
创建文件夹:mkdir /etc/haproxy
5.赋权
--创建组
groupadd -r g 149 haproxy
--创建用户
useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy
6.创建配置文件
vim /etc/haproxy/haproxy.cfg
java
#全局配置
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
#客户端超时
timeout client 120s
#服务端超时
timeout server 120s
#绑定配置
listen rabbitmq_cluster
bind 192.168.101.108:5671
#配置TCP模式
mode tcp
#简单的轮询
balance roundrobin
#Rabbitmq集群节点配置
server node1 192.168.101.108:5672 check inter 5000 rise 2 fall 2
server node2 192.168.101.110:5672 check inter 5000 rise 2 fall 2
server node3 192.168.101.111:5672 check inter 5000 rise 2 fall 2
#haproxy监控页面地址
listen monitor
bind 192.168.101.108:8100
mode http
option httplog
stats enable
#项目名为rabbitmq_stats,ip+端口+项目名既可访问
stats uri /rabbitmq_stats
#自动刷新时间
stats refresh 5s
7.配置启动文件复制 haproxy 文件到/usr/sbin 下,复制 haproxy 脚本,到/etc/init.d 下
cp /usr/local/haproxy/sbin/haproxy /usr/sbin/
cp /usr/local/haproxy-2.7.3/examples/haproxy.init /etc/init.d/haproxy
chmod 755 /etc/init.d/haproxy
8.启动
service haproxy start|stop|restart|reload|condrestart|status|check
也可以是:查看 haproxy 服务的运行状态 : systemctl status haproxy (启动方式类似)
16.退出集群
卸载 rabbitmq
1.查询服务状态:systemctl status rabbitmq-server
2.停止服务:systemctl stop rabbitmq-server
3.删除 rabbitmq:yum remove rabbitmq-server
4.删除 rabbitmq 数据和配置文件:rm -rf /var/lib/rabbitmq/
rm -rf /etc/rabbitmq/
5.删除 rabbitmq 依赖项 erlang 和 Socat: sudo yum remove erlang 和 sudo yum remove socat
卸载 haproxy
1.查看 haproxy 状态:systemctl status haproxy
2.停止 haproxy:systemctl stop haproxy
3.卸载 haproxy:yum remove haproxy 等待系统 yum 自动卸载完成。
4.查看相关文件是否已经卸载干净:find / -name "haproxy"
5.如果还有残余可以使用命令:rm -rf "第二步查询到的文件"
注:报错处理
执行命令:rabbitmq-server -detached
报错:error :node with name "rabbit" already running on "node2"
终端输入命令:sudo rabbitmqctl status
然后输入:sudo rabbitmqctl stop
在输入:rabbitmq-server 或者 systemctl start rabbitmq-server (后者亲测)就可以启动了
报错信息
java
=WARNING REPORT==== 7-Sep-2018::13:48:17 ===
Error while waiting for Mnesia tables: {timeout_waiting_for_tables,
[rabbit_user,rabbit_user_permission,
rabbit_vhost,rabbit_durable_route,
rabbit_durable_exchange,
rabbit_runtime_parameters,
rabbit_durable_queue]}
解释如下:
java
Alternatively, perhaps your mnesia dir (/var/lib/rabbitmq/mnesia/rabbit)
got into a a weird state. Try clearing it.
即分布式数据库 mnesia 异常。
解决:
(1) 将/var/lib/rabbitmq/mnesia/下的数据库文件清空即可
(2) 重启节点
报错:通过网上了解,说这是之前加入集群失败造成的(虽然之前从没有加入过集群),可以忽略这些报错。待定