尝试搭建ScyllaDB多节点集群
ScyllaDB 是什么?
ScyllaDB(斯堪拉DB)是一个基于C++替代了Apache Cassandra的数据库,比Cassandra快10倍以上,利用这个速度可以将节点数量压缩到原来的1/5到1/10(这是一种以扩展性为优先的群集设计思想)。ScyllaDB与Cassandra兼容,在开发中可以直接使用Cassandra的驱动程序、CQL、各种连接器和CLI等工具。
- https://www.scylladb.com/open-source/
在这里,我们将介绍构建多节点集群的步骤,作为真正的ScyllaDB体验入口。
预先准备
作为最小配置,需要3台服务器。
作者进行了以下配置。
-
- 2core/8GB ✖ 3
- Unbuntu16.04
如果要使用云服务,需要打开以下端口。
ScyllaDB软件包的安装
请参考“构建ScyllaDB独立集群”来安装软件包。软件包安装和ScyllaDB设置(scylla_setup)的步骤是完全相同的。
试着建立一个ScyllaDB的独立集群。
安装包后设置集群环境。
Scylla数据库的设置位于/etc/scylla/scylla.yaml文件中。
以下是对ScyllaDB集群构建所需参数的简要解释。
-
- cluster_name
-
- 任意クラスタ―名を指定する。
-
- seeds
-
- 必ず、1台以上のシードノードを指定する。シードノードは、他のノードのステータスに関する情報が集まるノードであり、他のノードのステータスを取得するためのハブノードでもある。シードノードが存在しないと初期のクラスター形成ができない。シードノードの一時的な不在でも致命的にはならないが、不在の状態でクラスタ―のメンテナンスは出来ない。事実上のレポジトリノードの役割を果たしているとみたほうがいい。商用環境の実装時には、冗長性を考慮するべきである。
-
- listen_address
-
- クラスタ―内で他のノードと通信を行うために使用するIPアドレス
-
- auto_bootstrap
-
- falseにする。デフォルトでは、trueになっている。
-
- endpoint_snitch
-
- GossipingPropertyFileSnitch。実稼働環境にはこのスニッチを推奨。/etc/scylla/cassandra-rackdc.propertiesファイルに定義されているデータセンターとラック配置の情報を参照する。
-
- rpc_address
- クライアント接続のためのIPアドレス
在各个服务器上进行配置。笔者选择了以下这种组合。
-
- 10.0.0.6(seed)
-
- 10.0.0.11
- 10.0.0.5(seed)
10.0.0.6(种子)的配置设置
cluster_name: 'Scylla_cluster_demo'
seeds: "10.0.0.6,10.0.0.5 "
endpoint_snitch: GossipingPropertyFileSnitch
listen_address: 10.0.0.6
rpc_address: 10.0.0.6
/etc/scylla/cassandra-rackdc.properties
dc=DC1
rack=RAC1
prefer_local=true
10.0.0.11的配置
cluster_name: 'Scylla_cluster_demo'
seeds: "10.0.0.6,10.0.0.5"
endpoint_snitch: GossipingPropertyFileSnitch
listen_address: 10.0.0.11
rpc_address: 10.0.0.11
/etc/scylla/cassandra-rackdc.properties
dc=DC1
rack=RAC1
prefer_local=true
10.0.0.5的设置
cluster_name: 'Scylla_cluster_demo'
seeds: "10.0.0.6,10.0.0.5"
endpoint_snitch: GossipingPropertyFileSnitch
listen_address: 10.0.0.5
rpc_address: 10.0.0.5
/etc/scylla/cassandra-rackdc.properties
dc=DC1
rack=RAC1
prefer_local=true
启动ScyllaDB集群
请在每个服务器上停止ScyllaDB服务。在安装软件包时,应该已经启动了进程。
$ sudo systemctl stop scylla-server
$ sudo systemctl status scylla-server
在各个服务器上删除初始数据。
$ sudo rm -rf /var/lib/scylla/data/system/*
首先启动各个种子节点。在集群的初始形成阶段,首先启动的节点将成为环的起点。
$ sudo systemctl start scylla-server
$ sudo systemctl status scylla-server
我要检查集群的状态。应该有两个节点正在运行。
$ nodetool status
Datacenter: DC1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 10.0.0.5 811.88 KB 256 ? 2713d751-7592-441d-b13c-616bd9c263d9 RAC1
UN 10.0.0.6 786.95 KB 256 ? 4e0d3ebc-43cc-489b-bb24-1cf17252e5bf RAC1
确认种子节点启动后,启动工作节点(10.0.0.11)。
$ sudo systemctl start scylla-server
$ sudo systemctl status scylla-server
我要检查集群的状态。
$ nodetool status
Datacenter: DC1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 10.0.0.5 811.88 KB 256 ? 2713d751-7592-441d-b13c-616bd9c263d9 RAC1
UN 10.0.0.6 786.95 KB 256 ? 4e0d3ebc-43cc-489b-bb24-1cf17252e5bf RAC1
UJ 10.0.0.11 ? 256 ? aa4cbe9f-cf79-415e-9e13-3ebeeb30f889 RAC1
连接到ScyllaDB。
使用CQL(Cassandra查询语言)进行连接。
$ cqlsh [IP Address]
Connected to at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.0.8 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh>
cqlsh> help
Documented shell commands:
===========================
CAPTURE CLS COPY DESCRIBE EXPAND LOGIN SERIAL SOURCE UNICODE
CLEAR CONSISTENCY DESC EXIT HELP PAGING SHOW TRACING
CQL help topics:
================
AGGREGATES CREATE_KEYSPACE DROP_TRIGGER TEXT
ALTER_KEYSPACE CREATE_MATERIALIZED_VIEW DROP_TYPE TIME
ALTER_MATERIALIZED_VIEW CREATE_ROLE DROP_USER TIMESTAMP
ALTER_TABLE CREATE_TABLE FUNCTIONS TRUNCATE
ALTER_TYPE CREATE_TRIGGER GRANT TYPES
ALTER_USER CREATE_TYPE INSERT UPDATE
APPLY CREATE_USER INSERT_JSON USE
ASCII DATE INT UUID
BATCH DELETE JSON
BEGIN DROP_AGGREGATE KEYWORDS
BLOB DROP_COLUMNFAMILY LIST_PERMISSIONS
BOOLEAN DROP_FUNCTION LIST_ROLES
COUNTER DROP_INDEX LIST_USERS
CREATE_AGGREGATE DROP_KEYSPACE PERMISSIONS
CREATE_COLUMNFAMILY DROP_MATERIALIZED_VIEW REVOKE
CREATE_FUNCTION DROP_ROLE SELECT
CREATE_INDEX DROP_TABLE SELECT_JSON
cqlsh> exit;
如果要尝试CQL,请参考以下链接:
http://cassandra.apache.org/doc/latest/cql/index.html
总结
ScyllaDB的多节点集群建设步骤与Apache Cassandra相同,除了ScyllaDB设置(scylla_setup)外。作者注意到ScyllaDB的“先扩展”架构能够消除在集群构建和运营中的节点数量问题。能够建设多节点集群意味着这种体验即将到来。