1、数据库技术改造方案v20数据库技术改造方案V2.0 1.背景 XXXXX系统,其数据库内存放的数据量较大且要求读写速度快,目前利用的Couchbase数据库虽然能满足读写速度上的要求,但服务器必须满足较大内存且各个服务节点(服务器)都是对等存在的,一个节点出现问题并不会影响其他节点正常运行,但总内存容量会缩小。 当前通过对XXXXX更多数据存储到内存,以达到提高数据的读写速率;现把两台服务器内存合并为一个内存bucket,这样的方案导致一台机器出现宕机时 failover 过程有不可用时间,并且部分数据有丢失的可能,且在高负载系统上有假死现象;如果再增加节点且节点的内存只有达到或超过当前节点才
2、能发挥服务器的性能,否则就要缩减Couchbase建立的bucket的占用内存,服务器就不能合理发挥它的性能作用,由此拥有大量的对比数据就需要提供更好且合理的NOSQL数据库。 Couchbase数据库本身也存在以下缺点: .Couchbase 的存储方式为 Key/Value,但 Value 的类型很为单一,不支持数组。另外也不会自动创建doc id,需要为每一文档指定一个用于存储的 Document Indentifer; .各种组件拼接而成,都是c+实现,导致复杂度过高,遇到奇怪的性能问题排查比较困难,(中文)文档比较欠缺; .采用缓存全部key的策略,需要大量内存。节点宕机时 fail
3、over 过程有不可用时间,并且有部分数据丢失的可能,在高负载系统上有假死现象; .逐渐倾向于闭源,社区版本(免费,但不提供官方维护升级)和商业版本之间差距比较大。2.目前结构 从结构和实际应用看,XXXXX存在问题: 1、对比数据量较大; 2、只有两台服务器只能做到内存扩展无法做到failover; 3、内存数据达到一定比例,再写入数据效率降低; 4、假如再添加节点就要求节点的内存必须接近当前两台节点的内存配置,否则就发挥不了现有节点的性能。3.数据库对比 Hbase是一个运行在Hadoop上的分布式和可扩展的大数据仓库,其优点如下: 1、需要的是硬盘空间,能够利用HDFS的分布式处理模式,
4、并从Hadoop的MapReduce程序模型中获益。这意味着Hbase存储容量大,一个表可以容纳上亿行,上百万列; 2、可通过版本进行检索,能搜到所需的历史版本数据; 3、负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce); 4、也可有效避免单点故障的发生。Hbase与目前所用数据库Couchbase在某些方面的对比情况,如下面列表所示:项目HBASECOUCHBASE分片信息每个server,选主数据格式二进制json固化方式一般架设在hdfs上,可以认为是一个分布式内存索引系统Couchsto
5、reForestDB负载均衡自动均衡,迁移主备方式分布式内存索引,无主备索引支持仅按key排序主二级过滤器服务器端服务器端编程协处理器。启动时放到服务器端,配置(不能动态上传)批量写入支持直接从hdfs加载文件不支持读写内存可以根据情况调整定义后不可改通过以上hbase和couchbase数据库的对比列表可知,在某些方面使用hbase要好于couchbase。集群中进程名称及作用: NameNode【支持对HDFS中的目录、文件和块做类似文件系统的创建、修改、删除、列表文件和目录等基本操作】 DFSZKFailoverController【Hadoop Ha进程维持namenode高可用】 J
6、ournalNode【保证hadoop Ha的高可用(一般启动2n+1个)】 JobHistoryServer【可以 该服务查看已经运行完了的作业记录】 ResourceManager【管理集群资源分配,接收NodeManager的资源汇报】 DataNode【调度存储和检索数据】 NodeManager【负责在单个节点上执行MapReduce任务】 QuorumPeerMain【zookeeper独立的进程,ZooKeeper作用包括管理Hadoop集群中的NameNode,HBase中HBaseMaster的选举,Servers之间状态同步等】 HMaster【管理和分配HRegion、H
7、RegionServer负载均衡、权限控制、实现DDL操作】 HRegionServer【维护HMaster分配给他的region,处理对这些region的io请求负责切分正在运行过程中变的过大的region 】 zookeeper 【实现namenode和HMaster主从节点的failover ,存放HBase集群的元数据以及集群的状态信息】 4.设计与实施 使用Hbase 1.00+Hadoop 2.60+Zookeeper3.4.6替换原NOSQL数据库Couchbase,原2台服务器+后添5台服务器共同组成一个Hbase分布式数据集群。 架构图清晰地表达了HBase采用Master/
8、Slave架构搭建集群,它隶属于Hadoop生态系统,由HMaster节点、HRegionServer节点、ZooKeeper集群等节点组成,而在底层,它将数据存储于HDFS中,因而涉及到HDFS的NameNode、DataNode等;HMaster和NameNode都支持多个热备份,使用ZooKeeper来做协调;ZooKeeper并不是云般神秘,它一般由三台机器组成一个集群,内部使用PAXOS算法支持三台Server中的一台宕机,在本次设计中使用五台机器,此时则可以支持同时两台宕机,既少于半数的宕机;把RegionServer和DataNode放在相同的Server上实现数据的本地化。主机
9、规划:主机名IP安装的软件运行的进程master1192.168.XXX.111jdk、hadoop、hbaseNN、RM、DFSZKFailoverController(zkfc)、Hmaster、JobHistoryServermaster2192.168.XXX.112jdk、hadoop、hbaseNN、RM、DFSZKFailoverController(zkfc)、Hmasterslave1192.168.XXX.113jdk、hadoop、zookeeper、hbaseDN、NM、JournalNode、QuorumPeerMain、HRegionServerslave2192.
10、168.XXX.114jdk、hadoop、zookeeper、hbaseDN、NM、JournalNode、QuorumPeerMain、HRegionServerslave3192.168.XXX.115jdk、hadoop、zookeeper、hbaseDN、NM、JournalNode、QuorumPeerMain、HRegionServerslave4192.168.XXX.116jdk、hadoop、zookeeper、hbaseDN、NM、JournalNode、QuorumPeerMain、HRegionServerslave5192.168.XXX.117jdk、hadoop
11、、zookeeper、hbaseDN、NM、JournalNode、QuorumPeerMain、HRegionServer 这里采用Hadoop Ha的QJM方案,该方案由两个NameNode构成,一个处于active状态,另一个处于Standby状态,用于NameNode的备份和切换,Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。 在方案中配置独立的zookeeper集群,一方面用于ZKFC(DFSZKFailoverController)故障转移,当Active
12、NameNode挂掉了,会自动切换Standby NameNode为Active 状态; 另一作用配置zookeeper集群负责的工作就是存储HBase的Schema,实时监控HRegionServer,存储所有Region的寻址入口,当然还有最常见的功能就是保证HBase集群中只有一个Master,实现HMaster主从节点的failover。 采用HRegionServer和DataNode运行在相同的服务器上实现数据的本地化,提升读写性能,并减少网络压力。目录规划:名称路径所有软件目录/application/hadoop/app/所有数据和日志目录/data/hadoop/3.1集群安
13、装前的环境检查登录名/密码:root/XXXXX|hadoop/hadoop时钟同步所有节点的系统时间要与当前时间保持一致。查看当前系统时间rootmaster1# dateSun Apr 24 04:52:48 PDT 2016如果系统时间与当前时间不一致,进行以下操作。rootmaster1# cd /usr/share/zoneinfo/rootmaster1zoneinfo# ls /找到Asiarootmaster1 zoneinfo# cd Asia/ /进入Asia目录rootmaster1 Asia# ls /找到Shanghairootmaster1 Asia#cp /usr
14、/share/zoneinfo/Asia/Shanghai /etc/localtime /当前时区替换为上海我们可以同步当前系统时间和日期与NTP(网络时间协议)一致。rootmaster1 Asia# yum install ntp /如果ntp命令不存在,在线安装ntprootmaster1 Asia# ntpdate pool.ntp.org /执行此命令同步日期时间rootmaster1 Asia# date /查看当前系统时间时间同步服务端vi /etc/ntp.conf#restrict 127.0.0.1#restrict -6 :1server 127.127.1.0 # l
15、ocal clockfudge 127.127.1.0 stratum 10vi /etc/ntp/step-tickers加入一行:pool.ntp.org这样每次ntpd启动时,会自动连接该国际标准时间服务器;service ntpd startnetstat -an |grep 123 #确保该端口以udp方式开放时间同步客户端vi /etc/ntp.conf#restrict 127.0.0.1#restrict -6 :1server 192.168.55.111ntpdate 192.168.55.111crontab -e01 * * * * /usr/sbin/ntpdate
16、192.168.55.111 #每隔1小时同步一次时间/sbin/service crond start /启动服务/sbin/service crond stop /关闭服务/sbin/service crond restart /重启服务/sbin/service crond reload /重新载入配置service crond statushosts文件检查所有节点的hosts文件都要配置静态ip与hostname之间的对应关系。vi /etc/hosts192.168.XXX.111 master1192.168.XXX.112 master2192.168.XXX.113 slav
17、e1192.168.XXX.114 slave2192.168.XXX.115 slave3192.168.XXX.116 slave4192.168.XXX.117 slave5禁用防火墙所有节点的防火墙都要关闭。查看防火墙状态service iptables statusiptables: Firewall is not running.如果不是上面的关闭状态,则需要关闭防火墙。chkconfig iptables off /永久关闭防火墙service iptables stop 修改主机名vi /etc/sysconfig/networkNETWORKING=yesHOSTNAME=l
18、ocalhost.localdomain /改为主机名保存并输入reboot命令,重新启动服务器。添加hadoop并进行sudo授权管理/usr/sbin/groupadd hadoop/usr/sbin/useradd hadoop -g hadooppasswd hadoop /修改密码为hadooprootmaster1# visudoroot ALL=(ALL) ALL此行下,添加如下内容hadoop ALL=(ALL) ALL创建hadoop工作目录/数据目录su - rootmkdir -p /application/hadoopmkdir -p /data_sdb/hadoopm
19、kdir -p /data_sdb/hadoop/hdfs/namenodemkdir -p /data_sdb/hadoop/hdfs/datanodemkdir -p /data_sdb/hadoop/hdfs/namesecondarymkdir -p /data_sdb/hadoop/hdfs/tmp mkdir -p /data_sdb/hadoop/hdfs/journal修改目录权限chown -R hadoop:hadoop /application/hadoopchown -R hadoop:hadoop /data_sdb/hadoop修改文件打开数rootmaster1
20、$vi /etc/security/limits.confroot soft nofile 65535root hard nofile 65535root soft nproc 32000root hard nproc 32000rootmaster1 $vi /etc/pam.d/loginsession required pam_limits.so3.2配置SSH免密码通信hadoopmaster1$ mkdir .ssh hadoopmaster1 $ chmod 755 .ssh / 将权限改为755hadoopmaster1$cd .ssh hadoopmaster1$ ssh-ke
21、ygen -t rsa -P /执行命令一路回车,生成秘钥hadoopmaster1.ssh$ ls authorized_keys id_rsa id_rsa.pub known_hostshadoopmaster1.ssh$ cat id_rsa.pub authorized_keys /将公钥保存到hadoopmaster1.ssh$ chmod 600 authorized_keysauthorized_keys认证文件中 /注意:authorized_keys 的权限为600 备注:”公钥登录”,原理,即用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串
22、,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。集群所有节点都要行上面的操作。将所有节点中的共钥id_ras.pub拷贝到djt11中的authorized_keys文件中。cat /.ssh/id_rsa.pub | ssh hadoopmaster1cat /.ssh/authorized_keys所有节点都需要执行这条命令然后将master1中的authorized_keys文件分发到所有节点上面。scp -r authorized_keys hadoopmaster2:/.ssh/scp -r a
23、uthorized_keys hadoopslave1:/.ssh/scp -r authorized_keys hadoopslave2:/.ssh/scp -r authorized_keys hadoopslave3:/.ssh/scp -r authorized_keys hadoopslave4:/.ssh/scp -r authorized_keys hadoopslave5:/.ssh/测试:ssh master2 date3.3 JDK安装通过上传工具上传JDk安装包到/home/hadoop/app 用root用户登陆到系统,打开一个终端输入 卸载rpm版的jdk: #rpm
24、 -qa|grep jdk 显示:jdk-1.6.0_10-fcs 卸载:#rpm -e -nodeps jdk-1.6.0_10-fcsrootmaster1 # chown -R hadoop:hadoop jdk-8u60-linux-x64.gzhadoopmaster 1$ cp jdk-8u60-linux-x64.gz /application/hadoop/hadoopmaster1 hadoop$ chmod 755 jdk-8u60-linux-x64.gzhadoopmaster1 $ tar -zxvf jdk-8u60-linux-x64.gzhadoopmaster
25、1 $ ln -s jdk1.8.0_60/ jdkhadoopmaster1 $ su - rootvi /etc/profile.d/java.shexport JAVA_HOME=/application/hadoop/jdkexport PATH=$JAVA_HOME/bin:$PATHrootmaster # source /etc/profilerootmaster # echo $JAVA_HOME/application/hadoop/jdkhadoopmaster1 source /etc/profilehadoopmaster1 java -version3.4 Hadoo
26、p安装rootmaster1 # chown -R hadoop:hadoop hadoop-2.6.0.tar.gz 检查用户hadoopchown -R hadoop:hadoop /application/hadoop/chown -R hadoop:hadoop /data/hadoop/hadoopmaster1 $ cp hadoop-2.6.5.tar.gz /application/hadoop/hadoopmaster1 $ tar -zxvf hadoop-2.6.5.tar.gzhadoopmaster1 $ ln -s hadoop-2.6.5/ hadoophadoo
27、pmaster1 $ su - rootvi /etc/profile.d/java.shexport HADOOP_HOME=/application/hadoop/hadoopexport PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATHrootmaster1 # source /etc/profilerootmaster1 # echo $HADOOP_HOME/application/hadoop/hadoophadoopmaster1 hadoop$ source /etc/profile测试hadoopmaster1 hadoop$ jps114
28、0 Jps3.5修改Hadoop配置文件(Hadoop用户下)修改$HADOOP_HOME/etc/hadoop/slaves文件,加入所有slave节点的hostnameslave1slave2slave3slave4slave5修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh文件export JAVA_HOME=/application/hadoop/jdk修改$HADOOP_HOME/etc/hadoop/yarn-env.sh文件export JAVA_HOME=/application/hadoop/jdk修改core-site.xml文件rootmaster1 hadoop# vi core-site.xmlfs.defaultFShdfs:/mastershadoop.tmp.dir/data_sdb/hadoop/hdfs/tmpha.zookeeper.quorumslave1:2181,slave2:2181,slave3:2181,slave4:2181,slave5:2181io.native.lib.availableTRUE修改hdfs-site.xml hbase.rootdir hdfs:/m
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1