www.colben.cn/content/post/cassandra-install.md
2021-11-14 14:32:08 +08:00

155 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 值,决定该记录的存放 nodeClusteringKey 在 Partition 内部排序
- 默认只支持**主键列**和**索引列**查询,否则需要手动指定 **allow filtering**
- 根据多个 ClustringKey 查询时,需指定全部的 PartitionKeyClusteringKey 不能跳过
- 主键列不可修改