centos7 搭建docker内运行rabbitmq,然后再镜像ha方案的完全教程,暂时一个宿主机只能运行一个docker的rabbitmq,但是集群 ha都正常
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都正常的更多相关文章
- 宿主机-免密登录Docker容器
CentOS7 安装Docker 讨论QQ:1586558083 目录 一.检查系统内核 二.安装Docker 2.1 安装 2.2 查看docker版本 2.3 启动docker 三.建立docke ...
- Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)
Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本) Hive 安装依赖 Hadoop 的集群,它是运行在 Hadoop 的基础上. 所以在安装 Hive 之 ...
- hadoop 集群HA高可用搭建以及问题解决方案
hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...
- 用Docker在一台笔记本电脑上搭建一个具有10个节点7种角色的Hadoop集群(上)-快速上手Docker
如果想在一台电脑上搭建一个多节点的Hadoop集群,传统的方式是使用多个虚拟机.但这种方式占用的资源比较多,一台笔记本能同时运行的虚拟机的数量是很有限的.这个时候我们可以使用Docker.Docker ...
- Zookeeper + Hadoop2.6 集群HA + spark1.6完整搭建与所有参数解析
废话就不多说了,直接开始啦~ 安装环境变量: 使用linx下的解压软件,解压找到里面的install 或者 ls 运行这个进行安装 yum install gcc yum install gcc-c+ ...
- docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面
1.从容器里面拷文件到宿主机? 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 示例: 假设容器名为testtomcat, ...
- 宿主机计划任务执行docker相关命令
这个问题拖了好几个月百思不解,或许是由于基础不牢的缘故;百度等等搜索一大篇,还真有人遇到了相似问题 问题:宿主机写好计划任务,是mongodump命令来备份mongo数据库,结果在计划任务里是执行不了 ...
- 如何用Qt写一个同一时间只能运行一个实例的应用程序
http://blog.sina.com.cn/s/blog_6343941a0100nk2x.html 可以达到的目的: 1.应用只启动一个实例,依赖于QtNetwork模块 2.启动时向另一个实例 ...
- 编写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 ...
随机推荐
- RMAN_Oracle RMAN的常用Configure配置
2014-12-09 Created By BaoXinjian
- BIP_开发案例08_BI Publisher图表示例 饼状图/直方图/折线图(案例)
2014-12-25 Created By BaoXinjian
- CentOS配置网卡,重启网络显示:Device does not seem to be present(转载)
From:http://www.cnblogs.com/fbwfbi/archive/2013/04/29/3050907.html 一.故障现象: [root@c1node01 ~]# servic ...
- java虚拟机参数设置
-Xms8000M 初始化的堆大小 -Xmx8000M 堆的最大值 -XX:+HeapDumpOnOutOfMemoryError 堆溢出时Dump出当前内存堆转储快照以便事后分析 -XX:P ...
- windows service的继承类ServiceBase
https://msdn.microsoft.com/zh-cn/library/system.serviceprocess.servicebase.exitcode(v=vs.80).aspx 在停 ...
- Mybatis where 1=1 和 <where>标签
<select id="selSampleListByIDX4" resultMap="BaseResultMap" parameterType=&quo ...
- Zabbix监控和分布式部署实施方案
最近在研究Zabbix监控,由于机房分布在多个城市,因此采用zabbix proxy做为监控方案,在每 个节点部署zabbix proxy,由zabbix proxy收集agentd数据,然后将采集到 ...
- VB EOF
源地址: http://zhidao.baidu.com/link?url=zs49D5HzAgoyd3siE44oLbJlVLsWGpf1zqqvXVWZg_ZGXbFY7BgKFDpCqJdANO ...
- 20145305 《Java程序设计》第8周学习总结
教材学习内容总结 1.NIO使用频道来衔接数据节点,可以设定缓冲区容量,在缓冲区中对感兴趣的数据区块进行标记,提供clear().rewind().flip().compact()等高级操作 2.想要 ...
- gomobile 真机 log 打出的日志跟踪
go mobile 开发的应用,真机调试时,我们期望看到log包打出的日志, 这时候就需要借用 Android Device Monitor 了. 我们的 go 代码中用最简单的 log.Printl ...