IQ群集搭建

举报
LD的SQL路 发表于 2021/12/30 13:48:47 2021/12/30
【摘要】 环境要求   IQ 15.3 Multiplex支持的操作系统包括:IBM AIX、HP-IA、Linux、Sun Solaris和windows等平台。具体的版本和补丁要求这里就不说了,参见sybase官方网站或者本人的博文"IQ 15 官方资源汇集(2)"   这个例子是两个运行Red Hat Linux的虚拟机构成的集群(虚拟机建立共享虚拟盘),IQ采用的是15.3企业版。   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 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。