Ubuntu 14.04用apt在线/离线安装CDH5.1.2[Apache Hadoop 2.3.0]

1、CDH介绍

1.1、什么是CDH和CM?

  CDH一个对Apache Hadoop的集成环境的封装,可以使用Cloudera Manager进行自动化安装。
  Cloudera-Managerceql(本文中简称CM)是一个工具,CM能够管理一个大的Hadoop cluster并不是一只要下载tar files什么压缩并启动services这么简单。后续有非常多设定、监控等麻烦的事要处理,CM都能够做到,有些类似Casti。Cloudera Manager整合了一列的功能让系统管理者能更方便的维护Hadoop。
  

1.2、CDH的主要功能?

  • 管理
  • 监控
  • 诊断
  • 集成

1.3、CDH版本衍化

  Hadoop是一个开源项目,所以很多公司在这个基础进行商业化,Cloudera对hadoop做了相应的改变。
  Cloudera公司的发行版,我们将该版本称为CDH(Cloudera Distribution Hadoop)。截至目前为止,CDH共有5个版本,其中,前两个已经不再更新,最近的两个,分别是CDH4在Apache Hadoop 2.0.0版本基础上演化而来的),CDH5,它们每隔一段时间便会更新一次。
  Cloudera以Patch Level划分小版本,比如Patch Level为923.142表示在原生态Apache Hadoop 0.20.2基础上添加了1065个Patch(这些Patch是各个公司或者个人贡献的,在Hadoop jira上均有记录),其中923个是最后一个Beta版本添加的Patch,而142个是稳定版发行后新添加的Patch。由此可见,Patch Level越高,功能越完备且解决的Bug越多。
  Cloudera版本层次更加清晰,且它提供了适用于各种操作系统的Hadoop安装包,可直接使用apt-get或者yum命令进行安装,更加省事。

1.4、CDH5.1.2支持的主要组件简要介绍

  • HTTPFS
      1:Httpfs是Cloudera公司提供的一个Hadoop Hdfs的一个Http接口,通过WebHDFS REST API 可以对hdfs进行读写等访问
      2:与WebHDFS的区别是不需要客户端可以访问Hadoop集群的每一个节点,通过Httpfs可以访问放置在防火墙后面的Hadoop集群
      3:Httpfs是一个Web应用,部署在内嵌的Tomcat中

  • HBASE
      Hbase是Bigtable的开源山寨版本。是建立的Hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。
      它介于Bosql和RDBMS之间,仅能通过主键(row key)和主键的Range来检索数据,仅支持单行事务(可通过Hive支持来实现多表Join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。
      与Hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

  • HDFS
      Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。

  • HIVE
      Hive 是一个基于 Hadoop 的开源数据仓库工具,用于存储和处理海量结构化数据。它把海量数据存储于 Hadoop 文件系统,而不是数据库,但提供了一套类数据库的数据存储和处理机制,并采用 HQL (类 SQL )语言对这些数据进行自动化管理和处理。我们可以把 Hive 中海量结构化数据看成一个个的表,而实际上这些数据是分布式存储在 HDFS 中的。 Hive 经过对语句进行解析和转换,最终生成一系列基于 hadoop 的 Map/Reduce 任务,通过执行这些任务完成数据处理。

  • HUE
      Hue是CDH专门的一套WEB管理器,它包括3个部分Hue Ui,Hue Server,Hue db。Hue提供所有的CDH组件的Shell界面的接口。你可以在Hue编写MR,查看修改HDFS的文件,管理Hive的元数据,运行Sqoop,编写Oozie工作流等大量工作。

  • Impala
      Impala对你存储在Apache Hadoop在HDFS,HBase的数据提供直接查询互动的SQL。除了像Hive使用相同的统一存储平台,Impala也使用相同的元数据,SQL语法(Hive SQL),ODBC驱动程序和用户界面(Hue Beeswax)。Impala还提供了一个熟悉的面向批量或实时查询和统一平台。

  • MapReduce
      MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念”Map(映射)”和”Reduce(归约)”,和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。他极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。MapReduce更多运行于离线系统,而实时计算,可以使用Storm。关于Sotrm的使用和介绍,可以参考这篇文章《ubuntu12.04+storm0.9.2分布式集群的搭建》。

  • Oozie
      Oozie是Yahoo针对Apache Hadoop开发的一个开源工作流引擎。用于管理和协调运行在Hadoop平台上(包括:HDFS、Pig和MapReduce)的Jobs。Oozie是专为雅虎的全球大规模复杂工作流程和数据管道而设计。

  • Solr
      Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对 Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用 Solr 创建的索引。

  • Spark
      Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。
      Spark和Storm类似,都是基于内存的运行,不确定哪种方式在数据吞吐量上要具优势,不过Storm计算时间延迟要小。关于Sotrm的使用和介绍,可以参考这篇文章《ubuntu12.04+storm0.9.2分布式集群的搭建》。

  • Sqoop
      Sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从关系型数据库中导入数据到HDFS。sqoop架构非常简单,其整合了Hive、Hbase和Oozie,通过map-reduce任务来传输数据,从而提供并发特性和容错。sqoop主要通过JDBC和关系数据库进行交互。理论上支持JDBC的database都可以使用sqoop和hdfs进行数据交互。
      

  • YARN
      YARN可以理解为是Hadoop MapReduceV2版本,YARN重构根本的思想是将 JobTracker 两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度 / 监控。新的资源管理器全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调。一个应用程序无非是一个单独的传统的 MapReduce 任务或者是一个 DAG( 有向无环图 ) 任务。ResourceManager 和每一台机器的节点管理服务器能够管理用户在那台机器上的进程并能对计算进行组织。
      事实上,每一个应用的 ApplicationMaster 是一个详细的框架库,它结合从 ResourceManager 获得的资源和 NodeManager 协同工作来运行和监控任务。

  • Zookeeper
     Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
      Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。

2、CDH的官网在哪里?

  http://www.cloudera.com/

3、CDH在哪里下载?

  由于CDH有多个版本,作者不建议单独下载安装,可以通过cloudera-manager-daemons、cloudera-manager-server、cloudera-manager-agent来安装,本文后面会有介绍。

4、如何安装

4.1、设置Host

  修改Host

root@m1:~# cat /etc/hosts 
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.10    m1.linuxidc.com   m1
192.168.1.11    m2.linuxidc.com   m2
192.168.1.12    s1.linuxidc.com   s1
192.168.1.13    s2.linuxidc.com   s2


# The following lines are desirable for IPv6 capable hosts
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

4.2、设置静态IP

  修改成静态IP地址

root@m1:~# vi /etc/network/interfaces
iface wlan0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1
dns-nameservers 8.8.8.8

4.3、设置Host

  修改主机名称

root@m1:~# cat /etc/hostname 
m1.linuxidc.com

4.4、关闭防火墙

root@m1:~# ufw disable

4.5、安装JDK7,CDH5要求至少是Oracle JDK7

  添加 PPA repository 到系统

root@m1:~# add-apt-repository ppa:webupd8team/java
root@m1:~# apt-get update
root@m1:~# sudo apt-get upgrade
  • 1
  • 2
  • 3

  过程中会弹出个框,选择YES,因为要下载二进制包,所以可能会慢一些

root@m1:~# apt-get install oracle-java7-installer

  
  将Oracle 7 设置成默认版本

root@m1:~# apt-get install oracle-java7-set-default

   查看当前Java版本

root@m1:~# java -version 
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01) 
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

4.6、安装MySql最新版,CM的数据库我们用My Sql管理

  安装Mysql Server,后面在安装Cloudera Manager的时候会用到,如果你要使用PostGreSQL ,可以跳过这一步 (4.6-4.8)。
  

4.6.1、在主机上使用apt-get安装My Sql

  在主机上使用apt-get安装My Sql,安装过程中会有提示,一直接回车就可以 (4台机器都要执行)

root@m1:~# apt-get install mysql-server

4.6.2、修改MySql配置,方便CM使用

4.6.2.1、配置MySql的监听地址

  对MySQL的配置项进行修改,先备份,找到“bind-address = 127.0.0.1”这一行,然后注释掉,改成“bind-address = 0.0.0.0”

root@m1:~# cp /etc/mysql/my.cnf /etc/mysql/my.cnf.bak 
root@m1:~# vi /etc/mysql/my.cnf 
#bind-address = 127.0.0.1 
bind-address = 0.0.0.0

4.6.2.2、配置MySql的其他配置,为了CM使用

  MySql配置中,其中对于Cloudera的支持,可以参考官方描述

[client]
default-character-set=utf8
[mysqld]
transaction-isolation=READ-COMMITTED
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0
character-set-server=utf8
key_buffer              = 16M
key_buffer_size         = 32M
max_allowed_packet      = 32M
thread_stack            = 256K
thread_cache_size       = 64
query_cache_limit       = 8M
query_cache_size        = 64M
query_cache_type        = 1

max_connections         = 550

# log-bin should be on a disk with enough free space
# NOTE: replace '/x/home/mysql/logs/binary' below with
#       an appropriate path for your system.
log-bin=/x/home/mysql/logs/binary/mysql_binary_log

# For MySQL version 5.1.8 or later. Comment out binlog_format for older versions.
binlog_format           = mixed

read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M

# InnoDB settings
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit  = 2
innodb_log_buffer_size          = 64M
innodb_buffer_pool_size         = 4G
innodb_thread_concurrency       = 8
innodb_flush_method             = O_DIRECT
innodb_log_file_size = 512M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

4.7、创建后面在CM中会使用的数据库

root@m1:~# mysql -u root -p 
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or g. 
Your MySQL connection id is 42 
Server version: 5.5.38-0ubuntu0.14.04.1 (Ubuntu) 

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. 

## Cloudera manager db user, database and grant
mysql> create user 'cmf'@'%' identified by 'xyz'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> create database cmf  DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec) 

mysql> grant all privileges on cmf.* to 'cmf'@'%' identified by 'xyz'; 
Query OK, 0 rows affected (0.00 sec) 

## For activity monitor 
mysql> create user 'amon'@'%' identified by 'xyz'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> create database amon  DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec) 

mysql> grant all privileges on amon.* to 'amon'@'%' identified by 'xyz'; 
Query OK, 0 rows affected (0.00 sec) 

## Hive Meta store 
mysql> create user 'hive'@'%' identified by 'xyz'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> create database metastore  DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec) 

mysql> grant all privileges on metastore.* to 'hive'@'%' identified by 'xyz'; 
Query OK, 0 rows affected (0.00 sec) 

## Flush all changes 
mysql> FLUSH PRIVILEGES; 
Query OK, 0 rows affected (0.00 sec)

4.8、重启MySql,查看3306端口,并安装MySql、Java的支持

root@m1:~# service mysql restart
root@m1:~# netstat -tulpn | grep :3306 
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2207/mysqld
root@m1:~# apt-get install libmysql-java 
Reading package lists... Done 
Building dependency tree 
Reading state information... Done 
Suggested packages: 
liblog4j1.2-java libcommons-logging-java 
The following NEW packages will be installed: 
libmysql-java 
0 upgraded, 1 newly installed, 0 to remove and 4 not upgraded. 
Need to get 894 kB of archives. 
After this operation, 1,060 kB of additional disk space will be used. 
Get:1 http://mirrors.sohu.com/ubuntu/ trusty/universe libmysql-java all 5.1.28-1 [894 kB] 
Fetched 894 kB in 1s (718 kB/s) 
Selecting previously unselected package libmysql-java. 
(Reading database ... 96338 files and directories currently installed.) 
Preparing to unpack .../libmysql-java_5.1.28-1_all.deb ... 
Unpacking libmysql-java (5.1.28-1) ... 
Setting up libmysql-java (5.1.28-1) ... 
root@m1:~#

4.9、安装Cloudera Manager组件

4.9.1、将Ubuntu 14.04暂时伪造成Ubuntu12.04

  Ubuntu 14.04暂时伪造成Ubuntu12.04,因为在写本文时CM现在还不支持14.04这个版本,CDH以后的版本应该会支持吧(4台机器都要执行)
  备份文件:

root@m1:~# cp /etc/lsb-release /etc/lsb-release.bak 

  使用VI编译文件,暂时修改成Ubuntu12.04 LTS的信息:

root@m1:~# vi /etc/lsb-release 
DISTRIB_ID=Ubuntu 
DISTRIB_RELEASE=12.04 
DISTRIB_CODENAME=precise 
DISTRIB_DESCRIPTION="Ubuntu 12.04.3 LTS"

4.9.2、升级Ubuntu的utils包,CM所必需要

  在所有机器上安装debian的包,升级utils,执行以下命令:(4台机器都要执行)

root@m1:~# wget http://ftp.cn.debian.com/debian/pool/main/f/fuse/fuse-utils_2.9.0-2+deb7u1_all.deb
root@m1:~# dpkg -i fuse-utils_2.9.0-2+deb7u1_all.deb

4.9.3、将CDH5的软件源添加到Apt中

root@m1:~# curl "http://archive.cloudera.com/cm5/ubuntu/precise/amd64/cm/cloudera.list" -o /etc/apt/sources.list.d/cloudera_precise.list
root@m1:~# curl -s http://archive.cloudera.com/cdh5/ubuntu/precise/amd64/cdh/archive.key | sudo apt-key add -
root@m1:~# apt-get update

4.9.4、安装Cloudera Manager

  安装Cloudera Manager(4台机器都要执行)

root@m1:~# apt-get install cloudera-manager-daemons cloudera-manager-server

4.9.5、修改Cloudera-Manager-Server的配置文件db.properties,设置MySql连接

  修改Cloudera-Manager-Server的配置文件db.properties,设置刚才我们在(4.7)Mysql中创建的cmf数据库、用户名、密码(4台机器都要执行)

root@m1:~# vi /etc/cloudera-scm-server/db.properties 
com.cloudera.cmf.db.type=mysql
com.cloudera.cmf.db.host=m1.linuxidc.com
com.cloudera.cmf.db.name=cmf
com.cloudera.cmf.db.user=cmf
com.cloudera.cmf.db.password=xyz

4.9.6、安装ntp ,CM agents需要用到”ntpdc”

  安装ntp ,CM agents需要用到”ntpdc”(4台机器都要执行)

root@m1:~# apt-get install ntp 
Reading package lists... Done 
Building dependency tree 
Reading state information... Done 
The following extra packages will be installed: 
libopts25 
Suggested packages: 
ntp-doc 
The following NEW packages will be installed: 
libopts25 ntp 
0 upgraded, 2 newly installed, 0 to remove and 4 not upgraded. 
Need to get 666 kB of archives. 
After this operation, 1,668 kB of additional disk space will be used. 
Do you want to continue? [Y/n] y 
Get:1 http://mirrors.sohu.com/ubuntu/ trusty/main libopts25 amd64 1:5.18-2ubuntu2 [55.3 kB] 
Get:2 http://mirrors.sohu.com/ubuntu/ trusty/main ntp amd64 1:4.2.6.p5+dfsg-3ubuntu2 [611 kB] 
Fetched 666 kB in 1s (537 kB/s) 
Selecting previously unselected package libopts25:amd64. 
(Reading database ... 95843 files and directories currently installed.) 
Preparing to unpack .../libopts25_1%3a5.18-2ubuntu2_amd64.deb ... 
Unpacking libopts25:amd64 (1:5.18-2ubuntu2) ... 
Selecting previously unselected package ntp. 
Preparing to unpack .../ntp_1%3a4.2.6.p5+dfsg-3ubuntu2_amd64.deb ... 
Unpacking ntp (1:4.2.6.p5+dfsg-3ubuntu2) ... 
Processing triggers for man-db (2.6.7.1-1) ... 
Processing triggers for ureadahead (0.100.0-16) ... 
Setting up libopts25:amd64 (1:5.18-2ubuntu2) ... 
Setting up ntp (1:4.2.6.p5+dfsg-3ubuntu2) ... 
* Starting NTP server ntpd [ OK ] 
Processing triggers for libc-bin (2.19-0ubuntu6.1) ... 
Processing triggers for ureadahead (0.100.0-16) ... 
root@m1:~#

4.9.7、重启Cloudera Manager Server

  启动Cloudera manager (4台机器都要执行)

root@m1:~# service cloudera-scm-server start 
Starting cloudera-scm-server: * cloudera-scm-server started 
root@m1:~#
  • 1
  • 2
  • 3

  查看Cloudera manager的启动日志,如果能够看到下面的类似信息,说明启动正确,tailf -100 /var/log/cloudera-scm-server/cloudera-scm-server.log或者/var/log/cloudera-scm-server/cloudera-scm-server.out,如果看不到类似下面的信息,那么也可以看到哪里出了问题,大多数都是和数据库的配置有关系。

2014-08-26 23:07:52,643 INFO [JvmPauseMonitor:debug.JvmPauseMonitor@236] Detected pause in JVM or host machine (e.g. a stop the world GC, or JVM not scheduled): paused approximately 1182ms: GC pool 'Copy' had collection(s): count=1 time=1641ms 
2014-08-26 23:07:52,644 INFO [JvmPauseMonitor:debug.JvmPauseMonitor@236] Detected pause in JVM or host machine (e.g. a stop the world GC, or JVM not scheduled): paused approximately 1634ms: GC pool 'Copy' had collection(s): count=1 time=1641ms 
2014-08-26 23:07:52,696 INFO [WebServerImpl:servlet.DispatcherServlet@339] FrameworkServlet 'Spring MVC Dispatcher Servlet': initialization completed in 18068 ms 
2014-08-26 23:07:52,793 INFO [WebServerImpl:cmon.JobDetailGatekeeper@127] ActivityMonitor configured to allow job details for all jobs. 
2014-08-26 23:07:53,407 INFO [SearchRepositoryManager-0:components.SearchRepositoryManager@399] Initializing SearchTemplateManager:2014-08-27T06:07:53.407Z 
2014-08-26 23:07:53,730 INFO [SearchRepositoryManager-0:components.SearchRepositoryManager@403] Generating entities:2014-08-27T06:07:53.730Z 
2014-08-26 23:07:53,821 INFO [SearchRepositoryManager-0:components.SearchRepositoryManager@407] Num entities:112 
2014-08-26 23:07:53,822 INFO [SearchRepositoryManager-0:components.SearchRepositoryManager@409] Generating documents:2014-08-27T06:07:53.822Z 
2014-08-26 23:07:53,891 INFO [SearchRepositoryManager-0:components.SearchRepositoryManager@411] Num docs:124 
2014-08-26 23:07:53,892 INFO [SearchRepositoryManager-0:components.SearchRepositoryManager@352] Constructing repo:2014-08-27T06:07:53.892Z 
2014-08-26 23:07:53,979 INFO [WebServerImpl:mortbay.log@67] jetty-6.1.26.cloudera.2 
2014-08-26 23:07:54,008 INFO [WebServerImpl:mortbay.log@67] Started [email protected]:7180 
2014-08-26 23:07:54,009 INFO [WebServerImpl:cmf.WebServerImpl@292] Started Jetty server. 
2014-08-26 23:07:55,276 INFO [SearchRepositoryManager-0:components.SearchRepositoryManager@354] Finished constructing repo:2014-08-27T06:07:55.276Z

4.10、通过Web方式继续安装

4.10.1、创建update-alternatives工具在/usr/sbin/下创建软链

  创建update-alternatives工具在/usr/sbin/下创建软链(在4台机器上一起执行)(4台机器都要执行)

root@m1:~# sudo ln -s /usr/bin/update-alternatives /usr/sbin/update-alternatives
  • 1

4.10.2、打开浏览器,输入 http://m1.linuxidc.com:7180/ 开始安装

  使用浏览器打开能够看到登录页面,那么恭喜你成功了。 http://m1.linuxidc.com:7180/(帐号和密码都是admin)

未分类

4.10.3、选择安装的CDH版本

  我们来安装Cloudera Express,之前官方有说这个版本有50个节点的限制,在CDH5.1.0版本也有看到,在写本文记录时的5.1.2版本不知道为什么我在安装的时候并未看到。
  
未分类

4.10.4、为CDH集群添加主机

  选择指定的CDH集群,可以添加多台机器,也可以使用IP匹配,输入完机器名称后,点search按钮,我输入的内容为”m1.linuxidc.com”
  
未分类

  CDH会根据你给出的内容,搜索到机器
  
未分类

4.10.5、选择CDH的安装方式

  选择存储方式,我们使用Parcel方式安装。系统会自动下载Parcel
  
未分类
  
  是否需要加密,如果你不考虑这些,可以不用选择这个复选框
  
未分类

  
  提供SSH登录凭据,这里建议使用root帐号,避免一些新同学,对其他帐号的权限设置不完整,导致后面安装出现错误。如何设置4台机器之前SSH免密码登录,就不在这里介绍了,如果不会,可以去搜索下。在这之前4台机器请配置好SSH免密码登录。
 
未分类
  
  安装过程中的状态,会下载CDH使用的包,可能会慢一些,要有耐心~~~~
  
未分类
  
  如果在安装过程中出现了以下错误“ImportError: No module named _io”,或者如下图中的提示,不用担心,这是一个已知问题。这是因为CDH5使用的Python版本问题。执行完下面的脚本后,点击重试就可以顺利的完成安装了。如果出现打不开CM Agent的log日志提示,那很可能是你的Host配置有问题,请参考本文最初写的Host配置。

root@m1:~# mv /usr/lib/cmf/agent/build/env/bin/python /usr/lib/cmf/agent/build/env/bin/python.bak
root@m1:~# cp /usr/bin/python2.7 /usr/lib/cmf/agent/build/env/bin/python

  安装完成了

未分类 

4.10.6、离线方式安装CDH的Parcel

  继续安装选定 Parcel

  如果你想要提高速度,可以按以下方法离线安装

    (1)、使用迅雷到http://archive.cloudera.com/cdh5/parcels/5.1.2/目录,下载CDH-5.1.2-1.cdh5.1.2.p0.3-precise.parcel和mainfest.json文件

    (2)、上传到/opt/cloudera/parcel-repo目录中,同时创建一个CDH-5.1.2-1.cdh5.1.2.p0.3-precise.parcel.sha文件,内容为”a492e4b6dece2850f0a37f2bf613ecb2980dfd37”,这个值可以在下载目录中的manifest.json文件中找到。然后看相对应的json->parcelName同一级的hash值。

    (3)、下载http://archive.cloudera.com/accumulo-c5/parcels/1.6.0.51/ACCUMULO-1.6.0-1.cdh5.1.0.p0.51-precise.parcel、http://archive.cloudera.com/sqoop-connectors/parcels/1.2/SQOOP_NETEZZA_CONNECTOR-1.2c5-precise.parcel、http://archive.cloudera.com/sqoop-connectors/parcels/1.2/SQOOP_TERADATA_CONNECTOR-1.2c5-precise.parcel

    (4)、参考步骤2,创建相应的.sha文件,.sha文件中的内容如下:

root@m1:/opt/cloudera/parcel-repo# echo "a719f373833a63108c616afb034d97c4e11405d5" >> ACCUMULO-1.6.0-1.cdh5.1.0.p0.51-precise.parcel.sha
root@m1:/opt/cloudera/parcel-repo# echo "a492e4b6dece2850f0a37f2bf613ecb2980dfd37"  >> CDH-5.1.2-1.cdh5.1.2.p0.3-precise.parcel.sha
root@m1:/opt/cloudera/parcel-repo# echo "48bedfff38f742d32541854e24b3310992616027" >> SQOOP_NETEZZA_CONNECTOR-1.2c5-precise.parcel.sha
root@m1:/opt/cloudera/parcel-repo# echo "76566b4797bd061d01cf25b36b21b26927ada9a4" >> SQOOP_TERADATA_CONNECTOR-1.2c5-precise.parcel.sha

    (5)、设置文件的使用权限

root@m1:/opt/cloudera/parcel-repo# chmod 777 -R .
root@m1:/opt/cloudera/parcel-repo# chown cloudera-scm:cloudera-scm ./*

    (6)、查看下载后的文件列表

root@m1:/opt/cloudera/parcel-repo# ll 
total 1709280 
drwxrwxrwx 2 cloudera-scm cloudera-scm 4096 Sep 1 01:16 ./ 
drwxr-xr-x 6 root root 4096 Sep 1 01:51 ../ 
-rwxrwxrwx 1 cloudera-scm cloudera-scm 13204338 Aug 31 21:37 ACCUMULO-1.6.0-1.cdh5.1.0.p0.51-precise.parcel* 
-rwxrwxrwx 1 cloudera-scm cloudera-scm 41 Sep 1 01:15 ACCUMULO-1.6.0-1.cdh5.1.0.p0.51-precise.parcel.sha* 
-rwxrwxrwx 1 cloudera-scm cloudera-scm 1727519860 Sep 1 00:27 CDH-5.1.2-1.cdh5.1.2.p0.3-precise.parcel* 
-rwxrwxrwx 1 cloudera-scm cloudera-scm 41 Sep 1 01:15 CDH-5.1.2-1.cdh5.1.2.p0.3-precise.parcel.sha* 
-rwxrwxrwx 1 cloudera-scm cloudera-scm 41602 Sep 1 01:13 SQOOP_NETEZZA_CONNECTOR-1.2c5-precise.parcel* 
-rwxrwxrwx 1 cloudera-scm cloudera-scm 41 Sep 1 01:16 SQOOP_NETEZZA_CONNECTOR-1.2c5-precise.parcel.sha* 
-rwxrwxrwx 1 cloudera-scm cloudera-scm 9499051 Sep 1 01:13 SQOOP_TERADATA_CONNECTOR-1.2c5-precise.parcel* 
-rwxrwxrwx 1 cloudera-scm cloudera-scm 41 Sep 1 01:16 SQOOP_TERADATA_CONNECTOR-1.2c5-precise.parcel.sha*

未分类
   
  主机正确性检查,和当前m1.linuxidc.com的CDH5.12组件版本汇总。
  
未分类

未分类    

4.10.7、在m1.linuxidc.com上安装ZooKeeper服务

  选择要安装的集群服务,我们来安装ZooKeeper。如下图选择

未分类
  
  自定义角色分配

未分类
  
  数据库设置,我们输入之前在MySql中(4.7)创建的Activity Monitor使用的数据库amon以及用户名、密码,点击测试链接,可以看到成功信息。
  
未分类
  
  审核更改,如果你没有邮件要配置,可以什么都不用输入

未分类
  
  
  升级完成,并且成功启动ZooKeeper、CM Service服务。

未分类  

4.10.8、初始化完成,进入CM主页

  升级完成,就可以进入主页

未分类
  
  查看m1.linuxidc.com的运行状态

未分类

4.10.9、恢复Ubuntu 14.04版本信息

  最后我们恢复ubuntu 14.04版本信息

root@cm1:~# rm /etc/lsb-release /etc/lsb-release.bak
root@cm1:~# mv /etc/lsb-release.bak  /etc/lsb-release
  • 1
  • 2

4.11、通过CM管理多个集群

4.11.1、添加1个新的集群,机器名称为m2.linuxidc.com

  有的时候,因为业务原因,不同的服务我们要使用不同的集群,便于管理和维护,下面我们再使用CM来测试创建一个新集群Cluster 2
  添加其他主机,我们测试将m2.linuxidc.com也做为一个新集群添加到CM中。点击CM主页右上角的添加集群,会重复看到(参考4.10.4章节)的页面
  
未分类

未分类

  再继续安装,可以参考(4.10.5章节-4.10.7章节)的页面重复操作,下面只给出将m2.linuxidc.com加入到集群的安装过程中部分截图。
  m2.linuxidc.com机器上要有cloudera-manager-server、cloudera-manager-daemons、cloudera-manager-agent(这个可以不用安装,但机器上要有包)。cloudera-manager-server、cloudera-manager-daemons的安装,可以参考4.9.4章节,配置可以参考4.9.5章节,服务是启动状态。
  
未分类

未分类

未分类

4.11.2、完成安装,验证m2.linuxidc.com是否成功地添加到集群Cluster 2

未分类

4.12、向1个集群添加1台新主机

4.12.1、开始添加,输入要添加的机器名称s1.linuxidc.com

未分类
  
  选择存储库,为了保持统一,建议使用与当前CM一样的版本,然后会继续走4.10.5的步骤
  
未分类
  
  再继续安装,可以参考(4.10.5章节-4.10.7章节)的页面重复操作,下面只给出将s1.linuxidc.com加入到集群的安装过程中部分截图。
  m2.linuxidc.com机器上要有cloudera-manager-server、cloudera-manager-daemons、cloudera-manager-agent(这个可以不用安装,但机器上要有包)。
  cloudera-manager-server、cloudera-manager-daemons的安装,可以参考4.9.4章节,配置参考4.9.5章节。cloudera-manager-server的服务要在启动状态。

未分类

未分类

4.12.2、选择主机模

未分类

未分类

未分类

4.12.3、完成将s1.linuxidc.com添加到集群

未分类

4.12.4、验证s1.linuxidc.com是否成功地添加到集群Cluster 1

未分类

未分类

  到此为主,在Ubuntu 14.04下使用apt-get方式,安装CDH5.12已经成功。并且支持中文,后面有什么服务或者机器要添加的,可以自己来做了。

5、FAQ

5.1、过程中如果出现”Incorrect string value: ‘x“的提示

  是和数据库的编码有关,在mysql中执行以下语句:

alter table CLIENT_CONFIGS convert to character set utf8;
alter table CLUSTERS convert to character set utf8;
alter table CLUSTERS_AUD convert to character set utf8;
alter table CLUSTER_ACTIVATED_RELEASES convert to character set utf8;
alter table CLUSTER_ACTIVATED_RELEASES_AUD convert to character set utf8;
alter table CLUSTER_MANAGED_RELEASES convert to character set utf8;
alter table CLUSTER_UNDISTRIBUTED_RELEASES convert to character set utf8;
alter table CM_PEERS convert to character set utf8;
alter table CM_VERSION convert to character set utf8;
alter table COMMANDS convert to character set utf8;
alter table COMMAND_SCHEDULES convert to character set utf8;
alter table CONFIGS convert to character set utf8;
alter table CONFIGS_AUD convert to character set utf8;
alter table CONFIG_CONTAINERS convert to character set utf8;
alter table CREDENTIALS convert to character set utf8;
alter table GLOBAL_SETTINGS convert to character set utf8;
alter table HOSTS convert to character set utf8;
alter table HOSTS_AUD convert to character set utf8;
alter table HOST_TEMPLATES convert to character set utf8;
alter table HOST_TEMPLATE_TO_ROLE_CONF_GRP convert to character set utf8;
alter table METRICS convert to character set utf8;
alter table PARCELS convert to character set utf8;
alter table PARCEL_COMPONENTS convert to character set utf8;
alter table PROCESSES convert to character set utf8;
alter table PROCESS_ACTIVE_RELEASES convert to character set utf8;
alter table RELEASES convert to character set utf8;
alter table RELEASES_AUD convert to character set utf8;
alter table REVISIONS convert to character set utf8;
alter table ROLES convert to character set utf8;
alter table ROLES_AUD convert to character set utf8;
alter table ROLE_CONFIG_GROUPS convert to character set utf8;
alter table ROLE_CONFIG_GROUPS_AUD convert to character set utf8;
alter table ROLE_STALENESS_STATUS convert to character set utf8;
alter table SCHEMA_VERSION convert to character set utf8;
alter table SERVICES convert to character set utf8;
alter table SERVICES_AUD convert to character set utf8;
alter table SNAPSHOT_POLICIES convert to character set utf8;
alter table USERS convert to character set utf8;
alter table USER_ROLES convert to character set utf8;
alter table USER_SETTINGS convert to character set utf8;

apt方式安装LNMP环境教程(ubuntu17.10|PHP7.1)

1. 简要说明

安装环境是阿里云ubuntu17.10,这个教程里我把域名都写成hostname.com, ip都写成192.168.1.1,你可以根据自己的需要更换。另外如果不是root账户的话,最好切换到root账户。

sudo su

2. 安装MYSQL 5.7

我们使用apt-get方式安装MySQL:

apt-get -y install mysql-server mysql-client

安装的时候会要求你输入MySQL的root密码,建议此时输入,比较方便。
输入以下命令,让MySQL更安全:

mysql_secure_installation

我们将会被问这些问题:

root@root:~# mysql_secure_installationSecuring the MySQL server deployment.Enter password for user root: 这里输入MySQL密码VALIDATE PASSWORD PLUGIN can be used to test passwordsand improve security. It checks the strength of passwordand allows the users to set only those passwords which aresecure enough. Would you like to setup VALIDATE PASSWORD plugin?Press y|Y for Yes, any other key for No: 想要让MySQL验证密码强度可以填Y,但个人建议N。otherwise.Using existing password for root.Change the password for root ? ((Press y|Y for Yes, any other key for No) : 建议NoBy default, a MySQL installation has an anonymous user,allowing anyone to log into MySQL without having to havea user account created for them. This is intended only fortesting, and to make the installation go a bit smoother.You should remove them before moving into a productionenvironment.Remove anonymous users? (Press y|Y for Yes, any other key for No) : 这个要填YSuccess.Normally, root should only be allowed to connect from'localhost'. This ensures that someone cannot guess atthe root password from the network.Disallow root login remotely? (Press y|Y for Yes, any other key for No) : 是否允许root远程登录?想要更安全选Y,但我建议选N,可以避免很多问题。Success.By default, MySQL comes with a database named 'test' thatanyone can access. This is also intended only for testing,and should be removed before moving into a productionenvironment.Remove test database and access to it? (Press y|Y for Yes, any other key for No) : 这个选Y,移除没用的test表。- Dropping test database...Success.- Removing privileges on test database...Success.Reloading the privilege tables will ensure that all changesmade so far will take effect immediately.Reload privilege tables now? (Press y|Y for Yes, any other key for No) : 选YSuccess.All done!

MySQL就装好了。

3. 安装Nginx

apt-get install nginx
apt-get install nginx

然后你打开你的IP地址或域名,就能看见nginx默认页面了。

未分类

nginx默认的路径在/var/www/html

4. 安装PHP7.1

我们搭建wordpress博客主要要用到php-fpm组件,我们apt-get它,ubuntu会自动安装必要的php程序。

apt-get -y install php7.1-fpm

5. 配置nginx

编辑nginx的默认站点配置文件

vim /etc/nginx/sites-available/default
server { listen 80 default_server; listen [::]:80 default_server; # SSL configuration # # listen 443 ssl default_server; # listen [::]:443 ssl default_server; # # Note: You should disable gzip for SSL traffic. # See: https://bugs.debian.org/773332 # # Read up on ssl_ciphers to ensure a secure configuration. # See: https://bugs.debian.org/765782 # # Self signed certs generated by the ssl-cert package # Don't use them in a production server! # # include snippets/snakeoil.conf;root /var/www/html;# Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html;server_name _;location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; }# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ .php$ { include snippets/fastcgi-php.conf; # With php7.0-cgi alone: fastcgi_pass 127.0.0.1:9000; # With php7.0-fpm: # fastcgi_pass unix:/run/php/php7.0-fpm.sock; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /.ht { deny all; }}

另外需要注意,我们是要安装wordpress的,所以又一个index的地方(# Add index.php to the list),在index后面要增加index.php

PHP-FPM默认是通过socket连接的,我们要改成用TCP链接。

vim /etc/php/7.0/fpm/pool.d/www.conf

修改listen:

;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000

像上面那样修改后,重启nginx:

service nginx restart

然后打开:

vim /etc/php/7.1/fpm/php.ini

设置cgi.fix_pathinfo=0

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting; of zero causes PHP to behave as before. Default is 1. You should fix your scripts; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.; http://php.net/cgi.fix-pathinfocgi.fix_pathinfo=0

reload php-fpm:

service php7.0-fpm reload

新建一个文件:

vim /var/www/html/info.php

写入

<?php
phpinfo();
?>

然后我们可以打开浏览器输入域名,例如 192.168.1.1/info.php(你的显示应该是php7.1)

未分类

你可以看到PHP已经工作了,包括现在支持的一些模块。

6. 使PHP7.1支持MySQL

我们可以先看一下有哪些PHP7.1的模块:

apt-cache search php7.1

可以选一些你喜欢的模块安装(以下是我自己安装的):

apt-get -y install php7.1-mysql php7.1-gd php7.1-curl php7.1-intl php7.1-mcrypt

reload PHP-FPM:

service php7.1-fpm reload

刷新一下192.168.1.1/info.php,看一下自己的模块是否都安装好了。

这样就安装配置好了,接下来就可以在/var/www/html里上传wordpress文件了。

使用apt-get时出现 “no public key available” 的解决方法

在 Debian 和 Ubuntu 下运行 apt-get update 刷新更新源的时候,经常遇到 “There is no public key available for the following key IDs” 的问题,具体表现为以下错误提示:

W:There is no public key available for the following key IDs: 3B4FE6ACC0B21F32,
W:There is no public key available for the following key IDs: 3B4FE6ACC0B21F32,

解决方法如下,

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32

把 3B4FE6ACC0B21F32 替换为你出现问题的IDs。另外,如果有如下问题,是因为加入了 natty-backports 源,删掉即可:

W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/main/source/Sources 404 Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/restricted/source/Sources 404 Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/universe/source/Sources 404 Not Found [IP: 91.189.91.13 80],
W:Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/natty-backports/multiverse/source/Sources 404 Not Found [IP: 91.189.91.13 80],

运行如下命令:

sudo sed -i '/natty-backports/d' /etc/apt/sources.list{,.d/*}

debian apt-get 更新源文件格式说明

在安装完debian操作系统之后大家做的第一件事大概就是修改source.list(路径:/etc/apt/sources.list)文件了吧,否则你是无法在线更新软件的,那么source.list文件中的各个配置项的具体含义你搞懂了么?下面就以我的source.list文件为例为大家讲解一下。

deb http://mirrors.163.com/debian/ wheezy main non-free contrib
deb http://mirrors.163.com/debian/ wheezy-proposed-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ wheezy main non-free contrib
deb-src http://mirrors.163.com/debian/ wheezy-proposed-updates main non-free contrib

其中可以把每一行分为四个部分,说白了,当你在线更新某个软件时,debian就是遵照这四个选项(准确的说是后三项)的指示找到软件来给你安装的:

deb    ###   ftp地址                         ###  版本代号   ###  限定词
deb    ###   http://mirrors.163.com/debian/ ###  wheezy    ###   main non-free contrib

其中,

1. 第一部分

第一部分为deb或者deb-src,其中前者代表软件的位置,后者代表软件的源代码的位置

2. 第二部分

第二部分为你的ftp镜像的url,以我的为例,我是用的是大陆速度较快的网易镜像。在浏览器中打开此链接以后会发现有如下内容:

未分类

其中:
/dists/ 目录包含”发行版”(distributions), 此处是获得 Debian 发布版本(releases)和已发布版本(pre-releases)的软件包的正规途径. 有些旧软件包及 packages.gz 文件仍在里面.
/pool/ 目录为软件包的物理地址. 软件包均放进一个巨大的 “池子(pool)”, 按照源码包名称分类存放. 为了方便管理, pool 目录下按属性再分类(“main”, “contrib” 和 “non-free”), 分类下面再按源码包名称的首字母归档. 这些目录包含的文件有: 运行于各种系统架构的二进制软件包, 生成这些二进制软件包的源码包.你可以执行命令 apt-cache showsrc mypackagename, 查看 ‘Directory:’ 行获知每个软件包的存放位置. 例如: apache 软件包存放在 pool/main/a/apache/ 目录中.另外, 由于lib*软件包数量巨大, 它们以特殊的方式归档: 例如, libpaper 软件包存放在 pool/main/libp/libpaper/.
还有一些目录:

/tools/:用于创建启动盘, 磁盘分区, 压缩/解压文件, 启动 Linux 的 DOS 下的小工.

/doc/:

基本的 Debian 文档, 如 FAQ, 错误报告系统指导等..

/indices/:

维护人员文件和重载文件.

/project/:

大部分为开发人员的资源, 如: project/experimental/ 本目录包含了处于开发中的软件包和工具, 它们均处于 alpha 测试阶段. 用户不应使用这些软件, 因为即使是经验丰富的用户也会被搞得一团糟.)

3. 第三部分

第三部分表示你的debian版本号(注意,不是某个软件的版本号,而是debian本身的版本号),也有人称这是对debian软件包的一种水平划分(这种说法还是比较形象的),具体这一项怎么写,可以参看http://mirrors.163.com/debian/dists/网页里面的内容(如下图),大致来说按版本的旧–>新程度有这么几大类:oldstable,stable,testing,sid

未分类

1.oldstable顾名思义,就是以前的稳定发行版了,在本例中oldstable就是Debian6.0.8目录的一个链接,两者内容完全一致。

2.stable是指现在的稳定发行版,对于每个debian来说,每个稳定发行版都会有一个代号,如debian 6叫做squeeze,debian 7叫做wheezy,由于在笔者写本文的时候稳定版是debian7,所以stable就是wheezy的一个链接。

3.testing指目前还暂时处于测试阶段的debian发行版,如wheezy往下发展就是jessie了,所以testing代指的就是jessie目录,它是jessie的一个链接。

4.unstable那就是不稳定版本了,但在这个目录清单里我们并没有看到unstable目录,其实它还有一个代号:sid,我们知道debian的发行版本名称大都来自玩具总动员中的角色名称,而sid就是那个专门破坏玩具的邻居家坏小孩,所以就把unstable这个不稳定的软件目录起名为sid了,这里面的软件一般都是最新的,稳定性、安全稳定值得商榷,如果你想做试验小白鼠,大可使用这里的软件。经过一段时间的测试,这里面的软件可能会进入下一个阶段testing目录从而出现在下一个debian发行版中,要么就夭折被直接抛弃了。

4. 第四部分

好了,从水平的角度介绍完debian发行版,现在我们进入这些目录大致看一下里面的内容(以stable目录为例):

未分类

我们会发现每个目录都会包括contrib、main、non-free等几个目录,那么这些目录又是什么东东呢?
以垂直的观点来看 Debian 软件的分布:main、contrib、non-free、non-us
因为 Debian 是非营利组织,但是组织架构严谨,有一套完善的软件管理方式。基于其对软件 free 度的一种坚持,对不同版权软件包的录入有一些限定。
下面是对它们的一些简要介绍:
main Debian 里最基本及主要且符合自由软件规范的软件 ( packages )。
contrib 这里头软件虽然可以在 Debian 里头运作,即使本身属于自由软件但多半却是相依于非自由 ( non-free ) 软件。
non-free 不属于自由软件范畴的软件。
non-us 这个分类里头的软件都来自非美国地区,当中可能有牵扯到专利、加密..等等问题。
marillat 对应 Christian Marillat 的软件仓库,包括mplayer, transcode等。
rareware 对应 rarewares.org 的软件仓库, 包括很多音效程序,如lame, musepack, beep media player等。
ustc 对应 debian@ustc 维护的一些软件包,如 mule-gbk, gaim-openq, scim, stardictdicts, patched xpdf, irssi, xmms。
java 对应 Blackdown java。包括 j2re, j2sdk ,mozilla java plugin。
firefly 对应打过firefly补丁的包,包括 fontconfig mozilla mozilla-firefoxpango1.0 qt-x11-free xft
misc 对应其它无分类的包,包括 nvidia-kernel,winex3, rox, chmsee等

5. 关于源的混用问题

一般不建议混用 stable, testing 和 unstable 的源。因为很多软件之间都有不同程度的相依性,强行的结果会造成更多软件相依、相斥问题的产生,最终可能影响系统稳定与整个软件升级制度的正常运作。

需要把源从低级升到高级是非常简单的,只要修改 sources.list 里的源就好了。但反过来,降级是一种几乎不可能的任务…如果你使用的是高版本的debian,而在source.list文件中配置的是低版本,那么当你在线安装软件的时候很可能会发现有很多软件依赖问题无法解决,当出现这些问题的时候,就要想到是否要修改下source.list文件中的版本问题了

6. 按需修改自己的sources.list

Debian 有自己独特的版本系统,整个系统有三个版本,分别为稳定版(stable),测试版(testing)和不稳定版(unstable/sid)。每次发布的版本都是稳定版,而测试版在经过一段时间的测试证明没有问题后会成为新的稳定。因为稳定版是会更新的,为了便于区分不同时期的稳定版,每个版本又有自己特有的代号(codename),现在的稳定版称为 wheezy(debian7),测试版称为jessie。而不稳定版的代号永远是 sid。

sources.list的写法

1)找到包含dists和pool这两个目录的那个目录,把地址记下来,比如http://mirrors.163.com/debian/;

2)打开dists,里面包含的目录名字,记下来。比如http://mirrors.163.com/debian/,dists/包含wheezy、testing等。把这些目录名字记下来。

3)打开pool目录,看看里面包含哪些组件目录,比如main、contrib、non-free;

4)书写格式:deb<1记下来的地址><2记下来的目录名><3记下来的名字>, 如:

deb http://mirrors.163.com/debian wheezy man contrib non-free

7. 更新软件包列表信息,升级debian

修改/etc/apt/sources.list 之后一般会运行下面两个命令进行更新升级:

sudo apt-get update
sudo apt-get dist-upgrade

其中 :
update – 取回更新的软件包列表信息
dist-upgrade – 发布版升级
第一个命令仅仅更新的软件包列表信息,所以很快就能完成。
第二个命令是全面更新发布版,一般会下载几百兆的新软件包。
其实在运行完第一个命令后系统就会提示你进行更新升级。因为修改了源,所有这次更新的改动可能会很大,比如安装某个包可能会删除太多的其他包,所有系统会提示你运行“sudo apt-get dist-upgrade”进行全面升级或使用软件包管理器中的“标记全部软件包以便升级”功能进行升级。两者效果是一样的。

8. Debian 全球镜像站

http://www.debian.org/mirror/list

apt-get update 和 upgrade 的区别

update

update 是同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。

upgrade

upgrade 是升级已安装的所有软件包,升级之后的版本就是本地索引里的,因此,在执行 upgrade 之前一定要执行 update, 这样才能是最新的。
An update should always be performed before an upgrade or dist-upgrade.
upgrade is used to install the newest versions of all packages currently installed on the system from the sources enumerated in /etc/apt/sources.list. Packages currently installed with new versions available are retrieved and upgraded.

apache .htaccess文件详解和配置技巧总结

一、.htaccess的基本作用

   .htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令。
   .htaccess主要的作用有:URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。
   .htaccess的用途范围主要针对当前目录。

二、启用.htaccess的配置

启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。
打开httpd.conf文件用文本编辑器打开后,查找

复制代码代码如下:

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

改为:

<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>

如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:

复制代码代码如下:

AccessFileName .config

三、.htaccess访问控制

1、访问控制基础:Order命令

  为了限制用户访问一些关键目录,通常加入.htaccess文件,常见的写法如下:

复制代码代码如下:

<Files  ~ "^.*.([Ll][Oo][Gg])|([eE][xX][eE])">
 Order allow,deny
 Deny from all
</Files>

说明:

(1)Files后的波浪线表示启用“正则表达式”,简单的写法有:。

(2)Order命令:通过Allow,Deny参数,Apache首先找到并应用Allow命令,然后应用Deny命令,以阻止所有访问,也可以使用Deny,Allow。

四、URL重写

下面是一段简单的URL重写规则示例:

复制代码代码如下:

# 将 RewriteEngine 模式打开 
RewriteEngine On 
# Rewrite 系统规则请勿修改 
RewriteRule ^p/([0-9]+).html$ index.php?post_id=$1
RewriteRule ^u-(username|uid)-(.+).html$ space.php?$1=$2

其中,RewriteEngine 表示开启URL重写,RewriteRule是重写规则。

五、配置错误页面

基本语法如下:

复制代码代码如下:

# custom error documents
ErrorDocument 401 /err/401.php
ErrorDocument 403 /err/403.php
ErrorDocument 404 /err/404.php
ErrorDocument 500 /err/500.php

六、htaccess常用命令和配置技巧

1. 禁止显示目录列表

有些时候,由于某种原因,你的目录里没有index文件,这意味着当有人在浏览器地址栏键入了该目录的路径,该目录下所有的文件都会显示出来,这会给你的网站留下安全隐患。

为避免这种情况(而不必创建一堆的新index文件),你可以在你的.htaccess文档中键入以下命令,用以阻止
目录列表的显示:

复制代码代码如下:

Options -Indexes

2. 阻止/允许特定的IP地址

某些情况下,你可能只想允许某些特定IP的用户可以访问你的网站(例如:只允许使用特定ISP的用户进入某个目录),或者想封禁某些特定的IP地址(例如:将低级用户隔离于你的信息版面外)。当然,这只在你知道你想拦截的IP地址时才有用,然而现在网上的大多数用户都使用动态IP地址,所以这并不是限制使用的常用方法。
你可以使用以下命令封禁一个IP地址:

复制代码代码如下:

deny from 000.000.000.000

这里的000.000.000.000是被封禁的IP地址,如果你只指明了其中的几个,则可以封禁整个网段的地址。如你输入210.10.56.,则将封禁210.10.56.0~210.10.56.255的所有IP地址。

你可以使用以下命令允许一个IP地址访问网站:

复制代码代码如下:

allow from 000.000.000.000

被允许的IP地址则为000.000.000.000,你可以象封禁IP地址一样允许整个网段。

如果你想阻止所有人访问该目录,则可以使用:

复制代码代码如下:

deny from all

不过这并不影响脚本程序使用这个目录下的文档。

3. 替换index文件

也许你不想一直使用index.htm或index.html作为目录的索引文件。举例来说,如果你的站点使用PHP文件,你可能会想使用 index.php来作为该目录的索引文档。当然也不必局限于“index”文档,如果你愿意,使用.htaccess你甚至能够设置 foofoo.balh来作为你的索引文档!

这些互为替换的索引文件可以排成一个列表,服务器会从左至右进行寻找,检查哪个文档在真实的目录中存在。如果一个也找不到,它将会把目录列表显示出来(除非你已经关闭了显示目录文件列表)。

复制代码代码如下:

DirectoryIndex index.php index.php3 messagebrd.pl index.html index.htm

4. 重定向(rewrite)

.htaccess 最有用的功能之一就是将请求重定向到同站内或站外的不同文档。这在你改变了一个文件名称,但仍然想让用户用旧地址访问到它时,变的极为有用。另一个应用(我发现的很有用的)是重定向到一个长URL,例如在我的时事通讯中,我可以使用一个很简短的URL来指向我的会员链接。以下是一个重定向文件的例子:

复制代码代码如下:

Redirect /location/from/root/file.ext http:///new/file/location.xyz

上述例子中,访问在root目录下的名为oldfile.html可以键入:

复制代码代码如下:

/oldfile.html

访问一个旧次级目录中的文件可以键入:

复制代码代码如下:

/old/oldfile.html

你也可以使用.htaccess重定向整个网站的目录。假如你的网站上有一个名为olddirectory的目录,并且你已经在一个新网站http: ///newdirectory/上建立了与上相同的文档,你可以将旧目录下所有的文件做一次重定向而不必一一声明:

复制代码代码如下:

Redirect /olddirectory http: ///newdirectory

这样,任何指向到站点中/olddirectory目录的请求都将被重新指向新的站点,包括附加的额外URL信息。例如有人键入:

复制代码代码如下:

http: ///olddirecotry/oldfiles/images/image.gif

请求将被重定向到:

复制代码代码如下:

http: ///newdirectory/oldfiles/images/image.gif

如果正确使用,此功能将极其强大。

七、安全配置

下面的htaccess代码能够提高你的web服务器的安全水平。图片链接盗用保护非常有用,它能防止其他人偷盗使用你的服务器上的图片资源。

1. 通过.htaccess放盗链

痛恨那些偷盗链接你的web服务器上的图片资源而耗尽了你的带宽的行为吗?试试这个,你可以防止这种事情的发生。

复制代码代码如下:

RewriteBase /  
RewriteCond %{HTTP_REFERER} !^$  
RewriteCond %{HTTP_REFERER} !^http://(www.)?aqee.net/.*$ [NC]  
RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L] 

2. 防黑客

如果你想提高网站的安全等级,你可以去掉下面的几行代码,这样可以防止一些常见恶意URL匹配的黑客攻击技术。

复制代码代码如下:

RewriteEngine On  

# proc/self/environ? 没门!  
RewriteCond %{QUERY_STRING} proc/self/environ [OR]  

# 阻止脚本企图通过URL修改mosConfig值  
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]  

# 阻止脚本通过URL传递的base64_encode垃圾信息  
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]  

# 阻止在URL含有<script>标记的脚本  
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]  

# 阻止企图通过URL设置PHP的GLOBALS变量的脚本  
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]  

# 阻止企图通过URL设置PHP的_REQUEST变量的脚本  
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})  

# 把所有被阻止的请求转向到403禁止提示页面!  
RewriteRule ^(.*)$ index.php [F,L] 

3. 阻止访问你的 .htaccess 文件或者指定类型的文件

下面的代码可以阻止别人访问你的.htaccess文件。同样,你也可以设定阻止多种文件类型。

# 保护你的 htaccess 文件  
<Files .htaccess>  
order allow,deny  
deny from all  
</Files>  

# 阻止查看指定的文件  
<Files secretfile.jpg>  
order allow,deny  
deny from all  
</Files>  

# 多种文件类型  
<FilesMatch “.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$”>  
 Order Allow,Deny  
Deny from all  
</FilesMatch>[/code] 

4.禁止脚本执行,加强你的目录安全

复制代码代码如下:

# 禁止某些目录里的脚本执行权限  
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi  
Options -ExecCGI

八、一些常用的设置

1. 时区设置

有些时候,当你在PHP里使用date或mktime函数时,由于时区的不同,它会显示出一些很奇怪的信息。下面是解决这个问题的方法之一。就是设置你的服务器的时区。你可以在这里找到所有支持的时区的清单。
1.SetEnv TZ Australia/Melbourne

2. seo/seo.html” target=”_blank”>搜索引擎友好的301永久转向方法

为什么这是搜索引擎友好的呢?因为现在很多现代的搜索引擎都有能根据检查301永久转向来更新它现有的记录的功能。

复制代码代码如下:

Redirect 301 http://www.aqee.net/home http://www.aqee.net/ 

3. 屏蔽下载对话框

通常,当你下载东西的时候,你会看到一个对话框询问你是保持这个文件还是直接打开它。如果你不想看到这个东西,你可以把下面的一段代码放到你的.htaccess文件里。

复制代码代码如下:

AddType application/octet-stream .pdf  
AddType application/octet-stream .zip  
AddType application/octet-stream .mov 

4. 省去www前缀

SEO的一个原则是,确保你的网站只有一个URL。因此,你需要把所有的通过www的访问转向的非www,或者反这来。

复制代码代码如下:

RewriteEngine On  
RewriteBase /  
RewriteCond %{HTTP_HOST} ^www.aqee.net [NC]  
RewriteRule ^(.*)$ http://aqee.net/$1 [L,R=301]

5. 个性化Error页面

对每个错误代码定制自己个性化的错误页面。

复制代码代码如下:

ErrorDocument 401 /error/401.php  
ErrorDocument 403 /error/403.php  
ErrorDocument 404 /error/404.php  
ErrorDocument 500 /error/500.php

6. 压缩文件

通过压缩你的文件体积来优化网站的访问速度。

复制代码代码如下:

# 压缩 text, html, javascript, css, xml:  
AddOutputFilterByType DEFLATE text/plain  
AddOutputFilterByType DEFLATE text/html  
AddOutputFilterByType DEFLATE text/xml  
AddOutputFilterByType DEFLATE text/css  
AddOutputFilterByType DEFLATE application/xml  
AddOutputFilterByType DEFLATE application/xhtml+xml  
AddOutputFilterByType DEFLATE application/rss+xml  
AddOutputFilterByType DEFLATE application/javascript  
.AddOutputFilterByType DEFLATE application/x-javascript 

7. 缓存文件

缓存文件是另外一个提高你的网站访问速度的好方法。

复制代码代码如下:

<FilesMatch “.(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$”>  
Header set Cache-Control “max-age=2592000″  
</FilesMatch> 

8. 对某些文件类型禁止使用缓存

而另一方面,你也可以定制对某些文件类型禁止使用缓存。

复制代码代码如下:

# 显式的规定对脚本和其它动态文件禁止使用缓存  
<FilesMatch “.(pl|php|cgi|spl|scgi|fcgi)$”>  
Header unset Cache-Control  
</FilesMatch> 

虚拟机Ubuntu17.04环境下搭建PHP7.0+ Apache+MySQL+PhpMyAdmin 攻略

打开“终端窗口”进行软件源的更新,不更新软件源直接安装PHP,会出现有些软件包下载失败,终端更新命令“sudo apt-get update ” –回车– “输入管理员密码”进行更新。

未分类

(1)软件更新完后,就可以安装PHP、Apache、MySQL了,一般安装顺序是先安装MySQL在安装Apache最后安装PHP,Pache和MySQL安装顺序可以颠倒,因为二者依赖性并不是很强,但PHP要安装在这两个后面,因为是要依赖Apache和MySQL的服务的。

(2)MysSQL安装:

终端命令输入:“ sudo apt-get install mysql-server php-mysql ” — “ 输入管理员密码 ” — “ 回车 ” 开始安装。

未分类

安装中间需要设定MySQL的root管理员密码,密码需要输入两遍。

未分类

(3)Apache2 安装:

终端命令:“ sudo apt-get install apache2 ” — “ 输入管理员密码 ” — “ 回车 ” 开始安装。

未分类

安装完成后可以在浏览器中输入“ 127.0.0.1 ” 或者 “ localhost ” ,就能查看Apache2是否安装成功。

未分类

(4) PhpMyAdminde 安装:

终端命令:“ sudo apt-get install phpmyadmin ” — “ 输入管理员密码 ” — “ 确定 ” 。

未分类

安装 PhpMyAdminde 时需要选择Apache2 和MySQL的root密码,这里的密码也需要输入两遍。

未分类

未分类

(5)PHP 和php相关插件包安装:

终端命令:“ sudo apt-get install php libapache2-mod-php php-mcrypt php-curl php-imagick php-cli ” — “输入管理员密码” — “确定”开始安装

未分类

可以用这个命令新建脚本文件:

sudo vi /var/www/html/info.php

打开info.php文件,输入以下内容。

<?php
phpinfo();
?>

未分类

在浏览器访问该文件本地就用“ 127.0.0.1/info.php ” 或者“ http://你的服务器的IP地址/info.php ” 查看,要是看到下面信息就说明php安装成功。

测试成功后,最好删掉这个info.php文件,因为这个文件会让其他人看到你服务器的一些配置,

输入下边的命令:sudo rm /var/www/html/info.php

未分类

(6)总结:现在已经安装完LAMP了,快去开发属于自己的网站吧。

Debian上设置Apache禁止ip和非法域名访问

当我们使用VPS建站的时候,理论上别人通过ip就可以访问我们的网站了,但这就会导致很多问题,比如他人的域名绑定到了自己的ip上。在debian/ubuntu下可以通过修改apache的配置文件,就可以禁止ip访问网站,和禁止别人的域名解析到自己的网站上。

Apache2的配置文件路径为 /etc/apache2/sites-enabled ,里面会有 000-default.conf000-default-le-ssl.conf 两个文件。如果网站没有开启ssl就只有 000-default.conf 一个文件。使用vim打开并在文件末尾加上如下两段:

<VirtualHost *.*.*.*:80>  
ServerName *.*.*.*  
<Location />  
Order Allow,Deny  
Deny from all  
</Location>  
</VirtualHost>  

其中 *.*.*.* 是你VPS的的IP地址,这样的话,所有通过ip地址访问的请求都会被拒绝。

<VirtualHost *.*.*.*:80>  
DocumentRoot /var/www/html
ServerName name.com  
</VirtualHost>

其中 *.*.*.* 是你VPS的的IP地址;/var/www/html是你的网站所在的目录,一般都是这个不会有改动;name.com是你网站的域名,只有通过这个才访问网站。

优化apache的mpm event参数

apache2.4已经默认event加载方式,然而我们需要进行优化,以提高效率
mpm event配置如下

StartServers               4   # 默认启动进程数
MinSpareThreads         16   #最小线程
MaxSpareThreads         512 #最大线程
ThreadsPerChild           64     #最大子线程数
ServerLimit                 32       # 进程最大数
MaxRequestWorkers     2048 # 最大请求数量
MaxConnectionsPerChild   10000 # 最大连接次数,超过后释放线程

想要优化,必须依照下面的计算公式

MaxSpareThreads > StartServers * ThreadsPerChild
MaxRequestWorkers = ServerLimit * ThreadsPerChild

mpm-event依据上面的公式,根据你自己的情况进行修改即可.
修改后记得重启httpd

CentOS 7上Apache配置SSL证书

未分类

Certbot配置SSL证书

Certbot是让vultr加密认证中心的自动SSL证书颁发者。它被开发为让vps加密的客户端,并且还将与支持ACME协议的任何其他CA协同工作。

接下来将介绍在CentOS 7上的Apache安装Certbot的过程,并配置它发布和续订我们加密SSL证书。

1. 安装

Certbot在EPEL Yum Repository上可用。如果没有安装EPEL,可以使用以下命令安装:

# yum -y install epel-release mod_ssl openssl

接下来,我们将需要安装Certbot及其Apache插件

# yum -y install certbot python-certbot-apache

运行Certbot:

# certbot --apache

为了避免错误,请确保已为希望使用SSL证书的域和DNS配置正确的域设置了虚拟主机。(像我一样,略过)

运行Certbot Apache Plugin后,会出现一个安装向导。可配置选项包括邮箱,域名,订阅,看不懂英文的可复制到Google翻译,以免出错。

  • 选择要颁发证书的域名(注意:www.example.com和example.com将分发SSL证书)。
  • SSL强制选项。

本站配置ssl时没有输入通配符www,如果加入www访问,会提示https不安全 https://www.toavoid.cc,不加www即可。
当然你也可以选择输入www如www.toavoid.cc,配置ssl完毕之后在后台设置为域名加上www即可。已加上的略过。

2. 自动续订

加密证书90天后过期。Certbot可以轻松处理自动续订。

# certbot renew --dry-run

# certbot renew --quiet

现在打开网站发现https已经生效

未分类

如果出现不安全,确认是否在后台设置域名通配符,我这里没设置~

未分类