ScyllaDB安装与配置 #
一、安装要求 #
1.1 硬件要求 #
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 2核心 | 8+核心 |
| 内存 | 4GB | 32GB+ |
| 磁盘 | 20GB SSD | NVMe SSD |
| 网络 | 1Gbps | 10Gbps |
1.2 操作系统支持 #
text
支持的操作系统:
├── Linux发行版
│ ├── Ubuntu 20.04/22.04
│ ├── CentOS 7/8
│ ├── Rocky Linux 8/9
│ ├── Amazon Linux 2
│ └── Debian 10/11
├── Docker
└── Kubernetes
二、Docker安装(推荐入门) #
2.1 单节点部署 #
bash
# 拉取镜像
docker pull scylladb/scylla:latest
# 启动单节点
docker run --name scylla -d scylladb/scylla:latest
# 验证运行状态
docker exec -it scylla nodetool status
2.2 集群部署 #
bash
# 创建网络
docker network create scylla-net
# 启动第一个节点
docker run --name scylla-node1 --net=scylla-net -d scylladb/scylla:latest \
--seeds="$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' scylla-node1)"
# 获取第一个节点IP
SEED_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' scylla-node1)
# 启动第二个节点
docker run --name scylla-node2 --net=scylla-net -d scylladb/scylla:latest \
--seeds="$SEED_IP"
# 启动第三个节点
docker run --name scylla-node3 --net=scylla-net -d scylladb/scylla:latest \
--seeds="$SEED_IP"
# 验证集群状态
docker exec -it scylla-node1 nodetool status
2.3 使用Docker Compose #
yaml
version: '3.8'
services:
scylla-node1:
image: scylladb/scylla:latest
container_name: scylla-node1
command: --seeds=scylla-node1,scylla-node2
networks:
- scylla-net
scylla-node2:
image: scylladb/scylla:latest
container_name: scylla-node2
command: --seeds=scylla-node1,scylla-node2
networks:
- scylla-net
scylla-node3:
image: scylladb/scylla:latest
container_name: scylla-node3
command: --seeds=scylla-node1,scylla-node2
networks:
- scylla-net
networks:
scylla-net:
driver: bridge
bash
# 启动集群
docker-compose up -d
# 查看状态
docker-compose exec scylla-node1 nodetool status
三、Linux安装 #
3.1 Ubuntu安装 #
bash
# 添加ScyllaDB仓库
sudo apt-get update
sudo apt-get install -y apt-transport-https wget gnupg2
# 添加GPG密钥
wget -O - https://downloads.scylladb.com/downloads/scylla/GPG-KEY-scylladb | sudo apt-key add -
# 添加仓库
sudo apt-add-repository -y 'deb https://downloads.scylladb.com/downloads/scylla/deb/ubuntu/focal scylladb-6.0 main'
# 安装ScyllaDB
sudo apt-get update
sudo apt-get install -y scylla
# 运行配置脚本
sudo scylla_setup
# 启动服务
sudo systemctl start scylla-server
sudo systemctl enable scylla-server
3.2 CentOS/Rocky Linux安装 #
bash
# 添加ScyllaDB仓库
sudo curl -o /etc/yum.repos.d/scylla.repo \
https://downloads.scylladb.com/downloads/scylla/rpm/centos/scylla-6.0.repo
# 安装ScyllaDB
sudo yum install -y scylla
# 运行配置脚本
sudo scylla_setup
# 启动服务
sudo systemctl start scylla-server
sudo systemctl enable scylla-server
3.3 配置脚本说明 #
bash
# scylla_setup交互式配置
sudo scylla_setup
# 配置选项:
# 1. 网络接口选择
# 2. 内存分配
# 3. CPU核心绑定
# 4. 磁盘调优
# 5. 是否加入现有集群
四、配置文件详解 #
4.1 主配置文件 #
配置文件位置:/etc/scylla/scylla.yaml
yaml
# 集群名称
cluster_name: 'Test Cluster'
# 种子节点列表
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "192.168.1.1,192.168.1.2"
# 监听地址
listen_address: 192.168.1.1
# RPC地址
rpc_address: 192.168.1.1
# 本地广播地址
broadcast_address: 192.168.1.1
broadcast_rpc_address: 192.168.1.1
# 数据目录
data_file_directories:
- /var/lib/scylla/data
# 提交日志目录
commitlog_directory: /var/lib/scylla/commitlog
# 提示目录
hints_directory: /var/lib/scylla/hints
# 视图目录
view_hints_directory: /var/lib/scylla/view_hints
# 端口配置
native_transport_port: 9042
storage_port: 7000
ssl_storage_port: 7001
# 复制策略
endpoint_snitch: GossipingPropertyFileSnitch
4.2 内存配置 #
yaml
# 系统内存配置(通常由scylla_setup自动设置)
# 手动配置示例:
# 内存分配(MB)
memory_allocator: 8192
# 或者使用比例
memory_allocator: 0.5 # 使用50%的系统内存
4.3 性能调优配置 #
yaml
# 并发写入数
concurrent_writes: 128
# 并发读取数
concurrent_reads: 128
# 压缩配置
compaction_throughput_mb_per_sec: 0
# 提交日志同步
commitlog_sync: periodic
commitlog_sync_period_in_ms: 10000
# 缓存配置
row_cache_size_in_mb: 0
key_cache_size_in_mb: 100
五、集群配置 #
5.1 单数据中心配置 #
yaml
# 节点1配置
cluster_name: 'Production Cluster'
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "192.168.1.1,192.168.1.2"
listen_address: 192.168.1.1
endpoint_snitch: GossipingPropertyFileSnitch
5.2 多数据中心配置 #
yaml
# 数据中心1节点配置
cluster_name: 'Global Cluster'
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "dc1-node1,dc2-node1"
listen_address: 10.0.1.1
endpoint_snitch: GossipingPropertyFileSnitch
dc: dc1
rack: rack1
5.3 Snitch配置 #
yaml
# GossipingPropertyFileSnitch配置
# 文件:/etc/scylla/cassandra-rackdc.properties
dc=DC1
rack=RAC1
六、客户端连接 #
6.1 cqlsh命令行工具 #
bash
# 连接本地ScyllaDB
cqlsh
# 连接指定主机
cqlsh 192.168.1.1
# 指定端口
cqlsh 192.168.1.1 9042
# 带认证连接
cqlsh 192.168.1.1 -u username -p password
6.2 Python驱动 #
bash
# 安装驱动
pip install cassandra-driver
python
from cassandra.cluster import Cluster
# 连接集群
cluster = Cluster(['192.168.1.1', '192.168.1.2'])
session = cluster.connect()
# 执行查询
rows = session.execute('SELECT * FROM system.local')
for row in rows:
print(row)
6.3 Java驱动 #
xml
<dependency>
<groupId>com.scylladb</groupId>
<artifactId>java-driver-core</artifactId>
<version>4.15.0.0</version>
</dependency>
java
import com.datastax.oss.driver.api.core.CqlSession;
public class ScyllaDBExample {
public static void main(String[] args) {
try (CqlSession session = CqlSession.builder()
.addContactPoint(new InetSocketAddress("192.168.1.1", 9042))
.build()) {
var rs = session.execute("SELECT * FROM system.local");
for (var row : rs) {
System.out.println(row);
}
}
}
}
6.4 Node.js驱动 #
bash
# 安装驱动
npm install cassandra-driver
javascript
const cassandra = require('cassandra-driver');
const client = new cassandra.Client({
contactPoints: ['192.168.1.1', '192.168.1.2'],
localDataCenter: 'datacenter1'
});
async function query() {
await client.connect();
const result = await client.execute('SELECT * FROM system.local');
console.log(result.rows);
}
query();
七、验证安装 #
7.1 检查服务状态 #
bash
# 检查服务状态
sudo systemctl status scylla-server
# 检查进程
ps aux | grep scylla
# 检查端口
netstat -tlnp | grep scylla
7.2 使用nodetool #
bash
# 查看集群状态
nodetool status
# 输出示例:
# Datacenter: datacenter1
# =======================
# Status=Up/Down
# |/ State=Normal/Leaving/Joining/Moving
# -- Address Load Tokens Owns Host ID Rack
# UN 192.168.1.1 100 KB 256 33.3% uuid1 rack1
# UN 192.168.1.2 100 KB 256 33.3% uuid2 rack1
# UN 192.168.1.3 100 KB 256 33.3% uuid3 rack1
# 查看环信息
nodetool ring
# 查看表统计
nodetool tablestats
7.3 执行测试查询 #
bash
# 连接cqlsh
cqlsh
# 创建测试键空间
cqlsh> CREATE KEYSPACE test_ks
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
# 创建测试表
cqlsh> CREATE TABLE test_ks.users (
user_id UUID PRIMARY KEY,
name TEXT,
email TEXT
);
# 插入测试数据
cqlsh> INSERT INTO test_ks.users (user_id, name, email)
VALUES (uuid(), '张三', 'zhangsan@example.com');
# 查询数据
cqlsh> SELECT * FROM test_ks.users;
八、常见问题 #
8.1 内存不足 #
bash
# 检查内存配置
cat /proc/meminfo
# 调整ScyllaDB内存
# 编辑 /etc/scylla/scylla.yaml
memory_allocator: 4096 # MB
8.2 端口冲突 #
bash
# 检查端口占用
netstat -tlnp | grep -E '9042|7000|7001|9142|10000'
# 修改端口配置
# 编辑 /etc/scylla/scylla.yaml
native_transport_port: 9043
8.3 防火墙配置 #
bash
# Ubuntu/Debian
sudo ufw allow 9042/tcp # CQL端口
sudo ufw allow 7000/tcp # 集群通信
sudo ufw allow 7001/tcp # SSL集群通信
sudo ufw allow 10000/tcp # JMX
# CentOS/RHEL
sudo firewall-cmd --permanent --add-port=9042/tcp
sudo firewall-cmd --permanent --add-port=7000/tcp
sudo firewall-cmd --permanent --add-port=7001/tcp
sudo firewall-cmd --permanent --add-port=10000/tcp
sudo firewall-cmd --reload
九、卸载 #
9.1 Ubuntu卸载 #
bash
# 停止服务
sudo systemctl stop scylla-server
# 卸载软件
sudo apt-get remove --purge scylla
# 删除数据
sudo rm -rf /var/lib/scylla
sudo rm -rf /etc/scylla
9.2 CentOS卸载 #
bash
# 停止服务
sudo systemctl stop scylla-server
# 卸载软件
sudo yum remove scylla
# 删除数据
sudo rm -rf /var/lib/scylla
sudo rm -rf /etc/scylla
十、总结 #
安装要点:
| 方式 | 适用场景 | 复杂度 |
|---|---|---|
| Docker | 开发测试 | 低 |
| Linux包管理 | 生产环境 | 中 |
| 云平台 | 无运维需求 | 低 |
最佳实践:
- 开发环境使用Docker快速部署
- 生产环境使用Linux包管理安装
- 使用scylla_setup自动优化配置
- 合理规划硬件资源
- 配置监控和告警
下一步,让我们学习CQL基础语法!
最后更新:2026-03-27