安装基本环境
yum -y install wget vim bash-completion lrzsz nmap telnet tree net-tools bind-utils lsof ntpdate iotop
erlang环境
wget -O/etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
安装rabbitmq:
yum -y install erlang
yum -y install rabbitmq-server
检查安装结果:
rpm -qa | grep rabbitmq
启动和查看状态:
systemctl status rabbitmq-server #查看rabbitmq转态
systemctl start rabbitmq-server #启动rabbitmq
systemctl stop rabbitmq-server
rabbitmq很多情况下使用systemctl restart rabbitmq-server是没有效果的,必须要stop后在start
开启Web管理页面:
rabbitmq-plugins enable rabbitmq_management
开启MQTT协议:
rabbitmq-plugins enable rabbitmq_mqtt
AMQP协议端口默认:5672
Web页面默认端口:15672
MQTT协议默认端口:1883
默认登录用户名(admin权限):guest
默认登录密码:guest
如果想安装单节点到此就结束了,如果想安装集群的请继续往下走
首先讲解的是单机多节点部署rabbitmq集群:
首先按照上面的步骤安装个rabbitmq,在进行一下操作:
确定rabbitmq节点是关闭状态:
rabbitmqctl stop
方法一:
设置环境变量指定端口和节点名称:
RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit
后台启动节点:
rabbitmq-server -detached
重复上面的操作,但是端口和rabbitmq节点名不可一样:
RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit_01
rabbitmq-server -detached
RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit_02
rabbitmq-server -detached
方法二:
通过编写主配置文件进行启动:(rabbitmq默认是没有主配置文件的)
vim /etc/rabbitmq/rabbitmq-env.conf
NODE_PORT=5672
NODENAME=rabbit
NODE_PORT=5673
NODENAME=rabbit_01
NODE_PORT=5674
NODENAME=rabbit_03
systemctl start rabbitmq-server
不论前面是采用哪种方式,但加入集群的方式一样的:
先听掉节点上的应用:
#停掉rabbit_01节点应用
rabbitmqctl -n@localhost rabbit_01 stop_app
#将rabbit_01添加到rabbit节点中
rabbitmqctl -n@localhost rabbit_01 join_cluster rabbit@localhost
#停掉rabbit_02节点应用
rabbitmqctl -n@localhost rabbit_02 stop_app
#将rabbit_02添加到rabbit节点中
rabbitmqctl -n@localhost rabbit_02 join_cluster rabbit@localhost
查看节点信息:
#注:此处只显示了集群中只有两个信息,如果按照上面操作添加,会显示三个节点信息
Cluster status of node rabbit@localhost ...
[{nodes,[{disc,[rabbit@localhost,rabbit_01@localhost]}]},
{running_nodes,[rabbit@localhost]},
{cluster_name,<<"rabbit@localhost">>},
{partitions,[]},
{alarms,[{rabbit@localhost,[]}]}]
这里将介绍多节点部署:
*注:多节点不同与单节点的情况,在多机环境,如果要在cluster集群内部署多个节点,需要注意两个方面:
- 保证需要部署的这几个节点在同一个局域网内
- 需要有相同的Erlang Cookie,否则不能进行通信,为保证cookie的完全一致,采用从一个节点copy的方式
正题:
IP | 主机名 | rabbitmq节点名 |
---|---|---|
192.168.3.10 | node1 | rabbitmq1 |
192.168.3.100 | node3 | rabbitmq2 |
192.168.3.205 | node4 | rabbitmq3 |
都点尴尬,主机里面的hosts文件已经配好了,所以难得改了,就这么用把,但是你们看的时候要注意,我这里面没有node2
关闭防火墙,或者配置防火墙规则,否则后面加入集群会出现问题
-
配置node1主机hosts文件:(确保可以解析主机名)
vim /etc/hosts 192.168.3.10 node1 192.168.3.100 node3 192.168.3.205 node4
scp /etc/hosts root@192.168.3.100:/etc/hosts scp /etc/hosts root@192.168.3.205:/etc/hosts
-
安装rabbitmq(三台上面同样操作):
yum -y install wget vim bash-completion lrzsz nmap telnet tree net-tools bind-utils lsof ntpdate iotop wget -O/etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y install erlang rabbitmq-server
-
配置相同的Erlang Cookie:
确保三台的cookie一样,这样erlang就处在一个环境中
首先要启动rabbitmq,否则没有cookie,并且cookie是隐藏文件:
注:三个接单都需要先启动rabbitmq,然后在关闭 -
在node1节点上执行:
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq scp /var/lib/rabbitmq/.erlang.cookie root@node4:/var/lib/rabbitmq
-
重启服务看看是否报错:
*三个节点都重启看是否有报错* systemctl stop rabbitmq-server systemctl start rabbitmq-server
注:要是有报错肯定是.erlang.cookie问题,要么把.erlang.cookie删了重新生成,要就看看是否是忘记关闭服务把cookie配置了,一定要注意这些细节性的东西
- 将节点加入集群
#确保服务是启动的情况下进行 node3节点上操作 #将node3加入到node1节点集群中: rabbitmqctl stop_app #停掉节点服务 rabbitmqctl reset #重置节点配置 rabbitmqctl join_cluster rabbit@node1 # 将node3节点的rabbitmq加入到node1中 # rabbitmqctl join_cluster rabbit@是固定格式写法 rabbitmqctl start_app #启动节点
我们接着讲node4也加入node1集群:
7.查看集群的状态:
rabbitmqctl cluster_status
注:从中我们可以看出这些几点都是disc(磁盘节点),我们可以手动把集群节点模式调成内存节点的,当然三台磁盘节点是最安全的,但是比较浪费资源,正常我们调整为两台磁盘一台内存即可
下面将介绍下如何设置集群的节点模式:
ram:内存
disc:磁盘
默认节点加入集群都是disc节点,设置ram节点两种方式:
方法一:
加入集群时设置type:
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@node1
rabbitmqctl start_app
方法二:
加入集群后,修改disc节点为ram节点:
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
我使用了第二种方法将node4从磁盘节点改为内存节点:
我们总在命令行里面操作有时候很难受,所以我们开启Web点点点模式:(三台相同操作)
rabbitmq-plugins enable rabbitmq_management
systemctl stop rabbitmq-server
systemctl start rabbitmq-server
查看端口是否起来了,默认端口15672:
#三台相同操作
手动开启MQTT协议(1883端口),默认只开启AMQP协议(5672端口)
rabbitmq-plugins enable rabbitmq_mqtt
systemctl stop rabbitmq-server
systemctl start rabbitmq-server
查看端口状态:
集群创建用户
#只要在一个节点创建即可,都在一个集群中其他前节点都会有这个用户
rabbitmqctl add_user hcb hcb@pwd #创建用户设置密码
rabbitmqctl set_permissions hcb ".*" ".*" ".*" #给hcb赋权
rabbitmqctl set_user_tags hcb administrator #给hcb赋予admin
systemctl restart rabbitmq-server #重启服务
此时我们到web页面中就可以用这个用户密码登录了
http://192.168.3.10:15672
#用默认用户guest登录也行,默认也是admin权限
登录后我们能看到集群的所有信息:
在此web如何用我就不多说了都是点点点特别简单,如果有不会的可以联系我,现场远程教学
RabbitMQ负载均衡
选择开源的HAproxy为rabbitmq集群做负载
安装epel:
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
安装HA:
yum -y install haproxy
配置HA:
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
vim /etc/haproxy/haproxy.cfg
先说下haproxy的配置文件意思:
global #全局设置
log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过local0输出
#log loghost local0 info
maxconn 4096 #最大连接数
chroot /usr/local/haproxy
uid 99 #所属运行的用户uid
gid 99 #所属运行的用户组
daemon #以后台形式运行haproxy
nbproc 2 #启动2个haproxy实例
pidfile /usr/local/haproxy/haproxy.pid #将所有进程写入pid文件
#debug
#quiet
defaults #默认设置
#log global
log 127.0.0.1 local3 #日志文件的输出定向
mode http #所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
option httplog #日志类别,采用httplog
option dontlognull
option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option httpclose #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
retries 3 #3次连接失败就认为服务器不可用,主要通过后面的check检查
option redispatch #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
maxconn 2000 #最大连接数
stats uri /haproxy-admin #haproxy 监控页面的访问地址
contimeout 5000 #连接超时时间
clitimeout 50000 #客户端连接超时时间
srvtimeout 50000 #服务器端连接超时时间
stats auth Frank:Frank #设置监控页面的用户和密码:Frank
stats hide-version #隐藏统计页面的HAproxy版本信息
listen rabbitmq_local_cluster VIP:5670 //前段IP,供product和consumer来进行选择,由于5672端口已经默认使用,这里选择5670端口
mode tcp //负载均衡选项
balance roundrobin //轮询算法将负载发给后台服务器
server rabbit 192.168.3.10:5672 check inter 5000 rise 2 fall 3//负载均衡中的集群节点配置,这里选择的rabbit节点
server rabbit 192.168.3.100:5672 check inter 5000 rise 2 fall 3
server rabbit 192.168.3.205:5672 check inter 5000 rise 2 fall 3
listen private_monitoring :8100
mode http
option httplog
stats enable
stats uri /stats
stats refresh 60s
#实际配置如:
global
log 127.0.0.1 local0 info
maxconn 4096
stats socket /tmp/haproxy.socket uid haproxy mode 770 level admin
daemon
defaults
log global
mode tcp
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
timeout connect 5s
timeout client 120s
timeout server 120s
listen rabbitmq_local_cluster 0.0.0.0:5670
mode tcp
balance roundrobin
server cacheclod1 192.168.3.10:5672 check inter 5000 rise 2 fall 3
server cacheclod2 192.168.3.100:5672 check inter 5000 rise 2 fall 3
server cacheclod3 192.168.3.205:5672 check inter 5000 rise 2 fall 3
listen private_monitoring :8100
mode http
option httplog
stats enable
stats uri /stats
stats refresh 5s
启动HAproxy:
systemctl start haproxy
查看haproxy控制界面:
http://192.168.3.10:8100/stats