IQ群集搭建
环境要求
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
-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
- 点赞
- 收藏
- 关注作者
评论(0)