mq安装脚本
需要有java环境
需先以下两个文件跟下面的脚本在一个目录下执行
文件在下面的链接里
链接: https://pan.baidu.com/s/1QkuTsnlbmTyYM2etOH-NcA 提取码: sids
#!/bin/bash
# By YDF at 2020-12-23
echo -e "1.首先安装依赖socat,安装Erlang时需要这个"
yum install -y socat
echo -e "2.安装Erlang"
rpm -ivh erlang-23.1.3-1.el6.x86_64.rpm
echo -e "3.安装RabbitMQ"
rpm -ivh rabbitmq-server-3.8.9-1.el6.noarch.rpm
echo -e "4.启动RabbitMQ"
systemctl start rabbitmq-server
echo -e "5.设置RabbitMQ开机自启动"
systemctl enable rabbitmq-server
echo -e "6.RabbitMQ其他操作-查看启动后的情况"
rabbitmqctl status
echo -e "7.启用网页版后台管理插件"
rabbitmq-plugins enable rabbitmq_management
echo -e "8.新建一个用户名为admin,密码为123456的管理员,并授予管理员(administrator)权限"
rabbitmqctl add_user admin 123456
rabbitmqctl set_user_tags admin administrator
echo -e "9.设置admin可以使用的虚机权限"
rabbitmqctl add_vhost admin
rabbitmqctl set_permissions -p admin admin ".*" ".*" ".*"
echo -e "10.打开端口"
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=56721/tcp --permanent
firewall-cmd --reload
echo -e "11.授权"
rabbitmqctl list_users
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
若要修改rabbitmq相关的默认端口信息可修改此文件,然后重启mq
若修改mq的相关端口,则需要开发端口,开发端口命名(为开发5672端口示例):
若不修改端口则开发mq默认端口即可
firewall-cmd --zone=public --add-port=5672/tcp --permanent &&
firewall-cmd --reload &&
firewall-cmd --list-ports
开始搭建集群
-
编辑每台RabbitMQ的cookie文件,以确保各个节点的cookie文件使用的是同一个值,可以scp其中一台机器上的cookie至其他各个节点,cookie的默认路径为/var/lib/rabbitmq/.erlang.cookie或者$HOME/.erlang.cookie,节点之间通过cookie确定相互是否可通信。
-
修改hostname(vi /etc/hostname)
前面的名字(node1)与下面配置hosts文件的名字对应,为rabbitmq节点的名称
重启机器使hostname生效
reboot
- 配置各节点的hosts文件( vim /etc/hosts)
xxx.xxx.xxx.xxx node1
xxx.xxx.xxx.xxx node2
xxx.xxx.xxx.xxx node3
- 逐个节点启动RabbitMQ服务(先杀死mq进程再启动),启动命令为:
service rabbitmq-server start
- 查看各个节点和集群的工作运行状态
rabbitmqctl status, rabbitmqctl cluster_status
- 以node1为主节点,在node2上执行
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app
在其余的节点上的操作步骤与node2虚拟机上的一样
- 在RabbitMQ集群中的节点只有两种类型:内存节点/磁盘节点,单节点系统只运行磁盘类型的节点。而在集群中,可以选择配置部分节点为内存节点。
内存节点将所有的队列,交换器,绑定关系,用户,权限,和vhost的元数据信息保存在内存中。而磁盘节点将这些信息保存在磁盘中,但是内存节点的性能更高,为了保证集群的高可用性,必须保证集群中有两个以上的磁盘节点,来保证当有一个磁盘节点崩溃了,集群还能对外提供访问服务。在上面的操作中,可以通过如下的方式,设置新加入的节点为内存节点还是磁盘节点:
#加入时候设置节点为内存节点(默认加入的为磁盘节点)
[root@node3 ~]# rabbitmqctl join_cluster rabbit@node1 --ram
#也通过下面方式修改的节点的类型
[root@node3 ~]# rabbitmqctl changeclusternode_type disc | ram
- 最后可以通过“rabbitmqctl
cluster_status”的方式来查看集群的状态,上面搭建的4个节点的RabbitMQ集群状态(2个节点为磁盘即诶但,2个节点为内存节点)如下:
[root@node3 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node3 ...
Basics
Cluster name: rabbit@VM-11-34-centos
Disk Nodes
rabbit@node1
rabbit@node4
RAM Nodes
rabbit@node2
rabbit@node3
Running Nodes
rabbit@node1
rabbit@node2
rabbit@node3
rabbit@node4
Versions
rabbit@node1: RabbitMQ 3.8.9 on Erlang 23.1.3
rabbit@node2: RabbitMQ 3.8.9 on Erlang 23.1.3
rabbit@node3: RabbitMQ 3.8.9 on Erlang 23.1.3
rabbit@node4: RabbitMQ 3.8.9 on Erlang 23.1.3
Maintenance status
Node: rabbit@node1, status: not under maintenance
Node: rabbit@node2, status: not under maintenance
Node: rabbit@node3, status: not under maintenance
Node: rabbit@node4, status: not under maintenance
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@node1, interface: [::], port: 56721, protocol: http, purpose: HTTP API
Node: rabbit@node1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@node1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@node2, interface: [::], port: 56721, protocol: http, purpose: HTTP API
Node: rabbit@node2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@node2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@node3, interface: [::], port: 56721, protocol: http, purpose: HTTP API
Node: rabbit@node3, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@node3, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@node4, interface: [::], port: 56721, protocol: http, purpose: HTTP API
Node: rabbit@node4, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@node4, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Feature flags
Flag: drop_unroutable_metric, state: enabled
Flag: empty_basic_get_metric, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: virtual_host_metadata, state: enabled
[root@node3 ~]#
上面rabbitmq集群已搭建完成,接下来配置mq的负载均衡HAProxy
配置HAProxy
- 另外找一台机器安装
yum -y install haproxy
- 修改haproxy的配置文件
[root@localhost haproxy]# cat haproxy.cfg
#全局配置
global
#日志输出配置,所有日志都记录在本机,通过local0输出
log 127.0.0.1 local0 info
#最大连接数
maxconn 4096
#改变当前的工作目录
chroot /apps/svr/haproxy
#以指定的UID运行haproxy进程
uid 99
#以指定的GID运行haproxy进程
gid 99
#以守护进程方式运行haproxy #debug #quiet
daemon
#debug
#当前进程pid文件
pidfile /apps/svr/haproxy/haproxy.pid
#默认配置
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
maxconn 2000
#连接超时
timeout connect 5s
#客户端超时
timeout client 120s
#服务端超时
timeout server 120s
#绑定配置
listen rabbitmq_cluster
bind 0.0.0.0:56720
#配置TCP模式
mode tcp
#加权轮询
balance roundrobin
#RabbitMQ集群节点配置,其中ip1~ip7为RabbitMQ集群节点ip地址
server node2 10.10.10.10:56721 check inter 5000 rise 3 fall 3 weight 1
server node3 10.10.10.19:56721 check inter 5000 rise 3 fall 3 weight 1
#绑定配置 rabbitmq服务提供
listen rabbitmq_cluster_server
bind 0.0.0.0:5672
#配置TCP模式
mode tcp
#加权轮询
balance roundrobin
#RabbitMQ集群节点配置,其中ip1~ip7为RabbitMQ集群节点ip地址
server node2 10.10.10.10:5672 check inter 5000 rise 3 fall 3 weight 1
server node3 10.10.10.19:5672 check inter 5000 rise 3 fall 3 weight 1
#haproxy监控页面地址
listen monitor
bind 0.0.0.0:8100
mode http
option httplog
stats uri /haproxy
stats realm Global\ statistics
stats auth admin:admin
[root@localhost haproxy]#
在上面的配置中“listen rabbitmq_cluster bind 0.0.0.0:56720”这里定义了客户端连接IP地址和端口号。这里配置的负载均衡算法是roundrobin—加权轮询。与配置RabbitMQ集群负载均衡最为相关的是“ server node1 10.10.10.10:56721 check inter 5000 rise 3 fall 3 weight 1”这种,它标识并且定义了后端RabbitMQ的服务。主要含义如下:
(a)“server ”部分:定义HAProxy内RabbitMQ服务的标识;
(b)“10.10.10.10:56721”部分:标识了后端RabbitMQ的服务地址;
©“check inter ”部分:表示每隔多少毫秒检查RabbitMQ服务是否可用;
(d)“rise ”部分:表示RabbitMQ服务在发生故障之后,需要多少次健康检查才能被再次确认可用;
(e)“fall ”部分:表示需要经历多少次失败的健康检查之后,HAProxy才会停止使用此RabbitMQ服务。
#启用HAProxy服务
[root@mq-testvm12 conf]# haproxy -f haproxy.cfg
启动后,即可看到如下的HAproxy的界面图(账号密码再配置文件中配置的 admin:admin):
这样服务就可通过负载访问mq的集群服务了,访问mq集群服务的时候haproxy负载到的mq的内存节点