0%

SequoiaDB使用shell来创建集群并进行部署并创建实例

安装SequoiaDB

Snipaste_2020-11-26_14-09-34

  • 先创建三台虚拟机,然后将ip配置为192.168.xx.11-13,然后配置hostname和hosts
1
2
3
4
5
6
7
hostname sdb1
hostname sdb2
hostname sdb3
# 将下面的内容追加到/etc/hosts中
192.168.xx.11 sdb1
192.168.xx.12 sdb2
192.168.xx.13 sdb3
  • 关闭掉三台机子的防火墙,把开机自启动防火墙设置成禁止
1
2
systemctl stop firewalld.service
systemctl disable firewalld.service
  • 安装SequoiaDB
1
2
3
4
tar -zxvf sequoiadb-5.0.1-linux_x86_64.tar.gz
cd sequoiadb-5.0.1
# --mode表示安装时采用的模式,text表示使用shell交互模式,--SMS表示,最后的true表示启动SequoiaSAC
./sequoiadb-5.0.1-linux_x86_64-installer.run --mode text --SMS true
  • 在安装完之后,就可以通过图形化界面或者shell来创建集群了。

使用shell创建集群

  • 创建临时的协调节点
1
2
3
# 使用集群管理对象来创建临时的协调节点
var oma = new Oma("localhost", 11790)
oma.createCoord(18900, "/opt/sequoiadb/database/tmp/coord/18900")
  • 启动临时协调节点
1
oma.startNode(18900)
  • 连接临时协调节点
1
var db = new Sdb("localhost", 18900)
  • 创建编目节点组
1
db.createCataRG("sdb1", 11800, "/opt/sequoiadb/database/catalog/11800")
  • 获取编目节点组的句柄,用于创建其他编目节点
1
2
3
4
5
var rg = db.getRG(1)
var node = rg.createNode("sdb2", 11800, "/opt/sequoiadb/database/catalog/11800")
node.start()
var node = rg.createNode("sdb3", 11800, "/opt/sequoiadb/database/catalog/11800")
node.start()
  • 使用临时协调节点创建数据节点组group1,并创建数据节点
1
2
3
4
5
6
var rg = db.createRG("group1")
# 在数据组group1中创建三个数据节点
rg.createNode("sdb1", 11820, "/opt/sequoiadb/database/data/11820")
rg.createNode("sdb2", 11820, "/opt/sequoiadb/database/data/11820")
rg.createNode("sdb3", 11820, "/opt/sequoiadb/database/data/11820")
rg.start()
  • 再使用临时协调节点创建数据节点组group2,并创建数据节点
1
2
3
4
5
6
var rg = db.createRG("group2")
# 在数据组group2中创建三个数据节点
rg.createNode("sdb1", 11830, "/opt/sequoiadb/database/data/11830")
rg.createNode("sdb2", 11830, "/opt/sequoiadb/database/data/11830")
rg.createNode("sdb3", 11830, "/opt/sequoiadb/database/data/11830")
rg.start()
  • 这样就创建了一个两分区三副本的一个数据集群

  • 创建协调节点组并启动,然后删除之前的临时协调节点

1
2
3
4
5
6
7
8
9
10
# 创建协调节点组并启动
var rg = db.createCoordRG()
rg = db.getRG(2)
rg.createNode("sdb1", 11810, "/opt/sequoiadb/database/coord/11810")
rg.createNode("sdb2", 11810, "/opt/sequoiadb/database/coord/11810")
rg.createNode("sdb3", 11810, "/opt/sequoiadb/database/coord/11810")
rg.start()
# 删除之前的临时协调节点
oma.stopNode(18900)
oma.removeCoord(18900)
  • 这样,一个集群就创建好了
1
2
3
4
5
6
7
8
SPARK_MASTER_PORT="7077"
SPARK_MASTER_WEBUI_PORT="8080"
SPARK_MASTER_IP="sdb1"
SPARK_WORKER_INSTANCES="1"
MASTER="spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}"
SPARK_WORKER_MEMORY="1g"
SPARK_WORKER_CORES=1
export JAVA_HOME="/root/jdk1.8.0_202"

创建SparkSql实例

JDK配置

  • 首先,为三台虚拟机sdb1、sdb2、sdb3解压JDK压缩包,并配置Java环境变量
1
2
3
4
5
6
7
8
tar -zxvf ./jdk-8u202-linux-x64.tar.gz
# 在/etc/profile的最后面添加
export JAVA_HOME=[jdk目录]
export PATH=$JAVA_HOME/bin:$PATH
# 然后重新进入用户,刷新环境变量
su - root
# 使用以下语句来验证配置是否正确
java -version
  • 为三台虚拟机配置ssh,以便虚拟机之间互相连接时不用验证身份
1
2
3
4
# 生成ssh密钥,密钥将会在~/.ssh/id_rsa.pub生成
ssh-keygen
# 将生成的密钥拷贝到ssh连接认证密钥文件中(~/.ssh/authorized_keys)
ssh-copy-id -i ~/.ssh/id_rsa.pub root@localhost
  • 然后在其余两台虚拟机也执行以上两个操作,然后将sdb2和sdb3的密钥拷贝到sdb1的authorized_keys中,再将sdb1的authorized_keys复制到sdb2和sdb3中
1
2
scp ~/.ssh/authorized_keys root@sdb2:~/.ssh/
scp ~/.ssh/authorized_keys root@sdb3:~/.ssh/

Spark配置

  • 在三台虚拟机中安装sparksql,并修改sparksql的环境配置
1
2
3
4
5
6
7
8
9
10
11
12
13
tar -zxvf spark-2.4.7-bin-hadoop2.7.tgz
cd spark-2.4.7-bin-hadoop2.7/conf
cp spark-env.sh.template spark-env.sh
vi spark-env.sh
# 在spark-env.sh文件中添加以下语句
SPARK_MASTER_PORT="7077" # spark实例的端口
SPARK_MASTER_WEBUI_PORT="8080" # spark的webui端口
SPARK_MASTER_IP="sdb1" # spark的主宿主ip,这里可以指定宿主名
SPARK_WORKER_INSTANCES="1" # 指定spark的worker实例个数
MASTER="spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}" # spark的连接url
SPARK_WORKER_MEMORY="1g" # worker的内存容量
SPARK_WORKER_CORES=1 # worker的核数
export JAVA_HOME="/root/jdk1.8.0_202" # 指定JDK目录
  • 再将spark-env.sh文件复制到sdb2和sdb3
1
2
scp spark-env.sh sdb2:/root/spark-2.4.7-bin-hadoop2.7/conf/
scp spark-env.sh sdb3:/root/spark-2.4.7-bin-hadoop2.7/conf/
  • 修改spark的slaves,指定集群列表
1
2
3
4
5
6
cp slaves.template slaves
vi slaves
# 在slaves文件中添加以下语句
sdb1
sdb2
sdb3
  • 再将slaves文件复制到sdb2和sdb3
1
2
scp ./slaves sdb2:/root/spark-2.4.7-bin-hadoop2.7/conf/
scp ./slaves sdb3:/root/spark-2.4.7-bin-hadoop2.7/conf/
  • 将sequoiadb的驱动jar包复制到spark的jars目录中
1
2
3
# 在spark的目录下执行以下语句
cp /opt/sequoiadb/java/sequoiadb-driver-5.0.1.jar jars/
cp /opt/sequoiadb/spark/spark-sequoiadb_2.11-5.0.1.jar jars/

Spark运行

  • 在三台虚拟机中启动sparksql
1
2
3
sbin/start-all.sh
# 在sdb1运行jps命令可以看到sdb1既有一个主节点,又有一个工作节点,而在sdb2和sdb3中没有主节点
jps
  • 启动Thrift Server服务,使spark可以兼容HiveServer2(接口和协议),这样我们就可以使用hive的beeline访问Spark Thrift Server执行相关语句
1
2
3
sbin/start-thriftserver.sh --master spark://sdb1:7077
# 使用beeline连接Thrift Server服务,在用户名密码上直接回车
bin/beeline

Snipaste_2020-11-27_00-02-10

部署集合空间

  • 使用巨杉数据库引擎的集合空间可以很容易地在不同的宿主之间操作同一个spark实例,具体步骤:
  • 在sdb2中进入sequoiadb的shell环境
1
2
su - sdbadmin
sdb
  • 进入shell环境后,执行下面语句
1
2
3
4
//创建一个Sdb实例,用于连接SequoiaDB
db = new Sdb(0)
//在SequoiaDB中创建集合空间foo,并在空间中创建集合bar
db.createCS("foo").createCL("bar")
  • 在sdb1的beeline中创建数据表,并指定该表的宿主、集合空间、集合
1
2
/*using表示使用巨杉数据库引擎*/
create table t1 (id int, name string) using com.sequoiadb.spark options (host "sdb1:11810, sdb2:11810, sdb3:11810", collectionspace "foo", collection "bar")
  • 然后在sdb2中往bar中插入数据
1
db.foo.bar.insert({id:1, name:"sequoiadb"})
  • 插入后可以在sdb1中看到这条数据
1
select * from t1

Snipaste_2020-11-27_00-13-45

  • 同样,在sdb1中插入数据,在sdb2中也可以查看到,这个就不演示了

创建sequoiasql-mysql实例

  • 首先,安装sequoiasql-mysql的服务器
1
2
cd sequoiadb-5.0.1
./sequoiasql-mysql-5.0.1-linux_x86_64-installer.run --mode text
  • 进入sdbadmin角色,再cd到/opt/sequoiasql/mysql/目录里
1
2
su - sdbadmin
cd /opt/sequoiasql/mysql/
  • 使用巨杉数据库提供的sdb_sql_ctl工具来部署mysql实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 这里默认端口是3306,可以使用-p来指定端口
# bin/sdb_sql_ctl addinst [实例名] -D [实例目录]
bin/sdb_sql_ctl addinst mytest -D /opt/sequoiasql/mysql/database/3306
# 查看实例列表
bin/sdb_sql_ctl listinst
# 可以使用status来查看mytest实例的状态
bin/sdb_sql_ctl status mytest
# 停止实例
bin/sdb_sql_ctl stop [实例名]
# 启动实例
bin/sdb_sql_ctl start [实例名]
# 可以使用delinst来删除实例
# bin/sdb_sql_ctl delinst [实例名]
bin/sdb_sql_ctl delinst mytest
  • 启动完实例后,这个mysql实例已经在巨杉系统架构中进行管理了,进入mysql的shell环境
1
mysql -uroot -h 127.0.0.1
  • 这时,创建出来的database和table都可以在sequoiadb的sdb工具查询到

MySql

SequoiaDB

创建sequoiasql-postgresql实例

  • 首先,安装sequoiasql-posgresql的服务器
1
2
cd sequoiadb-5.0.1
./sequoiasql-postgresql-5.0.1-x86_64-installer.run --mode text
  • 进入sdbadmin角色,再cd到/opt/sequoiasql/postgresql/目录里,创建一个database目录
1
2
3
su - sdbadmin
cd /opt/sequoiasql/postgresql/
mkdir database
  • 使用巨杉数据库提供的sdb_sql_ctl工具来部署postgresql实例,这个和mysql一样
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 这里默认端口是5432,可以使用-p来指定端口
# bin/sdb_sql_ctl addinst [实例名] -D [实例目录]
bin/sdb_sql_ctl addinst mytest -D /opt/sequoiasql/mysql/database/3306
# 查看实例列表
bin/sdb_sql_ctl listinst
# 可以使用status来查看mytest实例的状态
bin/sdb_sql_ctl status mytest
# 停止实例
bin/sdb_sql_ctl stop [实例名]
# 启动实例
bin/sdb_sql_ctl start [实例名]
# 可以使用delinst来删除实例
# bin/sdb_sql_ctl delinst [实例名]
bin/sdb_sql_ctl delinst mytest
  • 使用bin/createdb [数据库名称]来创建pgsql的数据库,然后使用bin/psql进入pgsql的shell环境
1
2
bin/createdb foo
bin/psql foo
  • 加载 SequoiaDB 连接驱动
1
foo=# create extension sdb_fdw;
  • 在pgsql中创建巨杉服务器,设置一些配置信息
1
2
# address:表示该服务器对应的宿主,service:服务端口,transaction:是否开启事务,还有一些其他的配置项,可以到官网查看
create server sdb_server foreign data wrapper sdb_fdw options(address 'localhost', service '11810', transaction 'on',);
  • 创建外表
1
2
# 指定服务器,并设置集合空间和集合
create foreign table test(name text, id numeric) server sdb_server options(collectionspace 'foo', collection 'bar', decimal 'on');
  • 现在,这个test表在sdb1中的psql中可以访问到,在sdb2中的sdb中也可以访问到

psql

sdb

同步MySql

  • 由于在sdb1使用mysql命令创建的数据表在sdb2中使用mysql命令访问不到,所以需要一个同步mysql命令的一个过程。即现在只做到sequoiadb层面的同步,但并没有做到在mysql层面上的同步,这里就需要使用一个meta_sync的工具

Snipaste_2020-11-27_10-22-11

  • 首先切换到sdbadmin用户,在三台虚拟机登录mysql的shell,然后执行以下语句:
1
2
CREATE USER 'sdbadmin'@'%' IDENTIFIED BY  'sdbadmin';
GRANT all on *.* TO 'sdbadmin'@'%' with grant option;
  • 创建存放同步日志auditlog目录,并修改实例的配置文件auto.cnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mkdir database/3306/auditlog
vi database/3306/auto.cnf
# 在[mysqld]部分添加以下内容:
# 加载审计插件
plugin-load=server_audit=server_audit.so
# 记录审计日志的操作类型,当用于元数据同步时仅记录 DDL 和 DCL 即可
server_audit_events=QUERY_DDL,QUERY_DCL
# 开启审计
server_audit_logging=ON
# 审计日志路径及文件名
server_audit_file_path=/opt/sequoiasql/mysql/database/auditlog/server_audit.log
# 强制日志文件轮转,保持配置为 OFF 即可
server_audit_file_rotate_now=OFF
# 审计日志文件大小阈值,默认 10MB,超过该大小时将进行轮转,单位为byte
server_audit_file_rotate_size=10485760
# 审计日志保留个数,超过后会丢弃最旧的
server_audit_file_rotations=999
# 输出类型为文件
server_audit_output_type=file
# 限制每行查询日志的大小为100kb,若表比较复杂,对应的操作语句比较长,建议增大该值
server_audit_query_log_limit=102400
  • 切换至root用户,把server_audit.so复制到plugin目录下,修改权限使得sdbadmin用户可以运行它
1
2
cp /opt/sequoiasql/mysql/tools/lib/release/server_audit.so /opt/sequoiasql/mysql/lib/plugin/
chmod a+x /opt/sequoiasql/mysql/lib/plugin/server_audit.so
  • 切换至sdbadmin用户,重启 MySQL 实例
1
sdb_sql_ctl restart myinst
  • 在tools/metaSync目录中,有两个文件,一个是config.sample,另一个是log.config.sample,将它们拷贝到当前目录,并改名为configlog.config,注意这两个文件的配置需要根据情况进行修改
  • 在三台虚拟机中启动工具
1
python /opt/sequoiasql/mysql/tools/metaSync/meta_sync.py &
  • 完成环境配置后,可通过在各实例进行少量 DDL 操作,进行简单的同步验证

卸载

卸载mysql服务

  • 进入sdbadmin用户,停止mysql实例
1
2
su - sdbadmin
bin/sdb_sql_ctl stop mytest
  • 停止实例后,查看有没有关于mysql的进程,有的话就杀死进程
1
2
ps -ef |grep mysql
kill -9 [pid]
  • 杀死同步工具meta_sync的进程
1
2
ps -ef |grep python
kill -9 [pid]
  • 进入root用户,执行卸载程序
1
2
3
su - root
cd /opt/sequoiasql/mysql/
./uninstall
  • 如果不想保存原数据的话,可以把mysql文件给删除
1
2
cd /opt/sequoiasql/
rm -rf mysql/

卸载postgresql服务

  • 进入sdbadmin用户,停止posgresql实例
1
2
su - sdbadmin
bin/sdb_sql_ctl stop mytest
  • 停止实例后,进入root用户,执行卸载程序
1
2
3
su - root
cd /opt/sequoiasql/postgresql/
./uninstall
  • 如果不想保存原数据的话,可以把postgresql文件给删除
1
2
cd /opt/sequoiasql/
rm -rf postgresql/
  • 这样就把pgsql完全卸载了。

卸载sequoiadb服务

  • 进入sdbadmin用户,停止sequoiadb所有的节点
1
sdbstop -t all
  • 查看关于sdb的进程,如果有sdbcm进程,就将其杀死
1
2
ps -ef |grep sdb
sdbcmtop
  • 查看sdbadmin是否有运行与sdb相关的进程,有的话就将其杀死
1
ps -ef |grep sdbadmin
  • 切换到root用户,执行卸载程序
1
2
cd /opt/sequoiadb/
./uninstall --mode text
  • 最后将sequoiadb目录和sequoiasql目录删除
1
2
rm -rf /opt/sequoiadb
rm -rf /opt/sequoiasql
  • 这样就卸载完毕。
-------------本文结束感谢您的阅读-------------