centos7中安装RabbitMQ及相关操作

文章目录

一、安装erlang环境

1、安装epel源

rpm -Uvh https://download.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

2、安装erlang

yum install erlang

3、测试是否安装成功:

erl -version

二、安装RabbitMQ

1、安装socat

在安装rabbitmq时提示依赖socat,所以先安装socat

yum install socat

2、导入RabbitMQ源

rpm -Uvh https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.8/rabbitmq-server-3.6.8-1.el7.noarch.rpm

3、安装RabbitMQ公共库秘钥

rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc

4、安装RabbitMQ

yum install rabbitmq-server-3.6.8-1.el7.noarch.rpm

5、rabbitmq.config 配置文件路径

# find / -name "rabbitmq.config.example"
/usr/share/doc/rabbitmq-server-3.6.8/rabbitmq.config.example
# cp /usr/share/doc/rabbitmq-server-3.6.8/rabbitmq.config.example /etc/rabbitmq/
# cd /etc/rabbitmq/
# mv rabbitmq.config.example rabbitmq.config

6、RabbitMQ服务

以systemctl服务的方式启动、关闭

启动:systemctl start rabbitmq-server
查看状态: systemctl status rabbitmq-server
关闭: systemctl stop rabbitmq-server

以rabbitmq-server启动、关闭

启动: rabbitmq-server
后台启动: rabbitmq-server -detached
查看状态: rabbitmqctl status
关闭: rabbitmqctl stop

7、开启管理功能

rabbitmq-plugins enable rabbitmq_management

8、访问地址查看是否安装成功:

http://192.168.80.10:15672/

9、登录报错

输入账号密码并登录:guest guest

默认的账号guest登陆管理控制台,却提示登陆失败。
由于账号guest具有所有的操作权限,并且又是默认账号,出于安全因素的考虑,guest用户只能通过localhost登陆使用,并建议修改guest用户的密码以及新建其他账号管理使用rabbitmq.

9.1、新增用户

rabbitmqctl  add_user  admin admin 

9.2、将其赋予超级管理员

rabbitmqctl set_user_tags admin administrator

三、搭建RabbitMQ集群

1、依次在各个节点上安装erlang环境和RabbitMQ(先按照上边的步骤)

这是以cache01为master节点,cache02和cache03为slave节点。

2、修改主机名及hosts文件

修改主机名,三台服务器都需要修改,依次修改为cache01,cache02,cache03
vi /etc/hostname

修改hosts文件,添加以下:
vi /etc/hosts
192.168.80.10 cache01
192.168.80.20 cache02
192.168.80.30 cache03

reboot //修改之后重启虚拟机生效

3、停止MQ服务

rabbimqctl stop

4、分发.erlang.cookie文件

rabbitmq是基于Erlang的,而Erlang是天然支持分布式的,通过.erlang.cookie解决分布式问题,因此首先要保证各rabbitmq节点的.erlang.cookie的文件内容一致。

4.1、查找单机的.erlang.cookie文件所在目录

find / -name ".erlang.cookie"
/var/lib/rabbitmq/.erlang.cookie

4.2、先备份原有cookie文件(各节点执行)

cp /var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie.bak

4.3、复制master节点的文件到其它slave节点

scp /var/lib/rabbitmq/.erlang.cookie cache02:$PWD
scp /var/lib/rabbitmq/.erlang.cookie cache03:$PWD

5、启动集群:

5.1、使用-detached独立运行各个节点

rabbitmq-server -detached

5.2、slave 加入集群,对cache02和cache03分别执行下面操作

rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@cache01
rabbitmqctl start_app
5.2.1、如果需要移除集群节点

执行下面命令:
假设把rabbit@cache02退出集群,在rabbit@cache02上执行:

rabbitmqctl stop_app

在集群主节点上执行:

rabbitmqctl forget_cluster_node rabbit@cache02
5.2.1、移除后,如果需要再加入集群

单节点:
rabbitmqctl join_cluster rabbit@cache01
rabbitmqctl start_app

5.3、查看集群状态(任意一个节点操作)

rabbitmqctl cluster_status

5.4、设置镜像队列策略(任意一个节点操作)

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

5.5、查看策略:rabbitmqctl list_policies -p /

四、使用haproxy实现负载均衡

三台虚拟机安装rabbitmq :
192.168.80.10 cache01、
192.168.80.20 cache02、
192.168.80.30 cache03
第四台虚拟机安装haproxy:
192.168.80.40 cache04

1、安装HAproxy

yum install haproxy

2、新增配置信息

vi /etc/haproxy/haproxy.cfg

结尾添加:

###haproxy 监控页面地址是:http://192.168.68.131:9188/haproxy_status
listen admin_stats
    bind *:9188
    mode http
    log 127.0.0.1 local3 err
    stats refresh 60s
    stats uri /haproxy_status
    stats realm welcome login\ Haproxy
    stats auth admin:123456
    stats hide-version
    stats admin if TRUE
    
###rabbitmq 集群配置,转发到
listen rabbitmq_cluster
    bind *:5672
    mode tcp
    balance roundrobin
    server rabbitnode1 192.168.80.10:5672 check inter 2000 rise 2 fall 3 weight 1
    server rabbitnode2 192.168.80.20:5672 check inter 2000 rise 2 fall 3 weight 1
    server rabbitnode3 192.168.80.30:5672 check inter 2000 rise 2 fall 3 weight 1

3、启动HAproxy负载

3.1、启动HAproxy负载

systemctl start haproxy

3.2、启动报错,cannot bind socket [0.0.0.0:9188]

执行命令:

setsebool -P haproxy_connect_any=1

然后再启动,查看状态 systemctl status haproxy

4、页面访问地址: http://192.168.80.40:9188/haproxy_status

五、TLS通信

1、使用tls-gen生成证书

若没有安装git,先按照以下步骤安装

yum -y install git

安装完验证:

git version

1.1、下载生成证件项目

cd /export/servers/
git clone https://github.com/michaelklishin/tls-gen tls-gen

1.2、生成证件文件

cd tls-gen/basic
# private key password
make PASSWORD=123456
make verify
make info
ls -l ./result
1.2.1、执行make,报错:/bin/sh: python3: command not found
1.2.1.1、安装python3-Python源代码编译安装
  1. 安装工具 yum-utils
    它的功能是管理repository及扩展包的工具 (主要是针对repository)
yum install yum-utils
  1. 使用yum-builddep为Python3构建环境
    安装缺失的软件依赖,使用下面的命令会自动处理.
yum-builddep python
  1. 下载Python3的源码包

Python源码包目录: https://www.python.org/ftp/python/

切换到你安装软件目录,我本地: cd /export/servers/

curl -O https://www.python.org/ftp/python/3.5.0/Python-3.8.0.tgz
  1. 解压安装
 tar xf Python-3.8.0.tgz 
 cd Python-3.8.0
 make
 make install
 python3 -V

2、拷贝证件文件到服务端指定目录

配置RabbitMQ SSL只会用到以下3个文件:

ca_certificate.pem
server_certificate.pem
server_key.pem

将这三个文件拷贝到RabbitMQ的/usr/local/rabbitmq/ssl/目录中。

mkdir /etc/rabbitmq/ssl
cp result/ca_certificate.pem /etc/rabbitmq/ssl
cp result/server_certificate.pem /etc/rabbitmq/ssl 
cp result/server_key.pem /etc/rabbitmq/ssl

3、配置RabbitMQ开启SSL

vi /etc/rabbitmq/rabbitmq.config

[
{rabbit, [
   {ssl_listeners, [5671]},
   {ssl_options, [{cacertfile,"/etc/rabbitmq/ssl/ca_certificate.pem"},
                  {certfile,"/etc/rabbitmq/ssl/server_certificate.pem"},
                  {keyfile,"/etc/rabbitmq/ssl/server_key.pem"},
                  {verify, verify_peer},
                  {fail_if_no_peer_cert, true}]}
 ]}
].

4、重启RabbitMQ

rabbitmqctl stop
systemctl start rabbitmq-server

5、查看是否开启

netstat -aon|grep 5671 查看端口是否启用
或者
打开web页面,http://192.168.80.10:15672/#/

Ports and contexts中Listening ports,查看amqp/ssl 5671是否显示

6、客户端操作

6.1、拷出配置文件

将result下的server_certificate.pem、client_key.p12拷贝到客户端,我放在了/Users/xxx/mydata/rabbitmq-ssl

6.2、证书导入

利用java的keytool将证书导入,生成rabbitstore文件。

keytool -import -alias rabbit-server -file /Users/xxx/mydata/rabbitmq-ssl/server_certificate.pem -keystore /Users/xxx/mydata/rabbitmq-ssl/rabbitstore

6.3、springboot配置参数:

6.3.1、rabbitmq单机
spring:
  application:
    name: message-provider
  #配置rabbitMq 服务器
  rabbitmq:
#  单机
    host: 192.168.80.10
    port: 5671
    username: admin
    password: admin
    virtual-host: demo_VH
    publisher-confirms: true
    ssl:
      enabled: true
      key-store: file:/Users/xxx/mydata/rabbitmq-ssl/client_key.p12
      key-store-password: 123456
      trust-store: file:/Users/xxx/mydata/rabbitmq-ssl/rabbitstore
      trust-store-password: 123456
      verifyHostname: false
6.3.2、rabbitmq集群+haproxy+tls
更改haproxy.cfg

vi /etc/haproxy/haproxy.cfg
更改rabbitmq集群配置,将监听的节点端口由5672更改为5671

springboot配置文件
spring:
  application:
    name: message-provider
  #配置rabbitMq 服务器
  rabbitmq:
#  RabbitMQ集群配合haproxy
    host: 192.168.80.40
    port: 5672
    username: admin
    password: admin
    virtual-host: demo_VH
    publisher-confirms: true
    ssl:
      enabled: true
      key-store: file:/Users/xxx/mydata/rabbitmq-ssl/client_key.p12
      key-store-password: 123456
      trust-store: file:/Users/xxx/mydata/rabbitmq-ssl/rabbitstore
      trust-store-password: 123456
      verifyHostname: false

6.4、java测试ssl连接:

package com.nadou.rabbitmq;

import java.io.*;
import java.security.*;
import javax.net.ssl.*;

import com.rabbitmq.client.*;

/**
 *@ClassName ValidatingCert
 *@Description TODO
 *@Author xxx
 *@Date 2020/1/19 3:31 PM
 *@Version 1.0
 **/
public class ValidatingCert {
  // RabbitMQ服务端地址、端口、用户名、密码
  private static final String ADDRESS = "192.168.80.40";
  private static final int PORT = 5672;
  private static final String USERNAME = "admin";
  private static final String PASSWORD = "admin";
  private static final String VIRTUALHOST = "demo_VH";
  private static final String QUEUE_NAME = "rabbitmq-java-test";
  // 使用tls-gen工具生成证书文件时设置的私钥密码
  private static final String CLIENT_KEYSTORE_PASSWORD = "123456";
  // 客户端证书文件client_key.p12路径
  private static final String CLIENT_KEYSTORE_PATH = "/Users/xxx/mydata/rabbitmq-ssl/client_key.p12";

  // 使用keytool生成证书文件时填写的密码
  private static final String SERVER_KEYSTORE_PASSWORD = "123456";

  // 使用keytool生成的服务端证书文件路径
  private static final String SERVER_KEYSTORE_PATH = "/Users/xxx/mydata/rabbitmq-ssl/rabbitstore";

  public static void main(String[] args)  throws Exception{
    {
      char[] keyPassphrase = CLIENT_KEYSTORE_PASSWORD.toCharArray();
      KeyStore ks = KeyStore.getInstance("PKCS12");
      ks.load(new FileInputStream(CLIENT_KEYSTORE_PATH), keyPassphrase);

      KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
      kmf.init(ks, keyPassphrase);

      char[] trustPassphrase = SERVER_KEYSTORE_PASSWORD.toCharArray();
      KeyStore tks = KeyStore.getInstance("JKS");
      tks.load(new FileInputStream(SERVER_KEYSTORE_PATH), trustPassphrase);

      TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
      tmf.init(tks);

      SSLContext c = SSLContext.getInstance("TLSv1.2");
      c.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

      ConnectionFactory factory = new ConnectionFactory();
      factory.setHost(ADDRESS);
      factory.setPort(PORT);
      factory.setUsername(USERNAME);
      factory.setPassword(PASSWORD);
      factory.setVirtualHost(VIRTUALHOST);
      factory.useSslProtocol(c);
//      factory.enableHostnameVerification();

      Connection conn = factory.newConnection();
      Channel channel = conn.createChannel();

      channel.queueDeclare(QUEUE_NAME, false, true, true, null);
      channel.basicPublish("", QUEUE_NAME, null, "Hello, World".getBytes());

      GetResponse chResponse = channel.basicGet(QUEUE_NAME, false);
      if (chResponse == null) {
        System.out.println("No message retrieved");
      } else {
        byte[] body = chResponse.getBody();
        System.out.println("Received: " + new String(body));
      }

      channel.close();
      conn.close();
    }
    }

}

六、集群常用命令

1、查看集群状态(任意一个节点操作)

rabbitmqctl cluster_status

2、关闭/启动应用程序


rabbitmqctl start_app
rabbitmqctl stop_app

3、关闭/启动MQ服务

rabbitmqctl stop
rabbitmq-server -detached 
或者 
systemctl start rabbitmq-server

4、rabbitmq日志存储位置

/var/log/rabbitmq

5、编辑用户

5.1、新增用户

rabbitmqctl  add_user  Username  Password

5.2、删除用户

rabbitmqctl  delete_user  Username

5.3、修改用户的密码

rabbitmqctl  change_password  Username  Newpassword

5.4、查看当前用户列表

rabbitmqctl  list_users
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值