IQ群集搭建

网友投稿 751 2022-05-29

环境要求

IQ 15.3 Multiplex支持的操作系统包括:IBM AIX、HP-IA、Linux、Sun Solaris和windows等平台。具体的版本和补丁要求这里就不说了,参见sybase官方网站或者本人的博文"IQ 15 官方资源汇集(2)"

这个例子是两个运行Red Hat Linux的虚拟机构成的集群(虚拟机建立共享虚拟盘),IQ采用的是15.3企业版。

IQ 15.3集群除具有两个集群之间的通讯机制:一个是INC(用于传递节点心跳信息和全局事物协调管理的信息),另一个是MIPC(用于DQP处理)。INC使用公有网络(public netework);MIPC可以与INC共用网络,也可以使用单独的私有网络(private network)。由于进行DQP处理时需要交换的信息相对较多、较大,建议MIPC使用单独的私有网络。

两个节点的环境如下:

(1) node1和node2两个节点分别具有两个虚拟网卡,地址如下:

node1: 192.168.2.191      #public ip

node1_priv 172.16.1.101   #private ip

node2: 192.168.2.193      #public ip

node2_priv 172.16.1.103   #private ip

(2) node1和node2两个节点上要安装好IQ 15.3企业版软件,node1作为协调节点。

(3) 用于IQ_SYSTEM_MAIN Store的共享设备:

/dev/sdc1 2G, 映射为/dev/raw/raw21

(4) 在本示例中,IQ_SYSTEM_TEMP Store使用本地文件作为存储,不使用裸设备

(5) 用于IQ_SHARED_TEMP Store的裸设备的共享设备(IQ 15.3新增的,用于DQP处理):

/dev/sdd1 4G, 映射为/dev/raw/raw31

(6) 用于存放用户数据的user main dbspace的共享设备:

/dev/sdd3 2G, 映射为/dev/raw/raw41

注意:IQ Multiplex安装前对于存储的规划是最重要的一项准备工作,IQ_SYSTEM_MAIN、IQ_SHARED_TEMP和user main 等dbsapce中的设备必须是各节点可以读写的裸设备,并且裸设备的设备名要完全相同。IQ Temp Store中的设备是节点自己本地存储上的裸设备或文件系统中的文件。

2. 创建Simplex IQ Server

IQ 15.3 Mulitplex创建比较有意思,首先要创建一个单IQ Server(又叫做Simplex),然后把它转换为Multiplex,再往其中增加其它节点。

创建Simplex IQ Server的步骤:

(1) 创建符号链接

A.在node1和node2上用root用户分别执行(假设IQ Catalog DB在/sybiq/mp2目录下):

ln -s /dev/raw/raw21 MP2_SYS_MAIN_FILE01.iq

ln -s /dev/raw/raw31 MP2_SHARED_TEMP_FILE01.iq

ln -s /dev/raw/raw41 MP2_USER_MAIN_FILE01.iq

B.在node1上用root用户执行

chmod 777 /dev/rawctl #这一步是为sybiq用户授权以便能存储设备。

C.在node2上用root用户执行

chmod 777 /dev/rawctl #这一步是为sybiq用户授权以便能存储设备

(2) 在node1上启动iq utility server创建数据库

start_iq -n utility_srv

(3) 编写创建数据的脚本createdb.sql

CREATE DATABASE '/sybiqdb/mp2/mp2.db'

LOG ON 'mp2.log'

CASE RESPECT

ACCENT IGNORE

PAGE SIZE 4096

COLLATION '936ZHO'

BLANK PADDING ON

JCONNECT ON

IQ PATH '/sybiqdb/mp2/MP2_SYS_MAIN_FILE01.iq' --IQ_SYSTEM_MAIN

TEMPORARY PATH '/sybiqdb/mp2/MP2_SYS_TEMP_FILE01.iqtmp'  --使用文件方式。

TEMPORARY SIZE 2048  --使用文件方式必须指定尺寸。

MESSAGE PATH 'mp2.iqmsg'

IQ PAGE SIZE 131072;

(4) 执行createdb.sql脚本,创建mp2数据库

dbisql -c "uid=DBA;pwd=sql;dbn=utility_db;eng=utility_srv" -nogui createdb.sql

(5) 编辑params.cfg参数文件

-cl  128m

-ch  256m

-gc  20

-gd  dba

-gk  dba

-gl  all

IQ群集搭建

-gm  20

-ti  4400

-tl  300

-iqmc 256

-iqtc 256

-iqmsgsz 64

-iqmsgnum 4

(6)启动创建好的mp2库

以sybiq用户登录操作系统,然后执行:

cd /sybiqdb/mp2

start_iq @params.cfg -n mp2node_c -x "tcpip{host=node1;port=4888}" mp2.db

3. 创建IQ Multiplex

在创建了IQ Simplex Server之后,就可以使用相应的命令把其转换为IQ Multiplex。下面是具体的步骤:

(1) 确认node1机器上的以如下方式启动mp2数据库

start_iq @params.cfg -n mp2node_c -x "tcpip{host=node1;port=4888}" mp2.db

(2) 使用dbisql用DBA用户连接到mp2node_c上,执行如下命令

CREATE MULTIPLEX SERVER mp2node_w1 DATABASE '/sybiqdb/mp2/mp2.db' HOST 'node2' PORT 4888 ROLE WRITER STATUS INCLUDED

注意:当执行完上面的语句后,node1机器上的mp2node_c iq server会自动shutdown

(3) 启动node1机器上的协调节点mp2node_c

start_iq @params.cfg -n mp2node_c -x "tcpip{host=node1;port=4888}" mp2.db

(4) 在node2机器上将node1上的mp2node_c iq server的Catalog DB备份到node2的相应目录中,命令如下:

dbbackup -y -d -c "uid=DBA;pwd=sql;links=tcpip;eng=mp2node_c" /sybiqdb/mp2

(5) 在node2机器的相应目录下,删除.log文件(如果有的话)

(6) 在node2机器的应目录下,重新生成log文件

cd /sybiqdb/mp2

dblog -r -t mp2.log mp2.db

(7) 在node2机器上的/sybiqdb/mp2目录下创建params.cfg参数文件

-cl  128m

-ch  256m

-gc  20

-gd  dba

-gk  dba

-gl  all

-gm  20

-ti  4400

-tl  300

-iqmc 256

-iqtc 256

-iqmsgsz 64

-iqmsgnum 4

(8) 启动node2机器上的mp2node_w1写iq server

start_iq -STARTDIR /sybiqdb/mp2/ @params.cfg -n mp2node_w1 -x "tcpip{host=node2;port=4888}" mp2.db

(9) 连接到node2机器上的写节点mp2node_w1,执行如下命令为IQ_SYSTEM_TEMP临时存储空间增加db files(必须执行这一步,否则由于mp2node_w1没有IQ_SYSTEM_TEMP而不能进行操作!)

ALTER DBSPACE IQ_SYSTEM_TEMP ADD FILE IQ_SYSTEM_TEMP_FILE01 '/sybiqdb/mp2/MP2_SYS_TEMP_W1_FILE01.iqtmp' size 2048

(10) 连接到IQ Multiplex的协调节点(node1机器上的mp2node_c),执行如下存储过程校验集群配置:

sp_iqmpxvalidate

如果返回“No errors detected”,表式集群配置正常。

到此,一个两节点的IQ 15.3 Multiplex创建完成!

4. 设置IQ Multiplex

在进行了前3步骤之后,我们已经创建了一个两节点的IQ 15.3 集群。需要注意的是,从IQ 15开始,不建议在系统的IQ_SYSTEM_MAIN创建用户对象。用户应该创建新的dbspaces来存放用户数据。

接下来我们将进行一些必要的设置工作。

(1) 创建存放用户数据的dbspace

使用dbisql连接到mp2node_c节点(下面若无特殊说明都连接到该节点),执行下面的命令:

CREATE DBSPACE MP2_USER_MAIN USING FILE MP2_USER_MAIN_FILE01 '/sybiqdb/mp2/MP2_USER_MAIN_FILE01.iq'

成功执行完上面的命令后,执行sp_iqdbspace,可以看到新增加的dbspace信息。此外,登录mp2node_w1写节点,执行sp_iqdbspace同样可以看到新增加的dbspace信息。

(2) 设置IQ_SYSTEM_MAIN的main reserve空间大小

SYBASE建议为IQ_SYSTEM_MAIN尺寸的20%,最少不能低于200M

SET OPTION PUBLIC.MAIN_RESERVED_DBSPACE_MB = 200 --单位为M

(3) 回收用户在IQ_SYSTEM_MAIN上创建数据库对象(表和索引等)的权限

REVOKE CREATE ON IQ_SYSTEM_MAIN FROM PUBLIC

(4) 创建用户

sp_iqaddlogin mp2user,mpuserpwd

grant resource to mp2user

grant readclientfile TO mp2user --支持load table from client

GRANT CREATE ON MP2_USER_MAIN TO mp2user --允许用户在MP2_USER_MAIN上创建用户对象

SET OPTION mp2user.DEFAULT_DBSPACE='MP2_USER_MAIN' --设置用户的缺省dbspace

(5) 设置数据库选项(一些建议的选项,在实践中应当根据需要设定)

set option public.NOTIFY_MODULUS=2000000;

set option public.force_no_scroll_cursors='on';

set option public.query_temp_space_limit=0; --IQ 15已经是缺省了

set option public.append_load = 'off';

set option public.minimize_storage='on';

set option public.Query_Plan='OFF';

set option Public.Query_Detail ='OFF';

set option public.ASE_BINARY_DISPLAY='Off';

set option public.TEMP_SPACE_LIMIT_CHECK='ON';  --IQ 15已经是缺省了

SET OPTION PUBLIC.ALLOW_READ_CLIENT_FILE='ON'; --允许load table from client特性

set option public.string_rtruncation='off';  --字符串截断时不抛出错误。12.7的缺省值为OFF,15的缺省值是ON

(6) 用新建立的用户mp2user登录创建表

使用dbisql工具连接到mp2node_w1上,创建测试表:

create table test1(id unsigned int,name char(8));

insert into test1 values(1,'tiger123');

commit

使用dbisql工具以mp2user用户连接到mp2node_c上,查询表

select * from test1

--执行上面的查询会看到从写节点插入的数据

5. 为支持DQP进行设置

IQ 15.3企业版从功能上说缺省时打开DQP(分布式查询处理)的,但是需要进行相应的设置才能正常使用。

(1)设置共享的IQ_SHARED_TEMP dbspace

在创建IQ 15.3数据库后,就具有IQ_SHARED_TEMP dbsapce,不过这个dbspace没有任何dbfile。

为了支持DQP,我们需要往这个dbspace中增加dbfile,命令如下:

ALTER DBSPACE IQ_SHARED_TEMP ADD FILE IQ_SHARED_TEMP_FILE01 '/home/sybiq15/sybiqdb/mp2/MP2_SHARED_TEMP_FILE01.iq'

在增加了dbfile之后,被增加的dbfile是只读的,所以我们还需要把其改为可读写的(这一步很重要,否则DQP功能还是不能使用!),命令如下:

alter dbspace IQ_SHARED_TEMP alter file IQ_SHARED_TEMP_FILE01 readwrite

(2)为了性能,修改MIPC让其使用private network(可选)

执行如下命令让Mulitplex每个节点使用private network进行DQP通讯:

ALTER MULTIPLEX SERVER mp2node_c HOST 'node1' PORT 4888 PRIVATE HOST 'node1_priv' PORT 6000

ALTER MULTIPLEX SERVER mp2node_w1 HOST 'node2' PORT 4888 PRIVATE HOST 'node2_priv' PORT 6000

数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于 Kubernetes中Volume的一些笔记(一)
下一篇:再见 Docker !分分钟转型 Containerd
相关文章