centos7 安装haproxy+rabbitmq高可用集群

一,准备工作:

        1,三台centos7虚拟机:

192.168.209.143  rabbitmq-node1+haproxy
192.168.209.147  rabbitmq-node2
192.168.209.148  rabbitmq-node3

        2,配置好yum源,建议使用阿里的源。如果你在内网,可以使用公司内部的cento7源和epel源。

二,rabbitmq集群示意图:

        

                        

三,rabbitmq必须要的组件:erlang。不同的rabbitmq需要不同的erlang版本,在官网可以查看:

RabbitMQ Erlang Version Requirements — RabbitMQ

 本次安装rabbitmq 3.9.14版本,erlang需要24.3.4.1

erlang下载地址:https://github.com/erlang/otp/releases/download/OTP-24.3.4.1/otp_src_24.3.4.1.tar.gz

rabbitmq下载地址:

https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.14/rabbitmq-server-generic-unix-3.9.14.tar.xz

 

下载速度非常慢,耐心等待。如果你有迅雷会员,速度倒是很快。下好之后,将两个包传到192.168.209.143的/data01目录下。

四,安装erlang

我们先来做基础环境,这里首先安装erlang所需要的基础组件。

yum -y install gcc gcc-c++ make openssl openssl-devel ncurses-devel
cd /data01
tar -xf otp_src_24.3.4.1.tar.gz
cd otp_src_24.3.4.1
./configure --prefix=/usr/local/erlang

 出现以上提示不要慌,都是warning的,没关系,继续:

make
make install
echo 'export PATH=$PATH:/usr/local/erlang/bin' >> /etc/profile
source /etc/profile

至此,erlang安装成功。

五,安装单节点rabbitmq。

1,解压并启动

 cd /data01/

tar -xf rabbitmq-server-generic-unix-3.9.14.tar.xz

cd rabbitmq_server-3.9.14/sbin/

./rabbitmq-server  -detached

  #不带-detached参数的命令是前台启动方式,退出shell后服务进程也跟着退出。带-detached参数的命令是后台启动方式,退出shell后服务进程保持运行在linux后台。

./rabbitmqctl status  #查看启动状态

2,增加admin用户

cd /data01/rabbitmq_server-3.9.14/sbin

#因为guest用户只能在本机访问(只能通过localhost登陆使用),添加一个admin用户,密码设置为:123456789
./rabbitmqctl add_user admin 123456789
#设置admin为超级管理员
./rabbitmqctl set_user_tags admin administrator
#为admin账号添加所有的权限
./rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
#RabbitMQ默认账户和密码为 guest/guest,我们修改guest用户密码
./rabbitmqctl change_password guest 123456789
#查看当前的用户列表
./rabbitmqctl list_users
 #如果想要删除一个用户
./rabbitmqctl delete_user yourUserName

3,开启 rabbitmq management控制台

cd /rabbitmq_server-3.9.7/sbin
./rabbitmq-plugins enable rabbitmq_management

./rabbitmq-plugins enable rabbitmq_shovel

./rabbitmq-plugins enable rabbitmq_shovel_management

 4,其他命令:

1)直接启动模式:如果你关闭窗口或者需要在该窗口使用其他命令时应用就会停止
./rabbitmq-server             //启动
./rabbitmq-server restart     //重启
./rabbitmq-server stop         //停止
./rabbitmq-server status     //查看状态

2)rabbitmq以应用方式后台启动
./rabbitmq-server -detached //rabbitmq分别启动节点和应用,不会生成pid_file文件
./rabbitmqctl status         //查看运行状态
./rabbitmqctl start_app     //应用启动,此命令典型的用途是在执行了其他管理操作之后,重新启动之前停止的 RabbitMQ 应用,比如reset
./rabbitmqctl stop_app         //将rabbitmq服务应用关闭,但是Erlang虚拟机还是处于运行状态
./rabbitmqctl stop             //同时关闭应用和节点

3)查看端口

#15672是HTTP API客户端、web管理界面使用,25672用于节点间通信,5672是AMQP使用的端口
netstat -lnp |grep beam

5,访问控制台
链接:http://192.168.209.143:15672/
用户:admin
密码:123456789

 以上,一个单节点的rabbitmq就装好了,但是我们要的并不是这么简单,下面我们需要安装一个三节点的rabbitmq集群,并使用haproxy代理页面端口和业务端口。

六,安装rabbitmq集群​

                

1,修改hosts

        1)三台分别改主机名

echo rabbitmq-node1 >>/etc/hostname
echo rabbitmq-node2 >>/etc/hostname
echo rabbitmq-node3 >>/etc/hostname

        2)三台分别写入hosts

echo '192.168.209.143 rabbitmq-node1' >> /etc/hosts
echo '192.168.209.147 rabbitmq-node2' >> /etc/hosts
echo '192.168.209.148 rabbitmq-node3' >> /etc/hosts

echo '192.168.209.143 rabbitmq-node1' >> /etc/hosts
echo '192.168.209.147 rabbitmq-node2' >> /etc/hosts
echo '192.168.209.148 rabbitmq-node3' >> /etc/hosts

        3)将192.168.209.143 的/root/.erlang.cookie 同步到其他两台的/root下,注意这个文件必须为400权限

chmod 400 /root/.erlang.cookie

scp -rp /root/.erlang.cookie 192.168.209.147:/root

scp -rp /root/.erlang.cookie 192.168.209.148:/root

 2,准备集群节点,同样的操作再三台147,148上再来一遍,然后写环境变量

echo 'export PATH=$PATH:/data01/rabbitmq-node1/sbin' >>/etc/profile
source /etc/profile

3,三台分别启动集群,下面的命令,建议一条一条的复制粘贴,否则执行可能会报错。这是rabbitmq一个bug,头疼。

pkill beam
/data01/rabbitmq-node1/sbin/rabbitmqctl stop
/data01/rabbitmq-node1/sbin/rabbitmq-server -detached
/data01/rabbitmq-node1/sbin/rabbitmqctl start_app
/data01/rabbitmq-node1/sbin/rabbitmqctl add_user admin 123456789
/data01/rabbitmq-node1/sbin/rabbitmqctl set_user_tags admin administrator
/data01/rabbitmq-node1/sbin/rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
/data01/rabbitmq-node1/sbin/rabbitmqctl delete_user guest
/data01/rabbitmq-node1/sbin/rabbitmq-plugins enable rabbitmq_shovel
/data01/rabbitmq-node1/sbin/rabbitmq-plugins enable rabbitmq_shovel_management
/data01/rabbitmq-node1/sbin/rabbitmq-plugins  enable rabbitmq_management
/data01/rabbitmq-node1/sbin/rabbitmqctl stop
/data01/rabbitmq-node1/sbin/rabbitmq-server -detached
/data01/rabbitmq-node1/sbin/rabbitmqctl start_app
netstat -ano |grep -w 5672
netstat -ano |grep -w 15672

4,将147,148加入到143集群中

/data01/rabbitmq-node1/sbin/rabbitmqctl stop_app
/data01/rabbitmq-node1/sbin/rabbitmqctl reset
/data01/rabbitmq-node1/sbin/rabbitmqctl join_cluster --ram rabbit@rabbitmq-node3
/data01/rabbitmq-node1/sbin/rabbitmqctl start_app
/data01/rabbitmq-node1/sbin/rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}' 
/data01/rabbitmq-node1/sbin/rabbitmqctl cluster_status

http://192.168.209.143:15672

 如果提示:你与此网站不是私密连接,实际上可能是你的登录用户没有创建成功。

 /data01/rabbitmq-node1/sbin/rabbitmqctl list_users

如果没有

请使用命令创建

/data01/rabbitmq-node1/sbin/rabbitmqctl add_user admin 123456789
/data01/rabbitmq-node1/sbin/rabbitmqctl set_user_tags admin administrator
/data01/rabbitmq-node1/sbin/rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
/data01/rabbitmq-node1/sbin/rabbitmqctl delete_user guest

以上,一个3节点的rabbitmq集群就搭建好了。接下来使用haproxy代理rabbitmq集群。

 七,安装haproxy,代理mq集群。根据设定,网页端口为33331,业务端口为33332。

须知,默认的网页端口是:15672

默认的业务端口是:5672

yum install haproxy -y
mkdir -p /usr/local/haproxy
vim /etc/haproxy/haproxy.cfg

将下面的文件复制进去

#全局配置
global
        #日志输出配置,所有日志都记录在本机,通过local0输出
        log 127.0.0.1 local0 info
        #最大连接数
        maxconn 4096
        #改变当前的工作目录
        chroot /usr/local/haproxy
        #以指定的UID运行haproxy进程
        uid 99
        #以指定的GID运行haproxy进程
        gid 99
        #以守护进程方式运行haproxy #debug #quiet
        daemon
        #debug
        #当前进程pid文件
        pidfile /usr/local/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:33332
        #配置TCP模式
        mode tcp
        #加权轮询
        balance roundrobin
        server rabbitmq_node1 192.168.209.143:5672 check inter 5000 rise 2 fall 3 weight 1
        server rabbitmq_node2 192.168.209.147:5672 check inter 5000 rise 2 fall 3 weight 1
        server rabbitmq_node3 192.168.209.148:5672 check inter 5000 rise 2 fall 3 weight 1
        
#haproxy监控页面地址
	listen monitor
	bind 0.0.0.0:33331
	server rabbitmq_node1 192.168.209.143:15672 check inter 2s rise 2 fall 3
	server rabbitmq_node2 192.168.209.147:15672 check inter 2s rise 2 fall 3
	server rabbitmq_node3 192.168.209.148:15672 check inter 2s rise 2 fall 3

启动:

haproxy -f /etc/haproxy/haproxy.cfg

使用http://192.168.209.143:33331 ​​​​​​

可以成功登录。至此,一个完整的rabbitmq集群就搭建好了。

rabbitmq集群没有想象中的那么好装,本次实验,建立在服务器能连上阿里源的基础上。如果你在内网,源里面的内容比较少,有些必须要的组件,就需要自己去官网找了一个一个下载,无限多的依赖包,还是很不好搞的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值