跨机器的集群则需要docker版本高于1.12 集成了docker swarm。
首先主机器进入docker swarm模式:docker swarm init
然后创建overlay网络:docker network create -d overlay --attachable mynet
从节点加入swarm集群(主节init swarm时候的指令)
接下来我们需要在一台机器上启动一个mdw主节点,另一台机器上启动一个seg从节点
docker run -tid --name mdw--hostname mdw --network mynet --ip 10.0.0.8 -p 5432:5432 -p 28080:28080 gp
docker run -tid --name seg --hostname seg --network mynet --ip 10.0.0.9 gp
然后只需要在mdw容器里初始化GP
./start.sh
#!/bin/sh
gpssh-exkeys -f ./all_segs
gpinitsystem -c gpconfigs/gpinitsystem_config -h ./all_segs -a
echo "host all all 172.18.0.1/24 md5">>/gpmaster/gpseg-1/pg_hba.conf #ip 地址为当前容器的网关地址
echo "host all all 10.0.75.1/24 md5">>/gpmaster/gpseg-1/pg_hba.conf #ip是访问的主机的ip网关地址,
#sed -i '/local all gpadmin ident/d' /gpmaster/gpseg-1/pg_hba.conf
sed -i '/local replication gpadmin ident/d' /gpmaster/gpseg-1/pg_hba.conf
echo "host gpperfmon gpmon ::1/128 md5">>/gpmaster/gpseg-1/pg_hba.conf
echo "gp_enable_gpperfmon=on">>/gpmaster/gpseg-1/postgresql.conf
echo "gpperfmon_port=8888">>/gpmaster/gpseg-1/postgresql.conf
echo "gp_external_enable_exec=on">>/gpmaster/gpseg-1/postgresql.conf
echo "gpperfmon_log_alert_level=warning">>/gpmaster/gpseg-1/postgresql.conf
gpperfmon_install --enable --password gpmon --port 5432
psql -f 1.sql #修改gpadmin密码
gpstop -ar
nohup ./ex.sh > ex.log 2>&1 & #初始化gpcc监控时的人机交互
wait
echo "Done"
gpcmdr --start gpcc #启动gpcc监控
###这个文件是用来启动GP和gpcc监控的
基本概念
swarm集群包含以下两种节点:
- Manager Node —— 负责调度Task
- Worker Node —— 接受Manager Node调度并指派的Task
每个node的availability包括:
- Active:接受task
- Pause:不接受task,已有task仍运转
- Drain:不接受task,已有task被交接
集群构建
# 创建集群的Manager node
docker swarm init --advertise-addr Manager节点ip(本机只有一个ip的话就不用写)
# 管理join token(去中心化设计)
docker swarm join-token worker|manager
# worker node加入集群,成为一个工作副本
docker swarm join --token 令牌 Manager节点ip:2377(manager节点初始化后会列出命令,见上面的截图)
# 查看集群节点
docker node ls
# 检查指定节点
docker node inspect self|NODE
# 节点状态变更
docker node update --availability drain manager # 设置Manager Node只具有管理功能
# 节点打标签
docker node update --label-add 键名称=值
# 节点提权/降权
docker node promote 节点 # 升级为manager node
docker node demote 节点 # 降级为worker node
# 节点退出集群
docker swarm node leave [--force]
服务管理
Service 包含两种模式:
- replicated:可指定服务驻留节点数量(默认)
- global:服务驻留在全部节点
# 在集群中部署service
docker service create --replicas 副本数 --name 服务名称 镜像名称 command
# 滚动更新服务
docker service update --update-parallelism 并行更新限额数 --update-delay 更新间隔秒数 --image 镜像名称 服务名称
(如果有节点坏了,刷新后会自动在其他节点上补齐服务)
# 查看集群服务列表
docker service ls
# 查询指定服务的部署状况
docker service ps 服务名称
# 检查指定服务
docker service inspect --pretty 服务名称
# 集群服务扩容缩容
docker service scale 服务名称=节点数
# 删除集群指定服务及相关的副本
docker service rm 服务名称
网络管理
容器加入到同一网络中可以实现互访
# 创建网络
docker network create --driver overlay 网络名称
# 创建服务时指定网络
docker service create --network 网络名称 --replicas 副本数 --name 服务名称 镜像名称 command
docker service create --help (该命令下可以使用的参数)
https://docs.docker.com/engine/swarm/(官方详细的文档)