RabbitMQ集群及HAProxy代理搭建

RabbitMQ集群即HAProxy代理搭建

1.RabbitMQ安装

不同版本或类型的linux系统对应的安装不太一样,参考官网:

https://www.rabbitmq.com/install-rpm.html

2.RabbitMQ单节点相关命令

后台启动

rabbitmq-server -detached

添加用户

rabbitmqctl add_user admin 123456

设置角色

rabbitmqctl set_user_tags admin administrator

授权

rabbitmqctl set_permissions -p / admin ‘.’ '.’ ‘.*’

启动 app

rabbitmqctl start_app

启动管理页面

rabbitmq-plugins enable rabbitmq_management

开放防火墙 5672、15672 端口

firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload

浏览器访问 http://ip:15672,输入用户名密码即可登录

参考:https://blog.youkuaiyun.com/winy_lm/article/details/81070494

3.集群搭建

本次搭建使用三台服务器,设置 1 个磁盘节点,2 个内存节点

192.168.0.1

192.168.0.2

192.168.0.3

3.1 hostname
  • 修改节点的 hostname,修改后要重启 rabbitmq
hostnamectl set-hostname rabbitmq01
hostnamectl set-hostname rabbitmq02
hostnamectl set-hostname rabbitmq03
3.2 .erlang.cookie

由于 rabbitmq 集群基于 erlang 同步,所以要配置各个节点中 .erlang.cookie 文件内容一致:

# /val/lib/rabbitmq/.erlang.cookie
find / -name .erlang.cookie
# scp 远程拷贝
scp /var/lib/rabbitmq/.erlang.cookie root@rabbitmq02:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@rabbitmq03:/var/lib/rabbitmq/
# 设置拷贝后修改所有者及读写权限,否则会出现错误:Error when reading /var/lib/rabbitmq/.erlang.cookie: eacces
chown rabbitmq:rabbitmq .erlang.cookie 
chmod 0400 .erlang.cookie

启动所有节点:rabbitmq-server -detached

3.3 join_cluster

添加节点,这里设置 1 个磁盘节点,2 个内存节点

# 在节点 rabbitmq02 上执行以下命令,@ 前面的 rabbit 是默认值,不能写成其它的
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
# 在节点 rabbitmq03 上执行以下命令,--ram 表示内存节点,缺省或 --disc 为磁盘节点
rabbitmqctl join_cluster --ram rabbit@rabbitmq01

如果想把其中某个磁盘节点修改为内存节点,可以使用如下方式:

# 方式一:在 RabbitMQ 3.9.4 on Erlang 23.3.4.5 版本上时失败:Error: mnesia_not_running
rabbitmqctl stop_app
rabbitmqctl change_cluster_noe_type ram
rabbitmqctl start_app

# 方式二:参考:https://blog.youkuaiyun.com/LSY_优快云_/article/details/103864940
# 关闭要更换类型的节点上的服务
rabbitmqctl stop
# 在其它节点上执行移除节点操作
rabbitmqctl forget_cluster_node rabbit@rabbitmq01
# 再次启动要更换的节点
rabbitmq-server -detached
# 停止 application 服务
rabbitmqctl stop_app
# 再次将节点添加到集群中,选择要更换的节点类型
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
3.4 user/tags/permissions

添加用户、配置权限等

rabbitmqctl add_user admin 123456

rabbitmqctl set_user_tags admin administrator

rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'

rabbitmq-plugins enable rabbitmq_management

登录 http://ip:15672 查看管理页面,如果出现某个节点显示 ‘Node statistics not available’ 信息,则直接在该节点上执行 “rabbitmq-plugins enable rabbitmq_management” 即可。即管理插件需要在集群中的所有节点上开启。

4.HAProxy 代理

4.1 haproxy.cfg

HAProxy 代理服务安装在另外一台服务器
安装

yum install haproxy -y

修改配置文件:见 /etc/haproxy/haproxy.cfg。保留默认的 global、defaults,删除 frontend、backend,添加 listen。

# 监听RabbitMQ管理页面
listen rabbitmq_admin
    bind 0.0.0.0:8004
    server rabbitmq01 192.168.0.1:15672
    server rabbitmq02 192.168.0.2:15672
    server rabbitmq03 192.168.0.3:15672

# 监听HAProxy的管理页面
listen private_monitoring              
    bind 0.0.0.0:1080               # 监听端口
    mode http
    option httplog
    stats enable
    stats refresh 30s               # 统计页面自动刷新时间
    stats uri /haproxy?stats        # 统计页面url
    stats realm Haproxy Manager     # 统计页面密码框上提示文本
    stats auth admin:passw0rd       # 统计页面用户名和密码设置
    # states hide-version           # 隐藏统计页面上HAProxy的版本信息

# HAProxy监听RabbitMQ集群
listen rabbitmq_cluster
    bind 0.0.0.0:5672
    mode tcp                # 配置TCP模式
    timeout client 3h
    timeout server 3h
    timeout connect 3h
    option tcplog
    balance roundrobin      # 简单轮询
	
	# check inter 5000 是检测心跳,rise 2 是2次正确认为服务器可用,fall 3 是3次失败认为服务器不可用
    server rabbitmq01 192.168.0.1:5672 check inter 5000 rise 2 fall 2     
    server rabbitmq02 192.168.0.2:5672 check inter 5000 rise 2 fall 2     
    server rabbitmq03 192.168.0.3:5672 check inter 5000 rise 2 fall 2     

# HAProxy 监听 ssl RabbitMQ集群
listen rabbitmq_ssl_cluster
    bind 0.0.0.0:5671
    mode tcp
    timeout client 3h
    timeout server 3h
    timeout connect 3h
    option tcplog
    balance roundrobin
    server rabbitmq01 192.168.0.1:5671 check inter 5000 rise 2 fall 2 
    server rabbitmq02 192.168.0.2:5671 check inter 5000 rise 2 fall 2
    server rabbitmq03 192.168.0.3:5671 check inter 5000 rise 2 fall 2
4.2 log
  • 开启日志
# 创建记录日志的文件
mkdir /var/log/haproxy		// 创建日志目录
chmod a+w /var/log/haproxy	// 修改权限

# 开启 rsyslog 记录 haproxy 日志功能
# 编辑文件"/etc/rsyslog.conf",打开如下配置项:
    # Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 514
# 添加如下内容:
local2.* 	 	/var/log/haproxy/haproxy.log

# 编辑"/etc/haproxy/haproxy.conf" 文件,在"global"段中添加如下内容:
log 127.0.0.1 local2 info

# 重启服务:
service haproxy restart
service rsyslog restart
# 查看日志:
tailf /var/log/haproxy/haproxy.log
4.3 SELinux 问题
  • SELinux 问题:

Aug 22 12:54:00 park python: SELinux is preventing /usr/sbin/haproxy from name_bind access on the tcp_socket port 1080.#012#012***** Plugin bind_por ts (85.9 confidence) suggests *******************#012#012If you want to allow /usr/sbin/haproxy to bind to network port 1080#012Then you need to modify the port type.#012Do#012# semanage port -a -t PORT_TYPE -p tcp 1080#012 where PORT_TYPE is one of the following: commplex_main_port_t, h ttp_cache_port_t, http_port_t.#012#012** Plugin catchall_boolean (7.33 confidence) suggests *************#012#012If you want to allow nis to enabled#012Then you must tell SELinux about this by enabling the ‘nis_enabled’ boolean.#012#012Do#012setsebool -P nis_enabled 1#012#012** Plug in catchall_boolean (7.33 confidence) suggests *************#012#012If you want to allow haproxy to connect any#012Then you must tell SELinux about this by enabling the ‘haproxy_connect_any’ boolean.#012#012Do#012setsebool -P haproxy_connect_any 1#012#012** Plugin catchall (1.35 confide nce) suggests **************************#012#012If you believe that haproxy should be allowed name_bind access on the port 1080 tcp_socket by defau lt.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by ex ecuting:#012# ausearch -c ‘haproxy’ --raw | audit2allow -M my-haproxy#012# semodule -i my-haproxy.pp#012

  • 如下处理:

    ausearch -c ‘haproxy’ --raw | audit2allow -M my-haproxy

    semodule -i my-haproxy.pp

4.4 ssl
  • 添加 rabbtimq.config 配置文件到 /etc/rabbitmq/ 目录下
  • 填写内容:
%% Disable SSLv3.0 and TLSv1.0 support.
[
    {ssl, [{versions, ['tlsv1.2', 'tlsv1.1']}]},
    {rabbit, [
        {tcp_listeners, [5672]},
        {ssl_listeners, [5671]},
        {ssl_options, [{cacertfile,"/etc/rabbitmq/rootCA.pem"},
            {certfile,"/etc/rabbitmq/server-cert.pem"},
            {keyfile,"/etc/rabbitmq/server-key.pem"},
            {verify, verify_peer},
            {fail_if_no_peer_cert, true},
            {versions, ['tlsv1.2', 'tlsv1.1']}
        ]}
    ]}
].
  • 将根证书、Server 证书拷贝到 /etc/rabbitmq 目录下,重启服务:
rabbitmqctl stop
rabbitmq-server -detached
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值