目前docker容器化越来越火,在项目部署中也非常的简单,今天我们就平时使用到的消息中间件rabbitmq以及consul注册中心使用docker进行部署
rabbitmq集群的搭建
一、下载镜像:
docker pull docker.***.com.cn/openstack-helm-official/rabbitmq:3.7-management
(隐去公司域名,此处即为镜像仓库地址)
二、创建文件 目录结构如下:
L--rabbitmq-ha-docker //主目录
L--scripts //本地(Docker宿主)使用的一些脚本
L--rmqha_set_policy.sh //(可无) 设置各个数据库账号和开启主从复制
L--volumes //各个容器的挂载数据卷
L--rmqha_proxy
L--haproxy.cfg //HAProxy配置
L--rmqha_slave
L--cluster_entrypoint.sh //(可无)入口文件
L--parameters.env //账号密码等环境参数
L--docker-compose.yml //编排配置
三、编辑docker-compose.yml内容:
version: "3"
services:
master:
image: docker.***.com.cn/openstack-helm-official/rabbitmq:3.7-management
container_name: rmqha_node0
restart: always
hostname: rmqha_node0
ports:
- "55672:15672"
- "56720:5672"
env_file:
- ./parameters.env
environment:
- CONTAINER_NAME=rmqha_node0
- RABBITMQ_HOSTNAME=rmqha_node0
- RABBITMQ_NODENAME=rabbit
slave1:
image: docker.***.com.cn/openstack-helm-official/rabbitmq:3.7-management
container_name: rmqha_node1
restart: always
depends_on:
- master
hostname: rmqha_node1
ports:
- "55673:15672"
- "56721:5672"
command: "rabbitmq-server"
env_file:
- ./parameters.env
environment:
- CONTAINER_NAME=rmqha_node1
- RABBITMQ_HOSTNAME=rmqha_node1
- RABBITMQ_NODENAME=rabbit
- RMQHA_RAM_NODE=true
slave2:
image: docker.***.com.cn/openstack-helm-official/rabbitmq:3.7-management
container_name: rmqha_node2
restart: always
depends_on:
- master
hostname: rmqha_node2
ports:
- "55674:15672"
- "56722:5672"
command: "rabbitmq-server"
env_file:
- ./parameters.env
environment:
- CONTAINER_NAME=rmqha_node2
- RABBITMQ_HOSTNAME=rmqha_node2
- RABBITMQ_NODENAME=rabbit
- RMQHA_RAM_NODE=true
haproxy:
image: haproxy:latest
container_name: rmqha_proxy
restart: always
depends_on:
- master
- slave1
- slave2
hostname: rmqha_proxy
ports:
- "56729:5672"
- "51080:1080"
volumes:
- "./volumes/rmqha_proxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro"
- "./volumes/rmqha_proxy:/root/rmqha_proxy"
environment:
- CONTAINER_NAME=rmqha_proxy
四、设置环境参数,编辑文件parameters.env
RMQHA_MASTER_NODE=rabbit
RMQHA_MASTER_HOST=rmqha_node0
RABBITMQ_DEFAULT_USER=guest
RABBITMQ_DEFAULT_PASS=guest
RABBITMQ_NODENAME=rabbit
RABBITMQ_ERLANG_COOKIE=myerlangcookie //各MQ用相同的cookie
五、HAProxy配置,编辑haproxy.cfg
global
log 127.0.0.1 local0
maxconn 4096
defaults
log global
mode tcp
option tcplog
retries 3
option redispatch
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 2000
listen stats
bind *:1080
mode http
stats enable
stats hide-version
stats realm Haproxy\ Statistics
stats uri /
stats auth admin:admin
listen rabbitmq
bind *:5672
mode tcp
balance roundrobin
timeout client 1h
timeout server 1h
option clitcpka
server rmqha_node0 rmqha_node0:5672 check inter 5s rise 2 fall 3
server rmqha_node1 rmqha_node1:5672 check inter 5s rise 2 fall 3
server rmqha_node2 rmqha_node2:5672 check inter 5s rise 2 fall 3
六、在主目录下执行docker-compose up -d构建并运行整个Docker服务
七、构建rabbitmq集群
分别进入rmqha_node1 和rmqha_node2容器(docker exec -it 容器id /bin/bash),执行以下:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rmqha_node0
rabbitmqctl start_app
八、开启镜像队列模式
$ docker exec -it rmqha_node0 rabbitmqctl set_policy ha-all '^' '{"ha-mode":"all"}'
consul集群的搭建
一、下载镜像
docker pull docker.***.com.cn/testdev/consul:1.4.0
二、创建consul集群
第一种方式:
$ docker run -d -p 8500:8500 -v /data/consul-h:/consul/data -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_1 docker.***.com.cn/testdev/consul:1.4.0 agent -server -bootstrap -ui -node=node1 -client='0.0.0.0'
$ docker exec consul_server_1 consul members
1 172.17.0.3:8301 alive server 1.0.1 2 dc1 <all>
加入到集群, 命名为 -node=2 、-node=3。
上面通过命令获取到引导 Consul 的 Ip 地址 172.17.0.3 ,
// -node=2
$ docker run -d -p -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_2 docker.***.com.cn/testdev/consul:1.4.0 agent -server -node=node2 -join='172.17.0.8'
// -node=3
$ docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_3 docker.***.com.cn/testdev/consul:1.4.0 agent -server -ui -node=node3 -join='172.17.0.8'
$ docker exec consul_server_1 consul operator raft list-peers//查看leader情况
第二种方式:
编辑docker-compose.yml
version: "3.0"
services:
# consul server,对外暴露的ui接口为8500,只有在2台consul服务器的情况下集群才起作用
consul_server:
image: docker.***.com.cn/testdev/consul:1.4.0
hostname: consulserver
container_name: consulserver
restart: always
ports:
- "8500:8500"
command: -server -ui-dir /ui -data-dir /tmp/consul --bootstrap-expect=2
consul_server1:
image: docker.***.com.cn/testdev/consul:1.4.0
hostname: consulserver1
container_name: consulserver1
depends_on:
- "consul_server"
command: -server -data-dir /tmp/consul -join consul_server
consul_server2:
image: docker.***.com.cn/testdev/consul:1.4.0
hostname: consulserver2
container_name: consulserver2
depends_on:
- "consul_server"
command: -server -data-dir /tmp/consul -join consul_server
三、编辑haproxy.cfg
#----------------
# Global settings
#----------------
global
log 127.0.0.1 local2
maxconn 4000
daemon
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 500
#-------------
#Stats monitor
#-------------
frontend stats_monitor
bind *:30001
stats enable
stats uri /stats
stats auth admin:admin
stats admin if TRUE
stats refresh 5s
stats realm baison-test-Haproxy
# stats hide-version
#--------------------
#Application frontend
#--------------------
frontend GEOGLOBE
bind *:8500
#ACL#
acl map_acl path_reg -i /map/
#USE_BACKEND#
use_backend map_backend if map_acl
#map_begin#
backend map_backend
balance roundrobin
mode http
server consul_server_1 172.17.0.9:8301 check weight 1
server consul_server_1 172.17.0.8:8301 check weight 1
server consul_server_1 172.17.0.10:8301 check weight 1
#map_end#
//新改
listen stats
bind *:30001
mode http
stats enable
stats hide-version
stats realm Haproxy\ Statistics
stats uri /
stats auth admin:admin
listen consul
bind *:8500
mode tcp
balance roundrobin
timeout client 10s
timeout server 10s
option clitcpka
server consul_server_1 consul_server_1:8500 check inter 5s rise 2 fall 3
server consul_server_2 consul_server_1:8500 check inter 5s rise 2 fall 3
server consul_server_3 consul_server_1:8500 check inter 5s rise 2 fall 3
四、启动HAproxy
docker run -d -p 32791:8500 -p 32790:30001 -p 56788:5672 --name haproxyH -v /data/haproxy:/usr/local/etc/haproxy:ro haproxy:latest
netstat -antp | grep consul