1、安装centos7.x,配置好网络
2、因为docker需要比较高版本的内核,比如使用overlayfs作为默认docker文件系统要3.18,所以先升级内核到3.18以上版本,能直接过4是最佳了
检查内核
uname -r
不够3.18。x的话 升级内核
导入key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

yum --enablerepo=elrepo-kernel install kernel-lt -y
生产环境应用lt的长支持版本

一般新内核在grub的list最高位所以直接
grub2-set-default 0
重启 一般就可以了
现在的版本以上操作完成后centos7的内核版本
应该是4.5+
3、yum -y install docker-io 安装docker
chkconfig docker on 配置开机docker作为服务自动启动
service docker start 手动开始docker服务
4、修改docker的默认存储驱动为OverlayFS 这是最新的官方推荐
# systemctl stop docker
# rm -rf /var/lib/docker //注意好像 images可能会被清空
编辑/etc/sysconfig/docker-storage
DOCKER_STORAGE_OPTIONS= -s overlay

有时候可能这时候还不能正常启动
编辑/etc/sysconfig/docker里的OPTIONS后面,将selinux哪项给去掉就行了

systemctl start docker
docker info 就可以看到改变了

编辑真系统的/etc/hosts 为 如:ip对应节点名称(编号的结构)比如像下面 注意自己节点的对外ip 不要出现在自己节点的hosts文件里
10.133.6.20 rabbit3 如果是20ip的节点 就不要写20这行 否则会出错
10.133.6.22 rabbit1 如果是22ip的节点 就不要写22这行 否则会出错

到这里基本的docker环境就安装完了 然后先做一个单节点rabbitmq实例的docker容器来对外服务:
docker run -d  --restart=always --name=rmq -p 5671:5671 -p 15671:15671 -p 5673:5672 -p 15673:15672 -p 25672:25672 -p 4369:4369 -v /etc/hosts:/etc/hosts -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123abc -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_NODENAME=rabbit1 -e RABBITMQ_ERLANG_COOKIE='NICAYNNZGMAHWQLRVQQU' --hostname rabbit1 rabbitmq:3.6.1-management
docker run -d  --restart=always --name=rmq -p 5671:5671 -p 15671:15671 -p 5673:5672 -p 15673:15672 -p 25672:25672 -p 4369:4369 -v /etc/hosts:/etc/hosts -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123abc -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_NODENAME=rabbit3 -e RABBITMQ_ERLANG_COOKIE='NICAYNNZGMAHWQLRVQQU' --hostname rabbit3 rabbitmq:3.6.1-management
经过漫长的下载等待之后 docker容器运行起来了
这样 通过http://ip:15673 用户名密码 默认admin权限的guest guest的一个支持http管理的rabbitmq的基本单实例就搭建完成了

登录比如http://ip:15673/#/users

新增一个更好记的特殊名称密码的用户名

输入好用户名密码

set成admin

按add user按钮 就新增好新的管理账号了 此时 用新账号登录

删除老的guest

再建立一个用于mq外部调用的用户名 比如test 密码 123abc

为test新建一个Virtual Hosts

比如 test_virtual_host

新建以后 点进test_virtual_host的名字里 为test设定能读写配置test_virtual_host的权限

剩下的Exchanges、Queues等的设置 可以在代码端完成不必rabbitmq配置里完成
如果使用docker默认的比如 上面命令里的my_vhost 检查一下他是否被你需要授权的用户可访问了
在web ui http://ip:端口/#/vhosts 里 点击相关vhost名称的 来给某个用户赋予权限

下一篇讲两个vm里的rabbitmq的集群,用镜像当做高可备方案。

编辑每个节点的Erlang Cookie 文件:/var/lib/rabbitmq/.erlang.cookie 编辑成一样的内容 如果在run的时候已经做了这步就可以过了


题外话:
在每个节点里准备环境
rabbitmq镜像内部都是debain的
如果需要改什么配置文件 默认没有安装编辑工具先安装
docker exec 容器id apt-get update
docker exec 容器id apt-get install -y vim

然后 在主节点以外的节点上执行以下内容
docker exec -it 容器id /bin/sh或者 /bin/bash
进入容器内部控制台
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit1@rabbit1 注:RABBITMQ_NODENAME@hostname 这两个设成一样的了 就肯定不会出问题了 设置就在上面的docker run命令里完成了
rabbitmqctl start_app

rabbitmqctl set_policy -p my_vhost HA '^(?!amq.).*' '{"ha-mode":"all", "ha-sync-mode":"automatic"}'
my_vhost是某个Virtual Hosts, "ha-sync-mode":"automatic" 有一些问题当失败节点或者新增节点重新加入集群的时候可能会阻塞整个集群的直到该节点同步完成 现实里是否会这样有待测试
如果不打算自动同步 可以是
rabbitmqctl set_policy -p my_vhost HA '^(?!amq.).*' '{"ha-mode":"all"}'

rabbitmqctl set_policy -p 【Virtual Hosts名字】 【同步规则的名字】 【同步队列名的正则匹配】 '{"ha-mode":"all"}【,和其他选项】'

最后用各种4层负载均衡方案来随机指向 各个节点的对外接口 就是docker内部的5672 接口所对外的 在本例子的命令行里都是5673

当一个节点崩溃 重启节点然后执行从
docker exec -it 容器id /bin/sh或者 /bin/bash

rabbitmqctl start_app
的部分就加会了集群了
镜像队列有主从之分,一个主节点(master),0个或多个从节点(slave)。当master宕掉后,会在slave中选举新的master。选举算法为最早启动的节点。
最好在加的时候 重新确认一下主节点
再加入以后 检查policy是否存在 如果不存在再在新加入节点上
执行rabbitmqctl set_policy那行 在"ha-sync-mode":"automatic"的情况下 应该就直接搞定了 但是注意 ha 自动同步模式下 新加入可能会造成节点在全局同步完成以前阻塞
现实里要注意

注:如果要加新节点 比较麻烦 要把每个节点的hosts文件都修改才行 除非你利用统一的内外dns

注意事项:不要手动stop主节点,可以kill掉主节点的docker 甚至vm 总之默认异常关闭主节点 主节点会重新选举 但是正常用stop命令关闭主节点  会造成整个集群出现问题

centos7 搭建docker内运行rabbitmq,然后再镜像ha方案的完全教程,暂时一个宿主机只能运行一个docker的rabbitmq,但是集群 ha都正常的更多相关文章

  1. 宿主机-免密登录Docker容器

    CentOS7 安装Docker 讨论QQ:1586558083 目录 一.检查系统内核 二.安装Docker 2.1 安装 2.2 查看docker版本 2.3 启动docker 三.建立docke ...

  2. Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)

    Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本) Hive 安装依赖 Hadoop 的集群,它是运行在 Hadoop 的基础上. 所以在安装 Hive 之 ...

  3. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

  4. 用Docker在一台笔记本电脑上搭建一个具有10个节点7种角色的Hadoop集群(上)-快速上手Docker

    如果想在一台电脑上搭建一个多节点的Hadoop集群,传统的方式是使用多个虚拟机.但这种方式占用的资源比较多,一台笔记本能同时运行的虚拟机的数量是很有限的.这个时候我们可以使用Docker.Docker ...

  5. Zookeeper + Hadoop2.6 集群HA + spark1.6完整搭建与所有参数解析

    废话就不多说了,直接开始啦~ 安装环境变量: 使用linx下的解压软件,解压找到里面的install 或者 ls 运行这个进行安装 yum install gcc yum install gcc-c+ ...

  6. docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面

    1.从容器里面拷文件到宿主机? 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径 示例: 假设容器名为testtomcat, ...

  7. 宿主机计划任务执行docker相关命令

    这个问题拖了好几个月百思不解,或许是由于基础不牢的缘故;百度等等搜索一大篇,还真有人遇到了相似问题 问题:宿主机写好计划任务,是mongodump命令来备份mongo数据库,结果在计划任务里是执行不了 ...

  8. 如何用Qt写一个同一时间只能运行一个实例的应用程序

    http://blog.sina.com.cn/s/blog_6343941a0100nk2x.html 可以达到的目的: 1.应用只启动一个实例,依赖于QtNetwork模块 2.启动时向另一个实例 ...

  9. 编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]

    编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本] 1. 开发环境 Jdk 1.7.0_72 Maven 3.2.1 Scala 2.10.6 Spark 1.6 ...

随机推荐

  1. HelloHibernate详解

    1. Configuration管理读取配置文件 //读取src下hibernate.properties,不推荐使用 Configuration cfg = new Configuration(); ...

  2. 四层LB和七层LB

    总结: 基于MAC地址玩的是二层(虚拟MAC地址接收请求,然后再分配到真实的MAC地址),      基于IP地址玩的是三层(虚拟IP地址接收请求,然后再分配到真实的IP地址),      基于IP地 ...

  3. Top 6 Programming Languages for Mobile App Development

    Mobile application development industry in the last five years have multiplied in leaps and bounds, ...

  4. ARM NEON 编程系列2 - 基本指令集

    ARM NEON 编程系列2 - 基本指令集 前言 本系列博文用于介绍ARM CPU下NEON指令优化. 博文github地址:github 相关代码github地址:github NEON指令集 主 ...

  5. php之form表单

    <!DOCTYPE HTML> <html> <head> <title>form</title> <style type=" ...

  6. openmp并行计算

    #include <omp.h>#include <stdio.h>#include <stdlib.h> void test(int n){ for (int i ...

  7. JAVA实例,求用户输入的整数是否是偶数

    题目:用户能输入一个整数,输入后返回是偶数还是奇数. 偶数规则:除以2能整除的数称之为偶数,否则是奇数 实例: switch版 import java.util.Scanner; public cla ...

  8. ssh-keygen+ssh-copy-id无密码登录远程LINUX主机(转载)

    From:http://blog.163.com/lgh_2002/blog/static/44017526201011333227161/ 1.创建公钥和私钥 ligh@local-host$ ss ...

  9. [AIR] Screen 的应用

    Screen 类提供此应用程序的可用显示屏幕的相关信息. 屏幕是位于可能更大的“虚拟桌面”内的独立桌面区域.虚拟桌面的原点是操作系统指定的主屏幕的左上角.因此,个别显示屏幕范围的坐标可能是负数.虚拟桌 ...

  10. [Flex] PopUpButton系列——CornerRadius的运用

    <?xml version="1.0" encoding="utf-8"?><!--设置主按钮圆角半径 PopUpButtonCornerRa ...