Spotify 最近开源了其 Cassandra 编排工具 https://github.com/spotify/cstar .Cstar 是一个命令行工具, 用于在 Cassandra 集群中的所有主机上运行脚本.
Cstar 的出现是为了在 Cassandra 节点中运行 shell 命令. 这些 shell 命令通常与性能, 安全性, 一致性, 升级等相关.
据 Spotify 称, 2017 年, Spotify Cassandra fleet 达到了 3000 个节点; 从那时起, 安全高效地运行 shell 命令的需求变得越来越迫切. 比如, 整个 Cassandra fleet 的计划升级就是其中一项噩梦般的任务, 该过程需要以下步骤:
清理所有快照(以便有足够的磁盘空间来完成升级)
生成一个新的快照(以便可以回滚)
禁止 Puppet 自动运行
停止 Cassandra 进程
从 Git 库的一个自定义分支运行 Puppet, 以便可以升级程序包
再次启动 Cassandra 进程
把 system.schema_columnfamilies 升级为 JSON 格式
运行 `nodetool upgradesstables`, 根据节点上数据量的不同, 这个过程可能需要几个小时才能完成
删除回滚快照
此外, 在操作 Cassandra fleet 时还存在一系列其他相关的问题, 如网络故障, SSH 连接中断, CPU 密集型操作, Cassandra 进程 / 节点重启而不影响性能和可用性, 或部分完成执行处理(任务仅在某些节点中成功).
在 Spotify 的早期, 在 Cassandra 节点上运行命令的最常见方式是在多个终端中键入命令.
Cstar 的目标是解决这些问题. 要使用 cstar, 所有涉及到的机器都应该使用类 UNIX 系统, 如 OS X 或 Linux, 并且运行 cstar 的机器必须有 python 3.
Cstar 通过 cstar 命令运行, 如下所示:
# cstar COMMAND [HOST-SPEC] [PARAMETERS]
HOST-SPEC 指定在哪个节点上运行脚本. 指定 HOST-SPEC 有以下三种方式:
--seed-host 告诉 cstar 连接到特定的主机, 从那里获取完整的环型拓扑, 然后在集群中的所有节点上运行脚本;
--host 指定一个准确的主机列表;
--host-file 指向一个文件名, 其中包含换行符分割的主机列表.
对于在 Cassandra 主机上运行的每个命令, cstar 会自动保存标准输出, 错误和退出状态. 结果 (作业状态) 保存在运行 cstar 的计算机上的用户主目录. cstar/jobs/JOB_ID/HOSTNAME 下.
下面是集群上的一些 CLI 命令示例:
- # cstar run --command='service cassandra restart' --seed-host some-host
- # cstar Puppet-upgrade-cassandra --seed-host some-host --Puppet-branch=cass-2.2-upgrade
下面是一个脚本示例, 该脚本通过在不同的分支上运行 Puppet 来升级 Cassandra 集群, 然后重新启动节点, 最后升级 sstable 文件:
- # !/usr/bin/env bash
- # C* cluster-parallel: true
- # C* dc-parallel: true
- # C* strategy: topology
- # C* description: Upgrade one or more clusters by switching to a different Puppet branch
- # C* argument: {
- "option":"--snapshot-name", "name":"SNAPSHOT_NAME", "description":"Name of pre-upgrade snapshot", "default":"preupgrade"
- }
- # C* argument: {
- "option":"--puppet-branch", "name":"PUPPET_BRANCH", "description":"Name of puppet branch to switch to", "required":true
- }
- nodetool snapshot -t $SNAPSHOT_NAME
- sudo Puppet --branch $PUPPET_BRANCH
- sudo service cassandra restart
- nodetool upgradesstables
Cstar 库 https://github.com/spotify/cstar
中提供了 cstar 命令的完整列表和更多信息.
来源: http://www.tuicool.com/articles/VJnuAjA