mesos 0.25.0/0.28.0 集群部署升级指南
Mesos升级流程:
上线步骤描述:
- 对所有的 slave 先进行分批升级(先 1 个进行初试牛刀,等所有 mesos-deploy 流程都走通了后,可以再继续升级 1 台进行测试)。
- 观察已经升级的机器,确定无误后,继续分批将所有的 slave 升级完成。
- 升级 Master (A/B/C), 先将非 master leader 的 B 与 C 一台一台的升级,等 zookeeper 自动切换 master leader 后,观察一断时间,如果没问题,将 old master leader (A) 升级。
- 此时,所有机器升级完毕,将 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/ 下的相应的日志文件,然后解决。