mesos 0.25.0/0.28.0 集群部署升级指南

Mesos升级流程:

上线步骤描述:

  1. 对所有的 slave 先进行分批升级(先 1 个进行初试牛刀,等所有 mesos-deploy 流程都走通了后,可以再继续升级 1 台进行测试)。
  2. 观察已经升级的机器,确定无误后,继续分批将所有的 slave 升级完成。
  3. 升级 Master (A/B/C), 先将非 master leader 的 B 与 C 一台一台的升级,等 zookeeper 自动切换 master leader 后,观察一断时间,如果没问题,将 old master leader (A) 升级。
  4. 此时,所有机器升级完毕,将 marathon, chronos 和 storm 等frameworks 继续进行兼容性版本升级(这些框架的升级需要相应的 developer 配合完成),直到整个集群工作正常。

上线步骤详情:

Step1. PING 所有机器,提前检查是否有未加 Key 的机器

ansible all -i hosts/xxx -m ping

Step2: 升级 slave

对所有的 slave 先进行分批升级,比如:先 1 个进行初试牛刀。 观察升级的机器,无误后,再升级 1 台测试,确保成功后,则继续分批有间隔地将所有的 slave 升级完

  • 确保在运行systemctl restart mesos-slave时都能正常重启,所以先执行 unguard 操作。

    $ ansible-playbook --limit=slaves -i hosts/xxx mesos.yaml --tags unguard
  • 在执行升级前先停止 mesos-slave 服务。

    $ ansible slaves -i hosts/xxx -m shell -a "systemctl stop mesos-slave"
  • 先在升级前确定 mesos repo 是否有更新? 如有,则需要执行 updaterepo 操作进行更新。

    $ ansible-playbook --limit=slaves -i hosts/xxx mesos.yaml --tags updaterepo
  • 为删除的彻底和防止中途出错,在 uninstall mesos-slave 之前修改 mesos_version 的版本为当前正在使用的版本即老版本。

    $ ansible-playbook --limit=slaves -i hosts/xxx mesos.yaml --tags uninstall_mesos
  • 在 install mesos-slave 之前修改 mesos_version 的版本为需要部署的新版本

    $ ansible-playbook --limit=slaves -i hosts/xxx mesos.yaml --tags mesos
  • 为防止 mesos-slave 服务不能正常启动,需要先执行如下的删除操作

    rm -rf /data/mesos/meta/slaves/latest
  • 由于执行了上述删除操作,可能会遇到之前容器一直在跑但并未 kill 的情况,则需要在重启 mesos-slave 之前,重启 docker 服务。

    $ ansible slaves -i hosts/xxx -m shell -a "systemctl restart docker"  
  • 重启 mesos-slave 服务,此时 slave 升级完毕,可以到 mesos GUI 页面查看升级情况。

    $ ansible slaves -i hosts/xxx -m shell -a "systemctl start mesos-slave"
  • 等一小段时间,待所有 slave 运行稳定后,执行 guard 操作。

    $ ansible-playbook --limit=slaves -i hosts/xxx mesos.yaml --tags guard

注意:重复步骤 3 ,完成所有 slave 升级。


Step3: 升级 master

为保证 zookeeper 正常服务的 quota,目前我们设置的 3 ,即 3 台互备主从。由于安装完后 mesos-master 服务会自动启动,所以一个一个的进行升级以保证 mesos-master 服务不能断

  • 停止 1 台非 leader mesos-master 服务

    $ ansible masters -i hosts/xxx -m shell -a "systemctl stop mesos-master"
  • 先在升级前确定 mesos repo 是否有更新? 如有,则需要执行 updaterepo 操作进行更新

    $ ansible-playbook --limit=masters -i hosts/xxx mesos.yaml --tags updaterepo 
  • 为删除的彻底和防止中途出错,在 uninstall mesos-master 之前修改 mesos_version 的版本为当前正在使用的版本即老版本。

    $ ansible-playbook --limit=masters -i hosts/xxx mesos.yaml --tags uninstall_mesos
  • 在 install mesos-master 之前修改 mesos_version 的版本为需要部署的新版本

    $ ansible-playbook --limit=masters -i hosts/xxx mesos.yaml --tags mesos

注意:重复步骤 3 ,将前两个非 leader 的 mesos master 升级完毕, 并将当前 leader 放在最后升级。

Step4: 收尾工作

至此,所有的机器都原则上都升级完成了。检查一下 Mesos GUI 页面上显示的 slave 的数目是不是与 mesos-deploy 脚本中的number_slaves 的值一致。如果不一致,可以找到相应的机器并登录到上面查看目录 /data/mesos/log/ 下的相应的日志文件,然后解决。

原文地址:https://www.cnblogs.com/qianggezhishen/p/7349346.html