CentOS部署ScyllaDB 3.3集群

ScyllaDB 是用 C++(Seastar 库:支持高并发和低延迟的异步编程高性能库) 重写的 Cassandra,每节点每秒处理 100 万 TPS,号称是世界上最快的 NoSQL 列存储数据库。ScyllaDB 完全兼容 Apache Cassandra,拥有比 Cassandra 多 10x 倍的吞吐量,降低了延迟。ScyllaDB 在垃圾收集或者 Compaction 的时候不需要暂停,在常规生产负载的时候可以添加和删除节点。本文基于CentOS7.6,部署ScyllaDB 3.3,详细过程如下:

一、准备工作

1、准备机器

准备2台机器,安装CentOS7.6。ip计划如下:

192.168.2.15  scylla-node1

192.168.2.16  scylla-node2

2、关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

3、修改主机名

#设置主机名
hostnamectl set-hostname scylla-node1

 通过hostname命令查看主机名,修改完后重启。

4、配置IP映射

vim /etc/hosts

最后增加以下内容:

192.168.2.15  scylla-node1

192.168.2.16  scylla-node2

5、创建用户

在root用户下添加scylla用户:

#添加组
groupadd scylla
#添加用户
adduser scylla -g scylla
#设置密码
passwd scylla

给scylla用户赋予权限:

#编辑/etc/sudoers
vi /etc/sudoers
#在root    ALL=(ALL)       ALL下增加scylla配置,最终如下
root    ALL=(ALL)       ALL
scylla      ALL=(ALL)       ALL

二、部署ScyllaDB

1、安装epel-release扩展包

sudo yum install epel-release

2、下载scylla的repo

sudo curl -o /etc/yum.repos.d/scylla.repo -L http://repositories.scylladb.com/scylla/repo/uuidValue/centos/scylladb-3.3.repo

3、安装scylla

sudo yum install scylla
已安装:
  scylla.x86_64 0:3.3.0-0.20200319.7ae2cdf46c7                                                                        

作为依赖被安装:
  PyYAML.x86_64 0:3.10-11.el7                                avahi-libs.x86_64 0:0.6.31-19.el7                       
  copy-jdk-configs.noarch 0:3.3-10.el7_5                     cups-libs.x86_64 1:1.6.3-40.el7                         
  java-1.8.0-openjdk-headless.x86_64 1:1.8.0.242.b08-0.el7_7 javapackages-tools.noarch 0:3.4.1-11.el7                
  libjpeg-turbo.x86_64 0:1.2.90-8.el7                        libreport-filesystem.x86_64 0:2.1.11-43.el7.centos      
  libxslt.x86_64 0:1.1.28-5.el7                              libyaml.x86_64 0:0.1.4-11.el7_0                         
  lksctp-tools.x86_64 0:1.0.17-2.el7                         mdadm.x86_64 0:4.1-1.el7                                
  pcsc-lite-libs.x86_64 0:1.8.8-8.el7                        python-javapackages.noarch 0:3.4.1-11.el7               
  python-lxml.x86_64 0:3.2.1-4.el7                           scylla-conf.x86_64 0:3.3.0-0.20200319.7ae2cdf46c7       
  scylla-jmx.noarch 0:3.3.0-20200320.c1bd349c530             scylla-kernel-conf.x86_64 0:3.3.0-0.20200319.7ae2cdf46c7
  scylla-python3.x86_64 0:3.7.6-0.20200320.7ae2cdf46c7       scylla-server.x86_64 0:3.3.0-0.20200319.7ae2cdf46c7     
  scylla-tools.noarch 0:3.3.0-20200320.47cba912685           scylla-tools-core.noarch 0:3.3.0-20200320.47cba912685   
  tzdata-java.noarch 0:2019c-1.el7                          

完毕!

 4、配置scylla

/data目录为大容量磁盘,创建数据文件和日志文件目录:

#创建工作目录
sudo mkdir -p /data/scylla/work
#创建数据目录
sudo mkdir -p /data/scylla/data
#创建日志目录
sudo mkdir -p /data/scylla/commitlog
#给目录权限
sudo chmod 777 -R /data/scylla
#更改目录所有者
sudo chown -R scylla:scylla /data/scylla

配置scylla-node1,编辑/etc/scylla/scylla.yaml,修改内容如下:

#集群名称,同集群名称相同
cluster_name: 'SDC-Scylla-Cluster'
#工作目录
workdir: /data/scylla/work
#数据目录
data_file_directories:
   - /data/scylla/data
#日志目录
commitlog_directory: /data/scylla/commitlog
#集群种子节点ip,新加入的节点从种子节点同步数据,可为多个,中间逗号分隔
- seeds: "192.168.2.15"
#监听地址(本机ip或主机名)
listen_address: scylla-node1
#rpc地址(本机ip或0.0.0.0)
rpc_address: 0.0.0.0
#如果rpc_address设置为0.0.0.0,则放开此行注释
broadcast_rpc_address: 1.2.3.4

配置scylla-node2,编辑/etc/scylla/scylla.yaml,修改内容如下:

#集群名称,同集群名称相同
cluster_name: 'SDC-Scylla-Cluster'
#工作目录
workdir: /data/scylla/work
#数据目录
data_file_directories:
   - /data/scylla/data
#日志目录
commitlog_directory: /data/scylla/commitlog
#集群种子节点ip,新加入的节点从种子节点同步数据,可为多个,中间逗号分隔
- seeds: "192.168.2.15"
#监听地址(本机ip或主机名)
listen_address: scylla-node2
#rpc地址(本机ip或0.0.0.0)
rpc_address: 0.0.0.0
#如果rpc_address设置为0.0.0.0,则放开此行注释
broadcast_rpc_address: 1.2.3.4

完成scylla配置,根据具体情况选择yes/no:

sudo scylla_setup

 配置完成后提示如下:

ScyllaDB setup finished.
scylla_setup accepts command line arguments as well! For easily provisioning in a similar environment than this, type:

    scylla_setup --no-raid-setup --nic eth0 --no-ntp-setup \
                 --no-coredump-setup --no-sysconfig-setup --no-io-setup \
                 --no-version-check --no-node-exporter \
                 --no-cpuscaling-setup --no-fstrim-setup

5、启动ScyllaDB

#启动ScyllaDB
sudo systemctl start scylla-server

如果启动失败,通过执行sudo journalctl -xe命令根据提示排查问题。

查看集群状态:

[scylla@scylla-node1 /]$ nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address         Load       Tokens       Owns    Host ID                               Rack
UN  192.168.2.15  970.81 KB  256          ?       afcd898f-785f-491d-98d3-ea6e0a837da5  rack1
UN  192.168.2.16  432.26 KB  256          ?       ad1c07ab-4466-4db3-92d1-6e11cfa78752  rack1

Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless

三、简单使用

#连接cqlsh
[scylla@scylla-node1 /]$ cqlsh
Connected to SDC-Scylla-Cluster 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> describe keyspaces;
system_traces  system_schema  system_auth  system  system_distributed
#创建键空间
cqlsh> create keyspace demo with replication = {'class':'SimpleStrategy', 'replication_factor' : 1};
#使用Keyspace
cqlsh> use demo;
#创建表
cqlsh:demo> create table student(
   id int primary key,
   name text,
   age smallint
);
#插入数据
cqlsh:demo> insert into student(id,name,age) VALUES (1,'wangm',30);
cqlsh:demo> insert into student(id,name,age) VALUES (2,'wangj',29);
#查询所有数据
cqlsh:demo> select * from student;
 
 id | age | name
----+-----+-------
  1 |  30 | wangm
  2 |  29 | wangj
 
(2 rows)
#创建索引
cqlsh:demo> create index student_name_index on student(name);
#条件查询
cqlsh:demo> select * from student where name = 'wangm';
 
 id | age | name
----+-----+-------
  1 |  30 | wangm
 
(1 rows)
#查看表详情
cqlsh:demo> describe student;
 
CREATE TABLE demo.student (
    id int PRIMARY KEY,
    age smallint,
    name text
) WITH bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'ALL'}
    AND comment = ''
    AND compaction = {'class': 'SizeTieredCompactionStrategy'}
    AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99.0PERCENTILE';
CREATE INDEX student_name_index ON demo.student (name);

CREATE MATERIALIZED VIEW demo.student_name_index_index AS
    SELECT name, idx_token, id
    FROM demo.student
    WHERE name IS NOT NULL
    PRIMARY KEY (name, idx_token, id)
    WITH CLUSTERING ORDER BY (idx_token ASC, id ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'ALL'}
    AND comment = ''
    AND compaction = {'class': 'SizeTieredCompactionStrategy'}
    AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99.0PERCENTILE';

 

你可能感兴趣的:(NoSQL)