命令行部署#
如果您希望使用命令行的方式单独部署 OushuDB ,请按照本章节步骤部署。
OushuDB 5.0 的运行需要依赖分布式存储 Magma ,在部署 OushuDB 前,请确保 Magma 已经部署并初始化。Magma 安装部署请参考:Magma 安装。
前提#
登陆到 oushu1 节点:
ssh root@oushu1
创建 oushuhosts
文件,包含 OushuDB 集群中所有机器:
touch ~/oushuhosts
编写 oushuhosts
文件内容如下:
oushu1
oushu2
oushu3
配置yum源,安装lava命令行管理工具
# 从yum源所在机器(假设为192.168.1.10)获取repo文件
scp root@192.168.1.10:/etc/yum.repos.d/oushu.repo /etc/yum.repos.d/oushu.repo
# 追加yum源所在机器信息到/etc/hosts文件
yum clean all
yum makecache
yum install -y lava
在 oushu1 上和集群内其他节点交换公钥,以便ssh免密码登陆和分发配置文件,以密码代替*号:
lava ssh-exkeys -f ~/oushuhosts -p ********
将repo文件分发给集群内其他机器:
lava scp -f ~/oushuhosts /etc/yum.repos.d/oushu.repo =:/etc/yum.repos.d
lava ssh -f ~/oushuhosts -e "yum clean all"
lava ssh -f ~/oushuhosts -e "yum makecache"
在 oushu1 节点的系统配置文件 /etc/sysctl.conf 中追加如下内容:
kernel.shmmax = 3000000000
kernel.shmmni = 4096
kernel.shmall = 4000000000
kernel.sem = 250 512000 100 2048
kernel.sysrq = 1
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.msgmni = 2048
net.ipv4.tcp_syncookies = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 200000
net.ipv4.conf.all.arp_filter = 1
net.ipv4.ip_local_port_range = 10000 65535
net.core.netdev_max_backlog = 200000
net.netfilter.nf_conntrack_max = 524288
fs.nr_open = 3000000
kernel.threads-max = 798720
kernel.pid_max = 798720
net.core.rmem_max=2097152
net.core.wmem_max=2097152
net.core.somaxconn=4096
kernel.core_pattern=/data1/oushudb/cores/core-%e-%s-%u-%g-%p-%t
如果集群计划部署在麒麟操作系统上,需要额外追加网络配置参数:
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ipfrag_high_thresh = 41943040
net.ipv4.ipfrag_low_thresh = 40894464
net.ipv4.udp_mem = 9242685 12323580 18485370
net.ipv4.tcp_mem = 9240912 12321218 18481824
为了方便软件调试分析,我们建议允许 OushuDB 生成 core dump 文件。
创建文件 /etc/security/limits.d/oushu.conf
touch /etc/security/limits.d/oushu.conf
并向其写入内容:
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 131072
* hard nproc 131072
oushu soft core unlimited
oushu hard core unlimited
同步上述操作系统参数修改到所有节点:
lava scp -r -f ~/oushuhosts /etc/sysctl.conf =:/etc/
lava scp -r -f ~/oushuhosts /etc/security/limits.d/oushu.conf =:/etc/security/limits.d/
lava ssh -f ~/oushuhosts -e "sysctl -p"
配置 Magma 集群节点IP到集群节点的`/etc/hosts’中:
lava ssh -f ~/oushuhosts -e "echo '192.168.1.21 magma1' >>/etc/hosts"
lava ssh -f ~/oushuhosts -e "echo '192.168.1.22 magma2' >>/etc/hosts"
lava ssh -f ~/oushuhosts -e "echo '192.168.1.23 magma3' >>/etc/hosts"
如果配置 HDFS 作为存储引擎,则需要将 HDFS 集群节点 IP 添加到集群的/etc/hosts
中:
lava ssh -f ~/oushuhosts -e "echo '192.168.1.21 hdfs1' >>/etc/hosts"
lava ssh -f ~/oushuhosts -e "echo '192.168.1.22 hdfs2' >>/etc/hosts"
如果 HDFS 存储引擎配置了 Kerberos, 则需要将对应的 KDC 节点的 IP 添加到集群的 /etc/hosts
中,并安装kerberos client:
lava ssh -f ~/oushuhosts -e "echo '192.168.1.31 kdcserver' >>/etc/hosts"
lava ssh -f ~/oushuhosts "yum install -y krb5-libs krb5-workstation"
安装#
使用 yum install 的安装方式:
lava ssh -f ~/oushuhosts -e "yum install -y oushudb"
配置#
为了方便管理,为 oushu 用户创建 oushuhostfile, mhostfile 与 shostfile 以分别管理集群所有节点、 集群 main 节点和集群 segment 节点。
在 oushu1 上 /home/oushu
目录下,
创建 oushuhostfile
文件,包含集群所有节点:
touch /home/oushu/oushuhostfile
编辑oushuhostfile
文件如下:
oushu1
oushu2
oushu3
创建 mhostfile
文件,包含集群所有 main 节点:
touch /home/oushu/mhostfile
编辑mhostfile
文件如下:
oushu1
oushu2
创建 shostfile
文件,包含集群所有 segment节点:
touch /home/oushu/shostfile
编辑shostfile
文件如下:
oushu1
oushu2
oushu3
同步hostfile文件到所有节点:
lava scp -r -f ~/oushuhosts /home/oushu/* =:/home/oushu
lava ssh -f ~/oushuhosts -e "chown -R oushu:oushu /home/oushu"
修改集群内 oushu 用户环境变量:
lava ssh -f ~/oushuhosts -e "touch /home/oushu/.bashrc"
lava ssh -f ~/oushuhosts -e "echo 'source /usr/local/oushu/oushudb/oushudb_path.sh' >> /home/oushu/.bashrc"
准备数据目录#
在主节点上创建本地文件目录
在所有主节点上创建本地元数据目录(masterdd)与临时文件目录(tmp):
lava ssh -f /home/oushu/mhostfile -e "mkdir -p /data1/oushudb/masterdd"
lava ssh -f /home/oushu/mhostfile -e "mkdir -p /data1/oushudb/tmp"
可以在多个盘下创建临时文件目录提升磁盘利用率,例如:
lava ssh -f /home/oushu/mhostfile -e "mkdir -p /data1/oushudb/tmp"
lava ssh -f /home/oushu/mhostfile -e "mkdir -p /data2/oushudb/tmp"
lava ssh -f /home/oushu/mhostfile -e "mkdir -p /data3/oushudb/tmp"
修改对应文件的权限信息:
lava ssh -f /home/oushu/mhostfile -e "chown -R oushu:oushu /data1/oushudb"
在所有计算节点创建本地文件目录
在所有计算节点中创建本地元数据目录(segmentdd) 与临时文件目录(tmp):
lava ssh -f /home/oushu/shostfile -e "mkdir -p /data1/oushudb/segmentdd"
lava ssh -f /home/oushu/shostfile -e "mkdir -p /data1/oushudb/tmp"
修改对应文件夹的权限信息:
lava ssh -f /home/oushu/shostfile -e "chown -R oushu:oushu /data1/oushudb"
在所有节点上创建core dump文件路径
按照 kernel.core_pattern
的配置值进行创建 :
lava ssh -f /home/oushu/oushuhostfile -e "mkdir -p /data1/oushudb/cores"
lava ssh -f /home/oushu/oushuhostfile -e "chmod 777 /data1/oushudb/cores"
修改配置文件#
修改配置文件过程需使用 oushu 用户,在配置前 oushu 用户需要与集群中其他节点交换key,
使用 lava 工具修改集群节点上 oushu 用户密码,密码代替 * 号:
lava ssh -f ~/oushuhosts -e "echo '******' | passwd --stdin oushu"
在 oushu1 节点上, 切换 oushu 用户并与集群节点交换 key,按照提示输入相应节点的 oushu 用户密码:
su - oushu
oushudb ssh-exkeys -f ~/oushuhostfile
OushuDB 的配置文件存放于/usr/local/oushu/conf/oushudb
,配置文件模板存放于/usr/local/oushu/oushudb/conf.empty
。
进入/usr/local/oushu/conf/oushudb
cd /usr/local/oushu/conf/oushudb
1.配置oushudb-topology.yaml
oushudb-topology.yaml
描述了 OushuDB 集群的拓扑信息,其中包含所有节点信息、集群的逻辑结构、节点角色的分配情况以及虚拟集群的参数配置。
oushudb-topology.yaml
由两部分组成:描述节点信息的 nodes 段以及描述集群配置信息的 vc 段。
修改oushudb-topology.yaml
内容如下:
nodes:
- id: m[001]
addr: 192.168.1.11
label: { region: "regionA", zone: "zoneA"}
- id: m[002]
addr: 192.168.1.12
label: { region: "regionA", zone: "zoneA"}
- id: m[003]
addr: 192.168.1.13
label: { region: "regionA", zone: "zoneA"}
vc:
- name: mains
vci:
- nodes: m[001], m[002]
- name: vc_default
nsegs_per_vci: 2
hash_table_bucket_number: 8
magma_hash_table_nvseg_perseg: 8
vci:
- name: vci1
nodes: m[001-002]
- name: vc1
nsegs_per_vci: 1
hash_table_bucket_number: 8
magma_hash_table_nvseg_perseg: 8
vci:
- name: vci2
nodes: m[003]
参数项的含义如下:
nodes 参数项 |
含义 |
---|---|
id |
集群节点标识 |
addr |
节点的ip地址或者hostname |
label |
节点标签 |
vc 参数项 |
含义 |
默认值 |
最小 |
最大 |
---|---|---|---|---|
name |
vc 的名称 |
|||
vci |
一个虚拟集群实例,由 name 与 nodes 组成 |
|||
nsegs_per_vci |
vc 中每一个 vci 必须包含的节点数 |
0 |
0 |
无 |
hash_table_bucket_number |
建表时使用的桶数量 |
8 |
1 |
无 |
max_nvseg_perquery |
单次查询中使用 virtual segment 的最大数量 |
512 |
1 |
无 |
max_nvseg_perquery_perseg |
单次查询中一个 segment 包含 virtual segments 的最大数量 |
8 |
1 |
无 |
magma_hash_table_nvseg_perseg |
对于 Magma 表,单个 segment 使用的 virtual segment 数量 |
8 |
1 |
无 |
conf_path |
集群加载 vc 配置的路径,默认是 $OUSHUDB_CONF [可选] |
一个 vc 可以包含若干个 vci ,在配置时需要注意:
(1)同一个 vc 下的每一个vci包含的节点数必须相等。
(2)若nsegs_per_vci被设置,vci的节点数就必须和它保持一致。
(3)若nsegs_per_vci没有设置,它将被初始化为该vc首个vci包含的节点数。
(4)若vc不包含vci,则nsegs_per_vci被初始化为0。
(5)不同的 vc 和不同的 vci 中配置的 nodes 必须互斥, 名称为 mains 的 vc 不受此限制。
(6)一个vci中的所有节点必须在同一个zone中。
(7)集群内部必须要配置名称为 mains 的 vc ,表示集群内部所有的 main 节点,”mains” vc 无需配置vc属性。
(8)集群内部必须要配置名称为 vc_default 的 vc , vc_default 是 OushuDB 默认初始化的虚拟集群。
(9)magma_hash_table_nvseg_perseg × nsegs_per_vci 必须小于等于 magma-topology.ymal 的 num_ranges。
(10) max_nvseg_perquery_perseg × nsegs_per_vci 必须大于等于 hash_table_bucket_number。
配置magma-client.xml
magma-client.xml
需依次指定 nameservice, nameservice 下属节点,以及对应节点的访问方式。
如本例:
nameservice 名称为 oushu_magma, oushu_magma 下属 3 个节点: magma1, magma2, magma3
配置节点访问方式时,节点使用 nameservice 做前缀进行标识,例如节点 oushu_magma.magma1
其值可指定为 ip:port 或 hostname:port, hostname需提前加入本机。
<configuration>
<property>
<name>nameservices</name>
<value>oushu_magma</value>
</property>
<property>
<name>oushu_magma</name>
<value>magma1,magma2,magma3</value>
</property>
<property>
<name>oushu_magma.magma1</name>
<value>magma1:6666</value>
</property>
<property>
<name>oushu_magma.magma2</name>
<value>magma2:6666</value>
</property>
<property>
<name>oushu_magma.magma3</name>
<value>magma3:6666</value>
</property>
</configuration>
2.配置 hdfs-client.xml
(可选)
如果您使用 HDFS 作为存储引擎,则需要配置 hdfs-client.xml
,否则跳过本步骤。
去除 <!-- HA”, “HA -->
,修改该注释部分的参数,这部分可参照下面文件做修改。
修改 dfs.client.read.shortcircuit
,如果是存算分离环境,设置为 false。
其余配置保持不变。
<configuration>
<!-- KDC
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
KDC -->
<!-- TBDS
<property>
<name>hadoop.security.authentication</name>
<value>tbds_plain</value>
</property>
<property>
<name>hadoop.security.authentication.tbds.secureid</name>
<value>secureId</value>
</property>
<property>
<name>hadoop.security.authentication.tbds.securekey</name>
<value>secureKey</value>
</property>
TBDS -->
<property>
<name>dfs.nameservices</name>
<value>oushu</value>
</property>
<property>
<name>dfs.ha.namenodes.oushu</name>
<value>nn2,nn1</value>
</property>
<property>
<name>dfs.namenode.rpc-address.oushu.nn1</name>
<value>hdfs1:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.oushu.nn2</name>
<value>hdfs2:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.oushu.nn1</name>
<value>hdfs1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.oushu.nn2</name>
<value>hdfs2:50070</value>
</property>
<!-- RPC client configuration -->
<property>
<name>rpc.client.timeout</name>
<value>3600000</value>
<description>
timeout interval of a RPC invocation in millisecond. default is 3600000.
</description>
</property>
<property>
<name>rpc.client.connect.tcpnodelay</name>
<value>true</value>
<description>
whether set socket TCP_NODELAY to true when connect to RPC server. default is true.
</description>
</property>
<property>
<name>rpc.client.max.idle</name>
<value>10000</value>
<description>
the max idle time of a RPC connection in millisecond. default is 10000.
</description>
</property>
<property>
<name>rpc.client.ping.interval</name>
<value>10000</value>
<description>
the interval which the RPC client send a heart beat to server. 0 means disable, default is 10000.
</description>
</property>
<property>
<name>rpc.client.connect.timeout</name>
<value>600000</value>
<description>
the timeout interval in millisecond when the RPC client is trying to setup the connection. default is 600000.
</description>
</property>
<property>
<name>rpc.client.connect.retry</name>
<value>10</value>
<description>
the max retry times if the RPC client fail to setup the connection to server. default is 10.
</description>
</property>
<property>
<name>rpc.client.read.timeout</name>
<value>3600000</value>
<description>
the timeout interval in millisecond when the RPC client is trying to read from server. default is 3600000.
</description>
</property>
<property>
<name>rpc.client.write.timeout</name>
<value>3600000</value>
<description>
the timeout interval in millisecond when the RPC client is trying to write to server. default is 3600000.
</description>
</property>
<property>
<name>rpc.client.socket.linger.timeout</name>
<value>-1</value>
<description>
set value to socket SO_LINGER when connect to RPC server. -1 means default OS value. default is -1.
</description>
</property>
<!-- dfs client configuration -->
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
<description>
whether reading block file bypass datanode if the block and the client are on the same node. default is true.
</description>
</property>
<property>
<name>dfs.default.replica</name>
<value>3</value>
<description>
the default number of replica. default is 3.
</description>
</property>
<property>
<name>dfs.prefetchsize</name>
<value>10</value>
<description>
the default number of blocks which information will be prefetched. default is 10.
</description>
</property>
<property>
<name>dfs.client.failover.max.attempts</name>
<value>15</value>
<description>
if multiply namenodes are configured, it is the max retry times when the dfs client try to issue a RPC call. default is 15.
</description>
</property>
<property>
<name>dfs.default.blocksize</name>
<value>134217728</value>
<description>
default block size. default is 134217728.
</description>
</property>
3.配置 oushudb-site.xml
如果计划使用 HDFS 作为存储引擎,需要在配置项 hawq_dfs_url
中配置使用的连接方式与默认文件路径。
hawq_dfs_url
由两部分组成:在 hdfs-client.xml 中配置的 dfs.nameservices
与 OushuDB 允许使用的文件路径dfs_url
,两者以”/” 连接。
例如本例:oushu/oushudb/default_filespace.
配置hawq_master_directory
、hawq_segment_directory
、hawq_master_temp_directory
、hawq_segment_temp_directory
,其值为本节点用作 main 或 segment 数据目录与临时目录的路径值。
配置hawq_rm_memory_limit_perseg
、hawq_rm_nvcore_limit_perseg
, 其值将用作 ERM 分配资源所用, hawq_rm_memory_limit_perseg 应能被 hawq_rm_nvcore_limit_perseg 整除。
配置 cache_read_protocols
,其值决定可使用缓存的存储协议,可选hdfs、magma、s3。
配置default_storage
,其值决定默认使用的存储引擎,可选hdfs、magma、s3。
配置catalog_url
, 其值依赖magma-client.xml
的nameservices
与 Magma 中配置的元数据存储集群:在本配置下为oushu_magma/vsc_catalog
配置magma_dfs_url
,其值依赖magma-client.xml
的nameservices
与 Magma 中配置的数据虚拟存储集群:在本配置下为oushu_magma/vsc_default
其余配置保持不变。
<configuration>
<property>
<name>hawq_master_address_port</name>
<value>5432</value>
<description>The port of hawq master.</description>
</property>
<property>
<name>hawq_segment_address_port</name>
<value>40000</value>
<description>The port of hawq segment.</description>
</property>
<property>
<name>hawq_dfs_url</name>
<value>oushu/oushudb/default_filespace</value>
<description>URL for accessing HDFS.</description>
</property>
<property>
<name>hawq_s3_url</name>
<value>none</value>
<description>URL for accessing S3.</description>
</property>
<property>
<name>cache_read_protocols</name>
<value>hdfs,magma</value>
</property>
<property>
<name>hawq_master_directory</name>
<value>/data1/oushudb/masterdd</value>
<description>The directory of hawq master.</description>
</property>
<property>
<name>hawq_segment_directory</name>
<value>/data1/oushudb/segmentdd</value>
<description>The directory of hawq segment.</description>
</property>
<property>
<name>hawq_master_temp_directory</name>
<value>/data1/oushudb/tmp</value>
<description>The temporary directory reserved for hawq master.</description>
</property>
<property>
<name>hawq_segment_temp_directory</name>
<value>/data1/oushudb/tmp</value>
<description>The temporary directory reserved for hawq segment.</description>
</property>
<property>
<name>hawq_global_rm_type</name>
<value>none</value>
<description>The resource manager type to start for allocating resource.
'none' means hawq resource manager exclusively uses whole
cluster; 'yarn' means hawq resource manager contacts YARN
resource manager to negotiate resource.
</description>
</property>
<property>
<name>hawq_rm_memory_limit_perseg</name>
<value>64GB</value>
<description>The limit of memory usage in a hawq segment when
hawq_global_rm_type is set 'none'.
</description>
</property>
<property>
<name>hawq_rm_nvcore_limit_perseg</name>
<value>16</value>
<description>The limit of virtual core usage in a hawq segment when
hawq_global_rm_type is set 'none'.
</description>
</property>
<property>
<name>hawq_rm_yarn_address</name>
<value>localhost:8032</value>
<description>The address of YARN resource manager server.</description>
</property>
<property>
<name>hawq_rm_yarn_scheduler_address</name>
<value>localhost:8030</value>
<description>The address of YARN scheduler server.</description>
</property>
<property>
<name>hawq_rm_yarn_queue_name</name>
<value>default</value>
<description>The YARN queue name to register hawq resource manager.</description>
</property>
<property>
<name>hawq_rm_yarn_app_name</name>
<value>hawq</value>
<description>The application name to register hawq resource manager in YARN.</description>
</property>
<!-- HAWQ resource manager parameters end here. -->
<!-- HAWQ resource enforcement parameters -->
<property>
<name>hawq_re_cpu_enable</name>
<value>false</value>
<description>The control to enable/disable CPU resource enforcement.</description>
</property>
<property>
<name>hawq_re_cgroup_mount_point</name>
<value>/sys/fs/cgroup</value>
<description>The mount point of CGroup file system for resource enforcement.
For example, /sys/fs/cgroup/cpu/hawq for CPU sub-system.
</description>
</property>
<property>
<name>hawq_re_cgroup_hierarchy_name</name>
<value>hawq</value>
<description>The name of the hierarchy to accomodate CGroup directories/files for resource enforcement.
For example, /sys/fs/cgroup/cpu/hawq for CPU sub-system.
</description>
</property>
<!-- HAWQ resource enforcement parameters end here. -->
<!-- HAWQ ACL parameters -->
<property>
<name>hawq_acl_type</name>
<value>standalone</value>
<description>HAWQ ACL mode.
'standalone' means HAWQ does native ACL check;
'ranger' means HAWQ does priviliges check through Ranger.
</description>
</property>
<property>
<name>hawq_rps_address_port</name>
<value>8432</value>
<description>The port number of Ranger Plugin Serice. HAWQ RPS address is
http://$rps_host(hawq_master_address_host or hawq_standby_address_host):$hawq_rps_address_port/rps
For example, http://localhost:8432/rps
</description>
</property>
<!-- HAWQ ACL parameters ends here-->
<property>
<name>default_storage</name>
<value>hdfs</value>
<description>set default storage as hdfs, s3 or magma when creating table.</description>
</property>
<property>
<name>catalog_url</name>
<value>oushu_magma/vsc_catalog</value>
<description>urls for accessing magma.</description>
</property>
<property>
<name>magma_dfs_url</name>
<value>oushu_magma/vsc_default</value>
</property>
</configuration>
4.配置kerberos(可选)
如果使用的 HDFS 存储引擎配置了 Kerberos,则需要为 OushuDB 配置 Kerberos,否则跳过本步骤。
登录 KDC server,将Kerberos配置文件/etc/krb5.conf分发至 oushu1 节点:
scp /etc/krb5.conf root@192.168.1.11:/etc/krb5.conf
为 oushu 用户创建 Kerberos principal 并生成一个keytab文件:
kadmin.local -q "addprinc -randkey oushu@REALM"
kadmin.local -q "addprinc -randkey oushu/oushu1@REALM"
kadmin.local -q "addprinc -randkey oushu/oushu2@REALM"
kadmin.local -q "addprinc -randkey oushu/oushu3@REALM"
kadmin.local -q "xst -k /etc/security/keytabs/oushu.keytab oushu/oushu1@REALM"
kadmin.local -q "xst -k /etc/security/keytabs/oushu.keytab oushu/oushu2@REALM"
kadmin.local -q "xst -k /etc/security/keytabs/oushu.keytab oushu/oushu3@REALM"
kadmin.local -q "ktadd -k /etc/security/keytabs/oushu.keytab oushu"
分发 /etc/security/keytabs/oushu.keytab
至 oushu1 节点:
sudo scp /etc/security/keytabs/oushu.keytab oushu@192.168.1.11:/usr/local/oushu/conf/oushudb/
返回 oushu1 节点,切换 root 用户,分发 /etc/krb5.conf
到所有 OushuDB 节点:
su - root
lava scp -f ~/oushuhosts /etc/krb5.conf =:/etc/
切换 oushu 用户,执行后续修改
su - oushu
修改 oushudb-site.xml
配置
修改 krb_server_list ,修改为 hdfs-client.xml
中配置 的 nameservice,多个集群需以逗号分隔,不能有多余的空格:
<property>
<name>krb_server_list</name>
<value>oushu</value>
</property>
注意,这里的nameservice格式可以为HA也可以是host:port,无论是哪一种,在所有配置文件中都应该一致,即hawq_hdfs_url、pg_filesystem_entry或者hdfs-client.xml中该集群也必须以krb_server_list中的nameservice进行标识,否则会导致识别失败。
修改 hdfs-client.xml
OushuDB 通过如下配置项来进行 kerberos 认证。
dfs.encrypt.data.transfer
dfs.block.access.token.enable
hadoop.security.authentication
hadoop.rpc.protection
dfs.data.transfer.protection
hadoop.security.token.lifetime (KDC 认证有效时间,单位ms)
hadoop.security.ticket.lifetime (Namenode 认证有效时间,单位ms)
hadoop.security.keytab (keytab 路径,路径下的keytab文件分发到所有 main )
hadoop.security.principal (KDC 认证时使用的 principal)
新增一个 Kerberos 配置时,每项应该以HDFS 集群的 nameservice 为前缀,表示这是该 HDFS 集群的 kerberos 配置。
<property>
<name>oushu.hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>oushu.hadoop.rpc.protection</name>
<value>authentication</value>
</property>
<property>
<name>oushu.dfs.data.transfer.protection</name>
<value>authentication</value>
</property>
<property>
<name>oushu.dfs.encrypt.data.transfer</name>
<value>false</value>
</property>
<property>
<name>oushu.dfs.block.access.token.enable</name>
<value>true</value>
</property>
<property>
<name>oushu.hadoop.security.token.lifetime</name>
<value>4320000</value>
</property>
<property>
<name>oushu.hadoop.security.ticket.lifetime</name>
<value>4320000</value>
</property>
<property>
<name>oushu.hadoop.security.keytab</name>
<value>/usr/local/oushu/conf/oushudb/oushu.keytab</value>
</property>
<property>
<name>oushu.hadoop.security.principal</name>
<value>oushu</value>
</property>
将oushu.keytab分发到所有 main 节点
oushudb scp -f ~/mhostfile /usr/local/oushu/conf/oushudb/oushu.keytab =:/usr/local/oushu/conf/oushudb/
5.分发配置文件
将修改后的OushuDB配置文件分发到所有节点
oushudb scp -f ~/oushuhostfile /usr/local/oushu/conf/oushudb/oushudb-topology.yaml =:/usr/local/oushu/conf/oushudb/
oushudb scp -f ~/oushuhostfile /usr/local/oushu/conf/oushudb/oushudb-site.xml =:/usr/local/oushu/conf/oushudb/
oushudb scp -f ~/oushuhostfile /usr/local/oushu/conf/oushudb/magma-client.xml =:/usr/local/oushu/conf/oushudb/
oushudb scp -f ~/oushuhostfile /usr/local/oushu/conf/oushudb/hdfs-client.xml =:/usr/local/oushu/conf/oushudb/
启动#
初始化OushuDB#
如果配置了HDFS 作为存储引擎,需要确保HDFS系统启动,并为 OushuDB 配置好路径与权限。
登录 hdfs1,切换为 hdfs 用户执行如下命令为 OushuDB 创建可用目录:
sudo -u hdfs hdfs dfs -mkdir -p /oushudb/default_filespace
上文命令中 /oushudb/default_filespace
路径来源于 oushudb-site.xml
中hawq_dfs_url
配置项的dfs_url
。
修改为 OushuDB 创建的文件路径的归属用户,如果启用了 Kerberos,则需修改为 principal 指定的用户:
sudo -u hdfs hdfs dfs -chown -R oushu:oushu /oushudb/default_filespace
OushuDB 依赖 Magma 分布式表存储,需要确保 Magma 已经初始化并启动。Magma 安装部署请参考:Magma 安装。
在 oushu1 使用 oushu 用户执行如下命令以初始化集群:
oushudb init cluster -a
执行 oushudb init --help
可获得更为详细的命令描述。
安装后测试#
连接数据库:
psql -d postgres
执行如下SQL以验证:
CREATE TABLE rank1 (id int);
insert into rank1 select generate_series(1, 1000000, 1);
select count(*) from rank1;
常用命令#
# 启动停止运行的 OushuDB 集群
oushudb start cluster
# 停止正在运行的 OushuDB 集群
oushudb stop cluster
# 停止当前 main 节点
oushudb stop main
# 停止当前 segment 节点
oushudb stop segment
# 停止所有 main 节点
oushudb stop allmains
# 停止所有 segment 节点
oushudb stop allsegments
# 初始化本地 main 节点
oushudb init main
# 初始化所有 main 节点
oushudb init allmains
# 初始化本地 segment 节点
oushudb init segment
# 初始化所有 segment 节点
oushudb init allsegments
注册到skylab(可选)#
注册工作需要将 OushuDB 所有节点添加到Skylab,如果您尚未添加,请参考注册机器。
在 oushu1 上使用 oushu 用户,修改配置文件/data1/oushudb/masterdd/pg_hba.conf
修改 oushu 用户之外的认证方式为 (IP需要被替换为Skylab 服务器IP):
host all all 0.0.0.0/0 cloud cloudserver=http://IP:1612
同步配置到所有 main 节点,并reload:
oushudb scp -f /home/oushu/mhostfile /data1/oushudb/masterdd/pg_hba.conf =:/data1/oushudb/masterdd/
oushudb reload main -a
注册现有数据库 (IP需要被替换为Skylab 服务器IP)
curl -l -k -H "Content-type:application/json" -X POST -d '{"login_type":1, "name": "oushu", "password": "Oushu6@China"}' http://IP:1612/user/login -c /tmp/.lavacookie > /tmp/.userinfo
curl -l -k -H "Content-type:application/json" -X POST -d '{"ip": "192.168.1.11", "port": "5432", "cluster_group_name": "oushudb"}' http://IP:1652/admin/OushuDB/register -b /tmp/.lavacookie
访问Skylab服务以确认注册完成,例如Skylab 部署在192.168.1.10:
http://192.168.1.10:3000/main/Deploy/oushudb
从页面登录后,在自动部署模块对应服务中可以查看到新添加的集群,同时列表中会实时监控 OushuDB 进程在机器上的状态。