数据库技术改造方案v20.docx

上传人:b****3 文档编号:27112756 上传时间:2023-06-27 格式:DOCX 页数:42 大小:324.18KB
下载 相关 举报
数据库技术改造方案v20.docx_第1页
第1页 / 共42页
数据库技术改造方案v20.docx_第2页
第2页 / 共42页
数据库技术改造方案v20.docx_第3页
第3页 / 共42页
数据库技术改造方案v20.docx_第4页
第4页 / 共42页
数据库技术改造方案v20.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

数据库技术改造方案v20.docx

《数据库技术改造方案v20.docx》由会员分享,可在线阅读,更多相关《数据库技术改造方案v20.docx(42页珍藏版)》请在冰豆网上搜索。

数据库技术改造方案v20.docx

数据库技术改造方案v20

数据库技术改造方案

V2.0

 

1.背景

XXXXX系统,其数据库内存放的数据量较大且要求读写速度快,目前利用的Couchbase数据库虽然能满足读写速度上的要求,但服务器必须满足较大内存且各个服务节点(服务器)都是对等存在的,一个节点出现问题并不会影响其他节点正常运行,但总内存容量会缩小。

当前通过对XXXXX更多数据存储到内存,以达到提高数据的读写速率;现把两台服务器内存合并为一个内存bucket,这样的方案导致一台机器出现宕机时failover过程有不可用时间,并且部分数据有丢失的可能,且在高负载系统上有假死现象;如果再增加节点且节点的内存只有达到或超过当前节点才能发挥服务器的性能,否则就要缩减Couchbase建立的bucket的占用内存,服务器就不能合理发挥它的性能作用,由此拥有大量的对比数据就需要提供更好且合理的NOSQL数据库。

Couchbase数据库本身也存在以下缺点:

 1.Couchbase的存储方式为Key/Value,但Value的类型很为单一,不支持数组。

另外也不会自动创建docid,需要为每一文档指定一个用于存储的DocumentIndentifer;

 2.各种组件拼接而成,都是c++实现,导致复杂度过高,遇到奇怪的性能问题排查比较困难,(中文)文档比较欠缺;

 3.采用缓存全部key的策略,需要大量内存。

节点宕机时failover过程有不可用时间,并且有部分数据丢失的可能,在高负载系统上有假死现象;

4.逐渐倾向于闭源,社区版本(免费,但不提供官方维护升级)和商业版本之间差距比较大。

2.目前结构

  从结构和实际应用看,XXXXX存在问题:

1、对比数据量较大;

2、只有两台服务器只能做到内存扩展无法做到failover;

3、内存数据达到一定比例,再写入数据效率降低;

4、假如再添加节点就要求节点的内存必须接近当前两台节点的内存配置,否则就发挥不了现有节点的性能。

3.数据库对比

Hbase是一个运行在Hadoop上的分布式和可扩展的大数据仓库,其优点如下:

1、需要的是硬盘空间,能够利用HDFS的分布式处理模式,并从Hadoop的MapReduce程序模型中获益。

这意味着Hbase存储容量大,一个表可以容纳上亿行,上百万列;

2、可通过版本进行检索,能搜到所需的历史版本数据;

3、负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce);

4、 也可有效避免单点故障的发生。

Hbase与目前所用数据库Couchbase在某些方面的对比情况,如下面列表所示:

项目

HBASE

COUCHBASE

分片信息

每个server,选主

数据格式

二进制

json

固化方式

一般架设在hdfs上,可以认为是一个分布式内存索引系统

Couchstore/ForestDB

负载均衡

自动均衡,迁移

主备方式

分布式内存索引,无主备

索引支持

仅按key排序

主/二级

过滤器

服务器端

服务器端编程

协处理器。

启动时放到服务器端,配置(不能动态上传)

批量写入

支持

直接从hdfs加载文件

不支持

读写内存

可以根据情况调整

定义后不可改

通过以上hbase和couchbase数据库的对比列表可知,在某些方面使用hbase要好于couchbase。

集群中进程名称及作用:

NameNode【支持对HDFS中的目录、文件和块做类似文件系统的创建、修改、删除、列表文件和目录等基本操作】

DFSZKFailoverController【HadoopHa进程维持namenode高可用】

JournalNode【保证hadoopHa的高可用(一般启动2n+1个)】

JobHistoryServer【可以该服务查看已经运行完了的作业记录】

ResourceManager【管理集群资源分配,接收NodeManager的资源汇报】

DataNode【调度存储和检索数据】

NodeManager【负责在单个节点上执行MapReduce任务】

QuorumPeerMain【zookeeper独立的进程,ZooKeeper作用包括管理Hadoop集群中的NameNode,HBase中HBaseMaster的选举,Servers之间状态同步等】

HMaster【管理和分配HRegion、HRegionServer负载均衡、权限控制、实现DDL操作】

HRegionServer【维护HMaster分配给他的region,处理对这些region的io请求负责切分正在运行过程中变的过大的region】

zookeeper【实现namenode和HMaster主从节点的failover,存放HBase集群的元数据以及集群的状态信息】

4.设计与实施

使用Hbase1.00+Hadoop2.60+Zookeeper3.4.6替换原NOSQL数据库Couchbase,原2台服务器+后添5台服务器共同组成一个Hbase分布式数据集群。

架构图清晰地表达了HBase采用Master/Slave架构搭建集群,它隶属于Hadoop生态系统,由HMaster节点、HRegionServer节点、ZooKeeper集群等节点组成,而在底层,它将数据存储于HDFS中,因而涉及到HDFS的NameNode、DataNode等;HMaster和NameNode都支持多个热备份,使用ZooKeeper来做协调;ZooKeeper并不是云般神秘,它一般由三台机器组成一个集群,内部使用PAXOS算法支持三台Server中的一台宕机,在本次设计中使用五台机器,此时则可以支持同时两台宕机,既少于半数的宕机;把RegionServer和DataNode放在相同的Server上实现数据的本地化。

 

主机规划:

主机名

IP

安装的软件

运行的进程

master1

192.168.XXX.111

jdk、hadoop、hbase

NN、RM、DFSZKFailoverController(zkfc)、Hmaster、JobHistoryServer

master2

192.168.XXX.112

jdk、hadoop、hbase

NN、RM、DFSZKFailoverController(zkfc)、Hmaster

slave1

192.168.XXX.113

jdk、hadoop、zookeeper、hbase

DN、NM、JournalNode、QuorumPeerMain、HRegionServer

slave2

192.168.XXX.114

jdk、hadoop、zookeeper、hbase

DN、NM、JournalNode、QuorumPeerMain、HRegionServer

slave3

192.168.XXX.115

jdk、hadoop、zookeeper、hbase

DN、NM、JournalNode、QuorumPeerMain、HRegionServer

slave4

192.168.XXX.116

jdk、hadoop、zookeeper、hbase

DN、NM、JournalNode、QuorumPeerMain、HRegionServer

slave5

192.168.XXX.117

jdk、hadoop、zookeeper、hbase

DN、NM、JournalNode、QuorumPeerMain、HRegionServer

这里采用HadoopHa的QJM方案,该方案由两个NameNode构成,一个处于active状态,另一个处于Standby状态,用于NameNode的备份和切换,ActiveNameNode对外提供服务,而StandbyNameNode则不对外提供服务,仅同步activenamenode的状态,以便能够在它失败时快速进行切换。

在方案中配置独立的zookeeper集群,一方面用于ZKFC(DFSZKFailoverController)故障转移,当ActiveNameNode挂掉了,会自动切换StandbyNameNode为Active状态;另一作用配置zookeeper集群负责的工作就是存储HBase的Schema,实时监控HRegionServer,存储所有Region的寻址入口,当然还有最常见的功能就是保证HBase集群中只有一个Master,实现HMaster主从节点的failover。

采用HRegionServer和DataNode运行在相同的服务器上实现数据的本地化,提升读写性能,并减少网络压力。

目录规划:

名称

路径

所有软件目录

/application/hadoop/app/

所有数据和日志目录

/data/hadoop/

 

3.1集群安装前的环境检查

登录名/密码:

root/XXXXX|hadoop/hadoop

时钟同步

所有节点的系统时间要与当前时间保持一致。

查看当前系统时间

[root@master1~]#date

SunApr2404:

52:

48PDT2016

如果系统时间与当前时间不一致,进行以下操作。

[root@master1~]#cd/usr/share/zoneinfo/

[root@master1zoneinfo]#ls//找到Asia

[root@master1zoneinfo]#cdAsia///进入Asia目录

[root@master1Asia]#ls//找到Shanghai

[root@master1Asia]#cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime//当前时区替换为上海

我们可以同步当前系统时间和日期与NTP(网络时间协议)一致。

[root@master1Asia]#yuminstallntp//如果ntp命令不存在,在线安装ntp

[root@master1Asia]#ntpdatepool.ntp.org//执行此命令同步日期时间

[root@master1Asia]#date//查看当前系统时间

时间同步服务端

vi/etc/ntp.conf

#restrict127.0.0.1

#restrict-6:

:

1

server127.127.1.0#localclock

fudge127.127.1.0stratum10

 vi/etc/ntp/step-tickers

加入一行:

pool.ntp.org

这样每次ntpd启动时,会自动连接该国际标准时间服务器;

servicentpdstart

netstat-an|grep123#确保该端口以udp方式开放

时间同步客户端

vi/etc/ntp.conf

#restrict127.0.0.1

#restrict-6:

:

1

server192.168.55.111

ntpdate192.168.55.111

crontab-e

01****/usr/sbin/ntpdate192.168.55.111#每隔1小时同步一次时间

/sbin/servicecrondstart//启动服务

/sbin/servicecrondstop//关闭服务

/sbin/servicecrondrestart//重启服务

/sbin/servicecrondreload//重新载入配置

servicecrondstatus

hosts文件检查

所有节点的hosts文件都要配置静态ip与hostname之间的对应关系。

vi/etc/hosts

192.168.XXX.111master1

192.168.XXX.112master2

192.168.XXX.113slave1

192.168.XXX.114slave2

192.168.XXX.115slave3

192.168.XXX.116slave4

192.168.XXX.117slave5

禁用防火墙

所有节点的防火墙都要关闭。

查看防火墙状态

serviceiptablesstatus

iptables:

Firewallisnotrunning.

如果不是上面的关闭状态,则需要关闭防火墙。

chkconfigiptablesoff//永久关闭防火墙

serviceiptablesstop

修改主机名

vi/etc/sysconfig/network

NETWORKING=yes

HOSTNAME=localhost.localdomain//改为主机名

保存并输入reboot命令,重新启动服务器。

添加hadoop并进行sudo授权管理

/usr/sbin/groupaddhadoop

/usr/sbin/useraddhadoop-ghadoop

passwdhadoop//修改密码为hadoop

[root@master1~]#visudo

rootALL=(ALL)ALL此行下,添加如下内容

hadoopALL=(ALL)ALL

创建hadoop工作目录/数据目录

su-root

mkdir-p/application/hadoop

mkdir-p/data_sdb/hadoop

mkdir-p/data_sdb/hadoop/hdfs/namenode

mkdir-p/data_sdb/hadoop/hdfs/datanode

mkdir-p/data_sdb/hadoop/hdfs/namesecondary

mkdir-p/data_sdb/hadoop/hdfs/tmp

mkdir-p/data_sdb/hadoop/hdfs/journal

修改目录权限

chown-Rhadoop:

hadoop/application/hadoop

chown-Rhadoop:

hadoop/data_sdb/hadoop

修改文件打开数

[root@master1~]$vi/etc/security/limits.conf

rootsoftnofile65535

roothardnofile65535

rootsoftnproc32000

roothardnproc32000

[root@master1~]$vi/etc/pam.d/login

session required    pam_limits.so

3.2配置SSH免密码通信

hadoop@master1~]$mkdir.ssh

[hadoop@master1~]$chmod755.ssh//将权限改为755

[hadoop@master1~]$cd.ssh

[hadoop@master1~]$ssh-keygen-trsa-P''//执行命令一路回车,生成秘钥

[hadoop@master1.ssh]$ls

authorized_keysid_rsaid_rsa.pubknown_hosts

[hadoop@master1.ssh]$catid_rsa.pub>>authorized_keys//将公钥保存到

[hadoop@master1.ssh]$chmod600authorized_keys

authorized_keys认证文件中//注意:

authorized_keys的权限为600

备注:

”公钥登录”,原理,即用户将自己的公钥储存在远程主机上。

登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。

远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

集群所有节点都要行上面的操作。

将所有节点中的共钥id_ras.pub拷贝到djt11中的authorized_keys文件中。

 

cat~/.ssh/id_rsa.pub|sshhadoop@master1'cat>>~/.ssh/authorized_keys'

所有节点都需要执行这条命令

然后将master1中的authorized_keys文件分发到所有节点上面。

scp-rauthorized_keyshadoop@master2:

~/.ssh/

scp-rauthorized_keyshadoop@slave1:

~/.ssh/

scp-rauthorized_keyshadoop@slave2:

~/.ssh/

scp-rauthorized_keyshadoop@slave3:

~/.ssh/

scp-rauthorized_keyshadoop@slave4:

~/.ssh/

scp-rauthorized_keyshadoop@slave5:

~/.ssh/

测试:

sshmaster2date

3.3JDK安装

通过上传工具上传JDk安装包到/home/hadoop/app

用root用户登陆到系统,打开一个终端输入

卸载rpm版的jdk:

  #rpm-qa|grepjdk

  显示:

jdk-1.6.0_10-fcs

  卸载:

#rpm-e --nodeps jdk-1.6.0_10-fcs

[root@master1~]#chown-Rhadoop:

hadoopjdk-8u60-linux-x64.gz

[hadoop@master1~]$cpjdk-8u60-linux-x64.gz/application/hadoop/

[hadoop@master1hadoop]$chmod755jdk-8u60-linux-x64.gz

[hadoop@master1~]$tar-zxvfjdk-8u60-linux-x64.gz

[hadoop@master1~]$ln-sjdk1.8.0_60/jdk

[hadoop@master1~]$su-root

vi/etc/profile.d/java.sh

exportJAVA_HOME=/application/hadoop/jdk

exportPATH=$JAVA_HOME/bin:

$PATH

[root@master~]#source/etc/profile

[root@master~]#echo$JAVA_HOME

/application/hadoop/jdk

[hadoop@master1~]source/etc/profile

[hadoop@master1~]java-version

3.4Hadoop安装

[root@master1~]#chown-Rhadoop:

hadoophadoop-2.6.0.tar.gz

检查用户hadoop

chown-Rhadoop:

hadoop/application/hadoop/

chown-Rhadoop:

hadoop/data/hadoop/

[hadoop@master1~]$cphadoop-2.6.5.tar.gz/application/hadoop/

[hadoop@master1~]$tar-zxvfhadoop-2.6.5.tar.gz

[hadoop@master1~]$ln-shadoop-2.6.5/hadoop

[hadoop@master1~]$su-root

vi/etc/profile.d/java.sh

exportHADOOP_HOME=/application/hadoop/hadoop

exportPATH=$JAVA_HOME/bin:

$HADOOP_HOME/bin:

$PATH

[root@master1~]#source/etc/profile

[root@master1~]#echo$HADOOP_HOME

/application/hadoop/hadoop

[hadoop@master1hadoop]$source/etc/profile

测试

[hadoop@master1hadoop]$jps

1140Jps

3.5修改Hadoop配置文件(Hadoop用户下)

修改$HADOOP_HOME/etc/hadoop/slaves文件,加入所有slave节点的hostname

slave1

slave2

slave3

slave4

slave5

修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh文件

exportJAVA_HOME=/application/hadoop/jdk

修改$HADOOP_HOME/etc/hadoop/yarn-env.sh文件

exportJAVA_HOME=/application/hadoop/jdk

修改core-site.xml文件

[root@master1hadoop]#vicore-site.xml

--指定hdfs的nameservice为masters-->

fs.defaultFS

hdfs:

//masters

--指定hadoop临时目录-->

hadoop.tmp.dir

/data_sdb/hadoop/hdfs/tmp

--指定zookeeper地址-->

ha.zookeeper.quorum

slave1:

2181,slave2:

2181,slave3:

2181,slave4:

2181,slave5:

2181

--是否启动Hadoop的本地库,默认启用。

本地库可以加快基本操作,例如IO,压缩等-->

io.native.lib.available

TRUE

修改hdfs-site.xml

--配置hbase在HDFS文件系统中存放文件的根目录-->

          hbase.rootdir

          hdfs:

//m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1