Wener Site

ScyllaDB

约 4 分钟阅读

When to use ScyllaDB

  • 大多为 KV 访问方式
  • 单行、cell 数据量不是特别大 - 默认 10MB 行、 1MB cell 会发出警告
  • 兼容 cassandra,提供 dynamodb 适配接口
  • 替代 Redis 作为需要持久化的 Meta 和 缓存 存储
  • 面向低 latency 场景
  • 不是完全的列式存储
portfor
7000-7001Inter-node RPC
9042CQL
9160Thrift
9180metrics
10000REST API
bash
mkdir -p data/{data,commitlog,hints,view_hints}
# https://hub.docker.com/r/scylladb/scylla/
# /etc/scylla/scylla.yaml
# 7199 JMX
# SCYLLA_JMX_ADDR=-ja 0.0.0.0 SCYLLA_JMX_REMOTE=-r
# Swagger http://localhost:10000/ui
# Metrics http://localhost:9180/metrics
# https://docs.scylladb.com/stable/operating-scylla/admin.html
# developer-mode=1 减少检测 - 例如 macOS 上挂载 volume 会失败
# 账号密码默认为 cassandra
# docker 内置 sshd, node_exporter, rsyslogd, scylla-jmx, scylla-housekeeping, supervisord
docker run --rm -it \
  -p 9042:9042 -p 19042:19042 -p 9160:9160 -p 10000:10000 -p 9180:9180 -p 8000:8000 \
  -v $PWD/data:/var/lib/scylla \
  --hostname scylla \
  --name scylla scylladb/scylla \
  --seeds=scylla --broadcast-address=172.17.0.2 --broadcast-rpc-address=172.17.0.2 \
  --cluster-name=scylla1 \
  --developer-mode=1 \
  --api-address=0.0.0.0 --listen-address=0.0.0.0 \
  --authenticator=PasswordAuthenticator \
  --alternator-port=8000 \
  --alternator-write-isolation=only_rmw_uses_lwt

docker exec -it scylla nodetool status
docker exec -it scylla cqlsh -u cassandra -p cassandra
  • 默认读超时 5s, 写超时 2s - 面向低延迟场景

Cluster

  • cluster_name
  • dc=datacenter1
  • rack=
  • seeds - 第一个节点的 IP
  • auto_bootstrap=true
  • snitch=GossipingPropertyFileSnitch
    • 支持 NetworkTopologyStrategy
sql
cassandra-rackdc.properties
dc=datacenter1
rack=rack1
; prefer_local=<false | true>
; dc_suffix=<Data Center name suffix, used by EC2SnitchXXX snitches>

Auth

  • authenticator
    • PasswordAuthenticator
    • ldap - 企业版
    • AllowAllAuthenticator
  • authz
    • AllowAllAuthorizer
    • CassandraAuthorizer
    • ldap - 企业版
sql
-- 如果用了 PasswordAuthenticator 注意增加副本数
ALTER KEYSPACE system_auth WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'dc1' : 1};
-- 或
ALTER KEYSPACE system_auth WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };


CREATE ROLE admin WITH PASSWORD = 'password' AND LOGIN = true AND SUPERUSER = true;

GRANT viewer TO wener;
-- LIST ROLES [ OF `role_name` ] [ NORECURSIVE ]
LIST ROLES;

-- GRANT permissions ON resource TO role_name
-- permissions - ALL [ PERMISSIONS ] | `permission` [ PERMISSION ]
-- permission - CREATE | ALTER | DROP | SELECT | MODIFY | AUTHORIZE | DESCRIBE
-- resource: ALL KEYSPACES | KEYSPACE name | [ TABLE ] name | ALL USERS | USER name

-- LIST `permissions` [ ON `resource` ] [ OF `user_name` [ NORECURSIVE ] ]

Alternator

Tools

清除数据

bash
sudo rm -rf /var/lib/scylla/data
sudo find /var/lib/scylla/commitlog -type f -delete
sudo find /var/lib/scylla/hints -type f -delete
sudo find /var/lib/scylla/view_hints -type f -delete

FAQ

std::runtime_error (sorted_tokens is empty in first_token_index!)

注意设置 broadcast-address

Server timeout during write query at consistency LOCAL_ONE

  • write_request_timeout_in_ms=2000
  • 默认 2s 建议增大

large data - row/cell

  • compaction_large_row_warning_threshold_mb=10
  • compaction_large_cell_warning_threshold_mb=1
sql
SELECT * FROM system.large_rows;
SELECT * FROM system.large_cells;
text
large_data - Writing large cell

Memory usage of unpaged query exceeds soft limit of 1048576

  • max_memory_for_unlimited_query_soft_limit
bash
curl 127.0.0.1:10000/v2/config/max_memory_for_unlimited_query_soft_limit

关联信息

反向链接和本文引用的外部资料。

反向链接

  • Database Awesome
    笔记 · Scylla

    | name | stand for | · | Relational DBMS | 关系型数据库 | · | Key-value stores | KV 存储 | · | Document stores | 文档存储 | · | Time Series DBMS | 时序数据库 |

References

GitHub

8 条

Hacker News

1 条

其他外链

7 条
最近更新commit 064f6daEdit

On this page