155 lines
4.4 KiB
Markdown
155 lines
4.4 KiB
Markdown
---
|
||
title: "CentOS7 安装 Cassandra 集群"
|
||
date: 2019-10-30T00:59:02+08:00
|
||
lastmod: 2019-10-30T00:59:02+08:00
|
||
keywords: []
|
||
tags: ["cassandra"]
|
||
categories: ["database"]
|
||
---
|
||
|
||
# 环境
|
||
|
||
主机名 | Public IP | Cluster IP| 操作系统 | Cassandra 版本
|
||
---- | ---- | ---- | ---- | ----
|
||
cassandra101 | 10.0.4.101 | 10.10.10.101 | CentOS7.6 | 3.0.18
|
||
cassandra102 | 10.0.4.102 | 10.10.10.102 | CentOS7.6 | 3.0.18
|
||
cassandra103 | 10.0.4.103 | 10.10.10.103 | CentOS7.6 | 3.0.18
|
||
|
||
- 下载 [apache-cassandra-3.0.18-bin.tar.gz](https://mirrors.tuna.tsinghua.edu.cn/apache/cassandra/3.0.18/apache-cassandra-3.0.18-bin.tar.gz)
|
||
|
||
# 各节点初始配置
|
||
|
||
- 关闭 selinux、防火墙
|
||
- 部署 java 运行环境
|
||
- 创建 cassandra 用户
|
||
```bash
|
||
useradd -m cassandra
|
||
```
|
||
- 创建数据目录
|
||
```bash
|
||
cd /var/lib
|
||
mkdir -p cassandra/data1 #多个存储磁盘可以创建多个数据存储目录
|
||
mkdir -p cassandra/hints #建议与数据磁盘分开
|
||
mkdir -p cassandra/commitlog #建议与数据磁盘分开
|
||
mkdir -p cassandra/saved_caches #建议与数据磁盘分开
|
||
chown -R cassandra.cassandra cassandra/
|
||
```
|
||
- 创建日志目录
|
||
```bash
|
||
cd /var/log
|
||
mkdir -p cassandra
|
||
chown -R cassandra.cassandra cassandra/
|
||
```
|
||
- 创建 pid 目录
|
||
```bash
|
||
cd /run
|
||
mkdir -p cassandra
|
||
chown -R cassandra.cassandra cassandra/
|
||
```
|
||
- 增加 sysctl.conf 配置,执行 sysctl -p 生效
|
||
```
|
||
vm.max_map_count=1048576
|
||
```
|
||
- 安装 jemalloc (推荐)
|
||
```bash
|
||
yum install jemalloc
|
||
```
|
||
- 创建文件 /usr/lib/systemd/system/cassandra.service,内容如下
|
||
```
|
||
[Unit]
|
||
Description=Cassandra
|
||
Requires=network.service
|
||
After=network.service
|
||
[Service]
|
||
Type=forking
|
||
WorkingDirectory=/opt/cassandra
|
||
Environment=JAVA_HOME=/opt/jre
|
||
Environment=LOCAL_JMX=no
|
||
PIDFile=/run/cassandra/cassandra.pid
|
||
ExecStart=/opt/cassandra/bin/cassandra -p /run/cassandra/cassandra.pid
|
||
User=cassandra
|
||
Group=cassandra
|
||
LimitNOFILE=65536
|
||
LimitNPROC=65536
|
||
LimitMEMLOCK=infinity
|
||
SuccessExitStatus=143
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
# 部署 Cassandra
|
||
|
||
- 登陆 cassandra101,下载 cassandra,解压至 /opt/ 下
|
||
- 修改 /opt/cassandra/conf/cassandra.yaml
|
||
```yaml
|
||
cluster_name: CassandraCluster
|
||
hists_directory: /var/lib/cassandra/hints
|
||
data_file_directories:
|
||
- /var/lib/cassandra/data1
|
||
commitlog_directory: /var/lib/cassandra/commitlog
|
||
saved_caches_directory: /var/lib/cassandra/saved_caches
|
||
seed_provider:
|
||
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
|
||
parameters:
|
||
- seeds: "10.10.10.101,10.10.10.102,10.10.10.103"
|
||
listen_address: 10.10.10.101
|
||
rpc_address: 10.0.4.101
|
||
```
|
||
- 修改 /opt/cassandra/conf/logback.xml
|
||
```bash
|
||
sed -i 's,\${cassandra.logdir},/var/log,' /opt/cassandra/conf/logback.xml
|
||
```
|
||
- 修改 /opt/cassandra/conf/cassandra-env.sh
|
||
```bash
|
||
# 这里我暂时关闭了 jmx 远程验证,否则需要手动创建 jmxremote.password 文件
|
||
sed -i 's/jmxremote.authenticate=true/jmxremote.authenticate=false/' /opt/cassandra/conf/cassandra-env.sh
|
||
```
|
||
- 修改 cassandra 目录的权限
|
||
```bash
|
||
chown -R cassandra.cassandra cassandra/
|
||
```
|
||
- 打包 cassandra 目录,部署到 cassandra102 和 cassandra103 的 /opt 下,并修改 cassandra.yaml
|
||
```
|
||
# cassandra102
|
||
listen_address: 10.10.10.102
|
||
rpc_address: 10.0.4.102
|
||
# cassandra103
|
||
listen_address: 10.10.10.103
|
||
rpc_address: 10.0.4.103
|
||
```
|
||
|
||
# 启动集群
|
||
|
||
- 启动 cassandra 服务
|
||
```bash
|
||
|
||
systemctl daemon-reload
|
||
systemctl start cassandra
|
||
```
|
||
|
||
# 简单使用
|
||
|
||
- cqlsh 连接数据库
|
||
```bash
|
||
/opt/cassandra/bin/cqlsh 10.0.4.101 9042
|
||
cqlsh> desc keyspaces;
|
||
```
|
||
|
||
# 注意事项
|
||
- 创建包含复合主键的表
|
||
```cql
|
||
create table t1 (
|
||
c1 text,
|
||
c2 text,
|
||
c3 text,
|
||
c4 text,
|
||
c5 text,
|
||
primary key((c1,c2),c3,c4)
|
||
);
|
||
- 复合主键的第一列 "(c1,c2)" 构成 PartitionKey,其余列 c3,c4 都是 ClusteringKey
|
||
- Cassandra 对 PartitionKey 计算 Hash 值,决定该记录的存放 node,ClusteringKey 在 Partition 内部排序
|
||
- 默认只支持**主键列**和**索引列**查询,否则需要手动指定 **allow filtering**
|
||
- 根据多个 ClustringKey 查询时,需指定全部的 PartitionKey,ClusteringKey 不能跳过
|
||
- 主键列不可修改
|
||
|