默认 DC/OS Apache Cassandra 安装为试行服务提供合理的默认设置,但可能不足以支持生产使用。根据部署的上下文,您可能需要不同的配置。
使用自定义配置安装
以下是如何自定义安装 Apache Cassandra 实例的一些例子。
在每个例子中,您将使用自定义配置创建一个新的 Apache Cassandra 实例,如下所示:
$ dcos package install cassandra --options=sample-cassandra.json
建议: 将自定义配置存储在源控件中。
安装多个实例
默认情况下,Apache Cassandra 服务安装名称为 cassandra 的服务。您可以使用如下自定义服务配置来指定不同的名称:
{
"service": {
"name": "cassandra-other"
}
}
当上述 JSON 配置通过 --options 自变量被传递到 package install cassandra 命令时,新服务将使用 JSON 配置中指定的名称:
$ dcos package install cassandra --options=cassandra-other.json
可以通过自定义每个实例的名称将多个 Apache Cassandra 实例安装到 DC/OS 群集中。例如,您可能有一个名为 cassandra-staging 和另一个名为 cassandra-prod的 Apache Cassandra 实例,每个都具有各自的自定义配置。
为实例指定自定义名称后,可以使用 dcos cassandra CLI 命令或直接通过 HTTP 接触实例,如下所述 以下。
安装到文件夹中
在 DC/OS 1.10 及更高版本中,可以通过指定斜线分隔的服务名称将服务安装到文件夹中。例如:
{
"service": {
"name": "/foldered/path/to/cassandra"
}
}
以上示例将在路径 foldered => path => to => cassandra 中安装服务。然后可以使用 dcos cassandra CLI 命令或直接通过 HTTP 接触服务,如下所述 以下。
寻址已命名实例
使用自定义名称或在文件夹下安装服务之后,可以使用 --name 自变量从所有 dcos cassandra CLI 命令访问该服务。默认情况下,--name 值默认为包名称,或 cassandra。
例如,如果您有一个名为 cassandra-dev的实例,以下命令将针对它调用 pod list 命令:
$ dcos cassandra --name=cassandra-dev pod list
相同的查询将通过 HTTP 执行,如下所示:
$ curl -H "Authorization:token=$auth_token" <dcos_url>/service/cassandra-dev/v1/pod
同样,如果您在文件夹中有一个类似 /foldered/path/to/cassandra的实例,以下命令将针对它调用 pod list 命令:
$ dcos cassandra --name=/foldered/path/to/cassandra pod list
类似地,可以直接通过 HTTP 查询,如下所示:
$ curl -H "Authorization:token=$auth_token" <dcos_url>/service/foldered/path/to/cassandra-dev/v1/pod
您可以添加 -v (详细)自变量到任何 dcos cassandra 命令以查看正在进行的潜在 HTTP 查询。这是查看 CLI 在何处获取信息的有用工具。在实践中,dcos cassandra 命令是由 DC/OS Apache Cassandra 服务本身提供的 HTTP 接口的瘦包装器。
与 DC/OS 访问控制集成
在 Enterprise DC/OS 中,可以使用 DC/OS 访问控制来限制对服务的访问。要让非超级用户完全访问服务,向其授予以下权限列表:
dcos:adminrouter:service:marathon full
dcos:service:marathon:marathon:<service-name> full
dcos:adminrouter:ops:mesos full
dcos:adminrouter:ops:slave full
其中 <service-name> 是您的完整服务名称,包括文件夹(如果安装在文件夹中)。
创建自定义配置文件
创建将用于安装 Apache Cassandra 的自定义配置文件,并另存为 config.json。指定服务帐户 (<service_account_id>) and a secret path (cassandra/<secret-name>) .
{
"service": {
"service_account": "<service_account_id>",
"service_account_secret": "cassandra/<secret-name>"
}
}
服务设置
布局约束
布局约束允许您自定义 DC/OS 群集中部署服务的位置。布局约束使用 Marathon 运营商 语法。例如,[["hostname", "UNIQUE"]] 确保每个代理最多部署一个 Pod。
通用任务是指定要对其进行部署的白名单系统列表。为此,请使用以下语法用于布局约束:
[["hostname", "LIKE", "10.0.0.159|10.0.1.202|10.0.3.3"]]
更新布局约束
群集更改,因此布局约束也随之变化。但是,已经运行的服务 Pod 将不会受到布局约束变化的影响。这是因为更改布局约束可能会使得当前运行的 pod 的当前布局失效,而且 Pod 不会自动被重新布置,因为这样做是破坏性的操作。我们建议使用以下程序更新 Pod 的布局约束:
- 更新服务中的布局约束定义。
- 对每个受影响的 Pod,一次执行一个
pod replace。这将(破坏性地)移动 Pod 使其符合新的布局约束。
区
需要: DC/OS 1.11 Enterprise 或更高版本。
通过引用 @zone 键,布局约束可以应用于 DC/OS 区。例如,可以通过包括此约束在最少三个不同区中扩散 Pod:
[["@zone", "GROUP_BY", "3"]]
虚拟网络
DC/OS Apache Cassandra 支持在 DC/OS 的 虚拟网络 上进行部署(包括 dcos 覆盖网络),允许每个容器(任务)拥有自己的 IP 地址,而不使用代理机器上的端口资源。这可以通过在安装过程中传递以下配置来指定:
{
"service": {
"virtual_network_enabled": true
}
}
区域
服务参数 region 可用于在一个替换区域中部署服务。默认情况下,服务部署在“本地”区域,这是运行 DC/OS 管理节点的区域。要在特定原因下安装服务,在其选项中包含:
{
"service": {
"region": "<region>"
}
}
Cassandra 节点设置
调整以下设置以自定义分配给每个节点的资源量。DC/OS Apache Cassandra 的 系统要求 在调整这些值时必须考虑。降低系统要求下的这些值,可能导致使用该服务时出现不良性能和/或故障。
以下每个设置均可在 节点 配置部分进行自定义。
节点计数
在节点 配置部分自定义 Node Count 设置(默认 3)。有关最低节点计数要求,请参阅 Apache Cassandra 文档。
- 在 DC/OS CLI options.json 中:
count:整数(默认:3) - DC/OS Web 界面:
NODES:integer
CPU
您可以自定义分配给每个节点的 CPU 数量。1.0 的值等同于计算机上的一个完整专用 CPU 核心,尽管所有核心均可通过时间分片提供。通过编辑 节点 配置部分的 cpus 值来更改此值。值设置过低会导致任务受限。
请注意,每个 Cassandra 节点都会为 sidecar 服务(例如,备份和 nodetool)使用额外的 1.0 CPU。为每个 Cassandra 节点配置 3 个 CPU 时,实际使用率将为 4 个 CPU,在配置 Cassandra 时应考虑到这些,以最大化在代理上的资源利用率。
- 在 DC/OS CLI options.json 中:
cpus:数字(默认:0.5) - DC/OS Web 界面:
CASSANDRA_CPUS:number
内存
您可以自定义分配给每个节点的 RAM 量。通过编辑 节点 配置部分的 mem 值(以 MB 为单位)来更改此值。此值设置过低将导致内存不足错误。heap.size 设置值还必须小于此值,以防止内存不足错误,这种错误在 Java 虚拟机尝试给 Cassandra 流程分配额外的可用内存时会出现。
- 在 DC/OS CLI options.json 中:
mem:整数(默认:10240) - DC/OS Web 界面:
CASSANDRA_MEMORY_MB:integer
JMX 端口
您可以自定义 Apache Cassandra 针对 JMX 请求(例如,由 nodetool 发出的请求)进行侦听的端口。
- 在 DC/OS CLI options.json 中:
jmx_port:整数(默认:7199) - DC/OS Web 界面:
TASKCFG_ALL_JMX_PORT:integer
存储端口
您可以自定义 Apache Cassandra 针对节点间通信进行侦听的端口。
- 在 DC/OS CLI options.json 中:
storage_port:整数(默认:7000) - DC/OS Web 界面:
TASKCFG_ALL_CASSANDRA_STORAGE_PORT:integer
SSL 存储端口
您可以自定义 Apache Cassandra 针对 SSL 节点间通信进行侦听的端口。
- 在 DC/OS CLI options.json 中:
ssl_storage_port:整数(默认:7001) - DC/OS Web 界面:
TASKCFG_ALL_CASSANDRA_SSL_STORAGE_PORT:integer
本地传输端口
您可以自定义 Apache Cassandra 针对 CQL 查询进行侦听的端口。
- 在 DC/OS CLI options.json 中:
native_transport_port:整数(默认:9042) - DC/OS Web 界面:
TASKCFG_ALL_CASSANDRA_NATIVE_TRANSPORT_PORT:integer
RPC 端口
您可以自定义 Apache Cassandra 针对 Thrift RPC 请求进行侦听的端口。
- 在 DC/OS CLI options.json 中:
rpc_port:整数(默认:9160) - DC/OS Web 界面:
TASKCFG_ALL_CASSANDRA_RPC_PORT:integer
磁盘
卷类型
该服务支持两种卷类型:
ROOT卷是根卷上的隔离目录,与主机系统的其余部分共享 IO /心轴。MOUNT卷是独立卷上的专用设备或分区,具有专用 IO/心轴。
使用 MOUNT 卷,需要 每个 DC/OS 代理系统上的附加配置,所以服务当前使用默认的 ROOT 卷。为确保生产环境中可靠和稳定的性能,您应配置将在您的集群中运行服务的计算机上的 MOUNT 卷,然后将以下内容配置为 MOUNT 卷:
配置磁盘类型:
- 在 DC/OS CLI options.json 中:
disk_type:字符串(默认:ROOT) - DC/OS Web 界面:
CASSANDRA_DISK_TYPE:string
磁盘调度器
建议 您预配置您的存储主机,以在生产环境中使用截止时间 IO 调度器。
机架感知放置
当指定使用@zone键的布局约束时,将自动启用 Cassandra 的基于“机架”的故障域支持。例如,您可以通过指定约束[["@zone", "GROUP_BY", "3"]],使 Cassandra 节点至少跨越三个不同的区域/机架。当使用布局约束指定 @zone 时,Cassandra 节点将自动通过 rack(匹配区域名称)进行配置。如果没有布局约束参考 @zone 被配置,那么所有节点都将通过 rack1 的默认机架进行配置。
Apache Cassandra 配置
Apache Cassandra 的配置可通过服务架构的 cassandra 部分进行。有关可用配置的完整列表,请参阅服务架构。
多数据中心部署
要跨数据中心复制数据, Apache Cassandra 则需要使用每个远程集群中种子节点的地址配置每个集群。以下是启用多数据中心 Apache Cassandra 部署的情况,其在单个 DC / OS 集群内运行:
启动两个 Cassandra 集群
- 使用默认配置启动第一个集群:
dcos package install cassandra
- 为第二个集群创建
options.json文件,该集群指定不同的服务名称和数据中心名称:
{
"service": {
"name": "cassandra2",
"data_center": "dc2"
}
}
- 使用这些自定义选项启动第二个集群:
dcos package install cassandra --options=<options.json>
获取种子节点的 IP 地址
- 为第一个集群获取种子节点地址的列表:
dcos cassandra --name=cassandra endpoints node
或者,您可以从调度器 HTTP API 中获取此信息:
DCOS_AUTH_TOKEN=$(dcos config show core.dcos_acs_token)
DCOS_URL=$(dcos config show core.dcos_url)
curl -H "authorization:token=$DCOS_AUTH_TOKEN" $DCOS_URL/service/cassandra/v1/endpoints/node
您的输出类似于:
{
"address": [
"10.0.1.236:9042",
"10.0.0.119:9042"
],
"dns": [
"node-0-server.cassandra.autoip.dcos.thisdcos.directory:9042",
"node-1-server.cassandra.autoip.dcos.thisdcos.directory:9042"
],
"vip": "node.cassandra.l4lb.thisdcos.directory:9042"
}
注意 address 字段中的 IP。
- 对第二个 Cassandra 集群运行相同命令,并注意
address字段中的 IP:
dcos cassandra --name=cassandra2 endpoints node
为两个集群更新配置
- 使用第一个集群 (
cassandra) 的 IP 地址创建options2.json文件:
{
"service": {
"remote_seeds": "10.0.1.236:9042,10.0.0.119:9042"
}
}
- 更新第二个集群的配置:
dcos cassandra --name=cassandra2 update start --options=options2.json
对第一个集群执行相同操作,在 service.remote_seeds 字段中创建包含第二个集群 (cassandra2) 种子节点的 IP 地址的 options.json。然后,更新第一个集群的配置:dcos cassandra --name=cassandra update start --options=options.json。
两个调度器都将在接收到配置更新后重新启动,并且每个集群将与其他集群的种子节点通信,以建立多数据中心拓扑。对您添加的每个新集群重复执行此过程。
您可以监控第一个集群的更新进度:
dcos cassandra --name=cassandra update status
或者对第二个集群:
dcos cassandra --name=cassandra2 update status
您的输出类似于:
deploy (IN_PROGRESS)
└─ node-deploy (IN_PROGRESS)
├─ node-0:[server] (COMPLETE)
├─ node-1:[server] (COMPLETE)
└─ node-2:[server] (PREPARED)
测试您的多数据中心配置
确保使用 Cassandra 客户端测试您的部署。
Cassandra文档