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包管理 生产环境
云平台 无运维需求

最佳实践:

  1. 开发环境使用Docker快速部署
  2. 生产环境使用Linux包管理安装
  3. 使用scylla_setup自动优化配置
  4. 合理规划硬件资源
  5. 配置监控和告警

下一步,让我们学习CQL基础语法!

最后更新:2026-03-27