- 安装图形化界面(gnome)
- 配置静态IP
- VNC搭建
- 删除系统自带的OpenJDK
- JDK配置
- IDEA安装与使用
- SCALA配置(2.11.12)
- SPARK配置(1.6.2)
- HADOOP单机配置(2.6.0)
- 集群环境下利用KVM分割多机配置静态ip
- 多机间SSH免密登陆
- 多机间免密登陆故障处理
- HADOOP完全分布式配置(2.6.0)
- Spark完全分布式配置(1.6.2)
- Spark完全分布式提交任务流程
- maven安装
- protobuf安装
- Caffe_MPI_Environment
- JB全家桶账户(已于2018/11/23失效)
- NFS网络文件系统
- NTP时间校准
- Nginx与Tomcat集群
Centos7生产环境部署。
安装图形化界面(gnome)
- 1.命令行输入yum groupinstall GNOME Desktop回车
- 2.遇到选择时,输入yes或y回车即可
配置静态IP
修改配置文件即可
- vim /etc/sysconfig/network-scripts/ifcfg-eth0(最后这个文件,建议大家自己用ifconfig看一下,每个人机器的情况都不一样)
如果是用虚拟机的话额外选桥接模式,如下
VNC搭建
1.yum install tigervnc tigervnc-server(一路yes即可)
2.cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
3.vim /etc/systemd/system/vncserver@:1.service(将所有USER包含尖括号改成root)
4.systemctl start vncserver@:1.service;
5.上一步可能会报错,解决办法如下:删除/tmp/.X11-unix/ 目录, 执行rm -R /tmp/.X11-unix/
6.systemctl enable vncserver@:1.service
7.设置密码:vncpasswd,输入两次密码。
8.设置防火墙(选做),第9-10步。
9.firewall-cmd --permanent --add-service="vnc-server" --zone="public"
10.firewall-cmd --reload
11.开启VNC:vncserver(或vncserver :1)
12.在VNC-Viewer中,输入ip:5901即可。
删除系统自带的OpenJDK
1.切换到root账户
2.rqm -qa 管道竖线 grep java
3.rpm -e --nodeps java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64
4.rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64
5.rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64
6.rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
JDK配置
1.解压:tar xzvf jdk-8u144-linux-x64.tar.gz
2.vim /etc/profile
3.添加如下内容
4.export JAVA_HOME=/usr/java/jdk
5.export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
6.export PATH=$JAVA_HOME/bin:$PATH
7.source /etc/profile
8.验证:java -version
IDEA安装与使用
1.解压:tar xzvf ideaIU-2018.1.4.tar.gz
2.启动:sh idea.sh
SCALA配置(2.11.12)
1.解压:tar -zxf scala-2.11.12.tgz
2.vim /etc/profile
3.添加如下内容
4.export SCALA_HOME=/usr/scala/scala-2.11.6
5.export PATH=$PATH:$SCALA_HOME/bin
6.source /etc/profile
7.验证:scala -version
SPARK配置(1.6.2)
1.解压:tar -xzvf spark-1.6.2-bin-hadoop2.6.tgz
2.vim /etc/profile
3.添加如下内容
4.export SPARK_HOME=/usr/app/spark-1.6.0
5.export PATH=$SPARK_HOME/bin:$PATH
6.source /etc/profile
7.转到/spark-1.6.2-bin-hadoop2.6/conf/下
8.执行:cp spark-env.sh.template spark-env.sh,并按下面修改内容(类似设置JDK),分号代表换行符
9.export SCALA_HOME=/mysoftware/scala-2.11.8;export JAVA_HOME=/mysoftware/jdk1.7.0_80;export SPARK_HOME=/home/ZHOU/SPARK;export SPARK_MASTER_IP=你的ip;export SPARK_WORKER_MEMORY=4G
10.执行:cp slaves.template slaves,最下面一行设置为:localhost
11.执行:cp log4j.properties.template log4j.properties,无需其他设置
12.测试Spark是否装好,在bin目录下执行:./run-example SparkPi 10,如果打印出"Pi is roughly 3.141852",即说明成功。
13.启动:/sbin/start-all.sh
14.停止:/sbin/stop-all.sh
HADOOP单机配置(2.6.0)
1.解压:tar zxvf hadoop-2.6.0.tar.gz
2.修改路径/hadoop-2.7.3/etc/hadoop的文件hadoop-env.sh,将JDK路径加进去(export JAVA_HOME=/home/ZHOU/jdk1.8)
3.配置Hadoop环境变量(export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3; export PATH=$PATH:$HADOOP_HOME/bin)
4.执行:source /etc/profile
5.修改路径/hadoop-2.7.3/etc/hadoop的文件core-site.xml,如下
6.修改路径/hadoop-2.7.3/etc/hadoop的文件hdfs-site.xml,如下
7.配置完成后,执行初始化:./bin/hdfs namenode -format,打印出的部分信息如下,其中这个127.0.0.1报的错我目前没搞懂啥意思,但是并不影响HDFS的启动
15/05/13 08:50:15 INFO namenode.FSImage: Allocated new BlockPoolId: BP-707136192-127.0.1.1-1431532215593
15/05/13 08:50:15 INFO common.Storage: Storage directory /home/hadoop/opt/hadoop-2.6.0/tmp/dfs/name has been successfully formatted.
15/05/13 08:50:16 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
15/05/13 08:50:16 INFO util.ExitUtil: Exiting with status 0
15/05/13 08:50:16 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.1.1
************************************************************/
8.开启HDFS(NameNode&DataNode):sbin/start-dfs.sh
9.打开浏览器,输入:localhost:50070,可看到
10.关闭HDFS:sbin/stop-dfs.sh
集群环境下利用KVM分割多机配置静态ip
1. cd /etc/sysconfig/network-scripts
2. sudo vim ifcfg-eth0
3. 修改BOOTPROTO=static
4. 修改ONBOOT=yes
5. 添加IPADDR=(动态获取的ip)
6. 添加NETMASK=255.255.255.0
7. 添加GATEWAY=(宿主网关,在宿主机用netstat -rn查询)
8. 添加DNS1=114.114.114.114
9. 重启网络:service network start
多机间SSH免密登陆
1.对每台主机修改主机名,主节点(master),从节点(slave01-slave02),分别执行sudo vim /etc/hostname,修改对应主机名
2.对每台主机添加节点ip以及集群内所有的主机名:sudo vim /etc/hosts 例如(10.1.18.1 master\n 10.1.18.2 slaver01 \n 10.1.18.3 slaver02)
3.对每台主机修改sshd配置文件:sudo vim /etc/ssh/sshd_config 将如下点亮(RSAAuthentication yes;PubkeyAuthentication yes;AuthorizedKeysFile .ssh/authorized_keys)后重启ssh服务:service ssh restart
4.对每台机器生成密钥:ssh-keygen -t rsa并敲击数次回车
5.将所有slave的密钥(xxx.pub)汇总到master,利用:cat xxx.pub >> authorized_keys 将各个节点公钥打入该文件
6.利用scp命令分发authorized_keys文件到各个slave节点
7.在所有机器上授权:sudo chmod 700 ~/.ssh; sudo chmod 644 ~/.ssh/authorized_keys; sudo chmod 644 ~/.ssh/known_hosts
8.测试&通过
多机间免密登陆故障处理
1.WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!本机ip:10.1.18.100,欲连接的ip:10.1.18.124,修改本机ip路径下/.ssh的文件konwn_hosts,将与欲连接的ip相关的内容删掉,重新ssh连接即可。
HADOOP完全分布式配置(2.6.0)
1.登录root账户(su root);将压缩包上传至服务器的/usr下;并解压(tar xzvf hadoop2.6.0.......)
2.重命名(mv hadoop2.6.0....... hadoop2.6.0); 授权(chown -R hadoop:hadoop hadoop2.6.0)
3.添加环境变量(vim /etc/profile)
export HADOOP_HOME=/usr/hadoop2.6.0
export PATH=$PATH:$HADOOP_HOME/bin
4.配置Hadoop文件
4.1./etc/hadoop/hadoop-env.sh
4.2./etc/hadoop/yarn-env.sh
4.3./etc/hadoop/slaves
4.4./etc/hadoop/core-site.xml
4.5./etc/hadoop/hdfs-site.xml
4.6./etc/hadoop/mapred-site.xml
4.7./etc/hadoop/yarn-site.xml
5.格式化namenode(hdfs namenode -format)ps:主节点机器重启后可能需要重新格式化namenode
6.启动:start-all.sh;start-dfs.sh;start-yarn.sh
7.结果查询,在各个机器上使用jps命令即可
8.结果截图
8.1.master:
8.2.slaver0x:
  8.3.打开火狐浏览器,输入:master:50070;master:8088;slaves:8042
Spark完全分布式配置(1.6.2)
1.首先关闭各个机器的防火墙,最好是开机禁用firewall(systemctl stop firewalld.service #停止firewall; systemctl disable firewalld.service #禁止firewall开机启动)
2.在各台机器上先配置Scala环境(参考前面单机即可)
3.在各台机器上解压缩(tar -zxvf spark-xxx.tgz)
4.在各台机器上改名(mv spark-xxx.tgz spark1.6.2)
5.在各台机器上配环境变量
vim /etc/profile
export SPARK_HOME=/usr/spark1.6.2
export PATH=$PATH:$SPARK_HOME/bin
6.在各台机器上修改conf/spark-env.sh, 如下
export JAVA_HOME=/usr/java/jdk1.8.0_141
export SCALA_HOME=/usr/scala-2.11.7
export HADOOP_HOME=/opt/hadoop-2.6.5
export HADOOP_CONF_DIR=/usr/hadoop2.6.0/etc/hadoop
export SPARK_MASTER_IP=10.1.18.125
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_HOST=10.1.18.125
export SPARK_WORKER_MEMORY=2g
export SPARK_WORKER_CORES=2
export SPARK_WORKER_INSTANCES=1
PS:master_ip必须填真实ip,不能用master代替
7.在各台机器上修改conf/slaves, 如下
salver01
slaver02
slaver03
8.启动Spark(必须cd到/spark1.6.0/sbin目录下执行sh ./start-all.sh)
9.验证安装成果(各个机器上jps一下; 在浏览器上输入master:8080回车查看)
Spark完全分布式提交任务流程
1.使用IDEA写代码,打包后使用/bin/spark-submit提交,其他参数后续将会解释
2.在IDEA中用sbt构建项目
name := "sr"
version := "0.1"
scalaVersion := "2.11.6"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"
libraryDependencies += "org.apache.spark" %% "spark-mllib" % "1.5.1"
libraryDependencies += "org.apache.spark" %% "spark-streaming" % "1.5.1"
libraryDependencies ++= Seq(
// other dependencies here
"org.scalanlp" %% "breeze" % "0.12",
// native libraries are not included by default. add this if you want them (as of 0.7)
// native libraries greatly improve performance, but increase jar sizes.
// It also packages various blas implementations, which have licenses that may or may not
// be compatible with the Apache License. No GPL code, as best I know.
"org.scalanlp" %% "breeze-natives" % "0.12",
// the visualization library is distributed separately as well.
// It depends on LGPL code.
"org.scalanlp" %% "breeze-viz" % "0.12"
)
resolvers ++= Seq(
// other resolvers here
// if you want to use snapshot builds (currently 0.12-SNAPSHOT), use this.
"Sonatype Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/",
"Sonatype Releases" at "https://oss.sonatype.org/content/repositories/releases/"
)
3.然后编写测试代码
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("wordcount")
val sc = new SparkContext(conf)
// 自备数据集,反正是词频统计,自己随便造一个吧
// 这个路径是hdfs的路径,根据自己实际情况设定
val input = sc.textFile("/input/bigfile.txt")
val lines = input.flatMap(line => (line.split(" ")))
val count = lines.map(word => (word, 1)).reduceByKey { case (x, y) => x + y }
val output=count.saveAsTextFile("/input/bigfileres.txt")
}
}
4.然后执行打包操作,具体如下:File -> Project Structure -> Aritifacts -> 点击+号 ->jar -> 第二个 -> 指定Module和MainClass -> JAR files from libraries 选择第二个 ->点击ok;主题栏点击Build -> Build Aritifacts - Build;在工程目下out目录中生成相应jar包即打包成功,在下图中,当我们看到sr.jar即说明搞定,我们这个项目的名字就叫sr(shit,我想抽ssr啊)
5.先上传相关代码所需输入文件,贴几个常见的hdfs命令
- 1.查看hdfs的某目录:hdfs dfs -ls /目录名
- 2.新建目录:hdfs dfs -mkdir /目录名
- 3.上传文件到hdfs:hdfs dfs -put /文件路径 /目标路径(不带文件名)
- 4.下载文件到本地:hdfs dfs -get /文件路径(带文件名) /目标路径
- 5.删除hdfs文件:hadoop fs -rm -r /文件路径
6.在spark的目录下执行:"./bin/spark-submit --master spark://master:7077 --class WordCount /home/hadoop/sr.jar"
7.说明:参数master指定谁是控制机器;参数Class指定主类以及之前打包的项目位置
8.可以在浏览器中查看运行结果(master:8080)
maven安装
1.下载压缩包
2.解压(tar -zxvf apache........)
3.配置环境变量(su root; vim /etc/profile),如下:
export M2_HOME=/usr/maven
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=$PATH:$M2_HOME/bin
4.刷新(source /etc/profile)
5.验证(mvn -v)
protobuf安装
1.下载压缩包(wget https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz)
2.解压缩并进入文件夹(tar -zxvf protobuf-2.5.0.tar.gz)
3.执行(./configure)
4.执行(make && make install)
5.修改环境变量(export PATH=/home/hadoop/protobuf-2.5.0/bin:$PATH)
6.验证(protoc --version), 出现libprotoc 2.5.0 则说明安装成功
Caffe_MPI_Environment
Caffe-MPI在Centos7下的安装
目录
- 说明
- 快速安装
- 普通安装
- 运行demo
- 致谢
说明
原案传送门:https://github.com/sailorsb/caffe-parallel
Caffe-Parallel是一个更快的深度学习框架,它来自BVLC / caffe(主分支)。(https://github.com/BVLC/caffe,更多详情请访问 http://caffe.berkeleyvision.org)。该项目的主要成就是通过MPI实现数据并行。
下面的安装过程必要的环境依赖于集群内所有机器可以互相免密ssh,请提前配置好。自动化脚本可以参考:https://github.com/Beckham007/b_keygen快速安装
在快速安装中,我们仅需将已经编译好的各个组件从压缩包中解压,然后配置本地环境即可,在我的环境中的目录结构为:
-home |---其他用户 |---hadoop |---其他文件夹 |---environment |---boost(组件) |---caffe-parallel-master(主要) |---curl(组件) |---gflags(组件) |---glog(组件) |---glog-master(组件) |---hdf5(组件) |---jsoncpp(组件) |---leveldb(组件) |---lmdb(组件) |---openblas(低版本) |---openblas-0.2.20(组件) |---opencv-2.4.9(组件) |---openmpi-1.6.5(弃用) |---protobuf(组件) |---snappy(组件) |---myenv2profile.txt(环境变量配置文件) |---myinjectLib(需要注入的库的集合) |---environment.tar.gz |---openmpi-1.6.5(组件) |---openmpi-1.6.5.tar.gz
在后续的安装中,发现了一个暂时无法解决的问题,因此最新版本安装后的文件目录如下:
-home |---hadoop |---boost(组件) |---caffe-parallel-master(主要) |---curl(组件) |---gflags(组件) |---glog(组件) |---glog-master(组件) |---hdf5(组件) |---jsoncpp(组件) |---leveldb(组件) |---lmdb(组件) |---openblas(低版本) |---openblas-0.2.20(组件) |---opencv-2.4.9(组件) |---openmpi-1.6.5(弃用) |---protobuf(组件) |---snappy(组件) |---myenv2profile.txt(注入环境变量的文本) |---myinjectLib(需要注入的库的集合) |---openmpi-1.6.5(组件)
建议使用NFS系统的读者,直接在home目录下创建hadoop文件夹作为共享目录
- 解压缩包后目录如上
- cd environment后su root登录root账户
- 执行:cat myenv2profile.txt » /etc/profile将我们预先写好的环境变量(需要根据你自己的环境进行修改)直接进行追加,避免繁琐的手工配置,PS:如果权限不够请写入.bashrc中
export PATH=$PATH:/home/hadoop/envirnoment/boost_1640/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hadoop/environment/boost_1640/lib
export PATH=$PATH:/home/hadoop/environment/opencv-2.4.9/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hadoop/environment/opencv-2.4.9/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/hadoop/environment/opencv-2.4.9/lib/pkgconfig
export PATH=$PATH:/home/hadoop/environment/OpenBLAS/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hadoop/environment/OpenBLAS/lib
export PATH=$PATH:/home/hadoop/environment/gflags-2.0/include
export PATH=$PATH:/usr/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export HDF5_DIR=/home/hadoop/environment/hdf5
export PATH=$PATH:/home/hadoop/environment/hdf5/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hadoop/environment/hdf5/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hadoop/environment/hdf5/share
export PATH=$PATH:/home/hadoop/environment/curl/include
export PATH=$PATH:/home/hadoop/environment/curl/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hadoop/environment/curl/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hadoop/environment/curl/share
export GFLAGS_ROOT_DIR=/home/hadoop/environment/gflags-2.0
export PATH=$PATH:/home/hadoop/environment/gflags-2.0/include
export PATH=$PATH:/home/hadoop/environment/gflags-2.0/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hadoop/environment/gflags-2.0/lib
export GLOG_ROOT_DIR=/home/hadoop/environment/glog
export PATH=$PATH:/home/hadoop/environment/glog/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hadoop/environment/glog/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hadoop/environment/glog/share
export LEVELLDB_ROOT=/home/hadoop/environment/leveldb:$PATH
export PATH=$PATH://home/hadoop/environment/leveldb/include
export LD_LIBRARY_PATH=/home/hadoop/environment/leveldb/lib64:$LD_LIBRARY_PATH
export LMDB__DIR=/home/hadoop/environment/lmdb
export PATH=$PATH:/home/hadoop/environment/lmdb/include
export PATH=$PATH:/home/hadoop/environment/lmdb/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hadoop/environment/lmdb/lib
export PATH=/home/hadoop/environment/protobuf/include:$PATH
export PATH=/home/hadoop/environment/protobuf/bin:$PATH
export LD_LIBRARY_PATH=/home/hadoop/environment/protobuf/lib:$LD_LIBRARY_PATH
export PATH=/home/hadoop/openmpi-1.6.5/bin:$PATH
export PATH=/home/hadoop/openmpi-1.6.5/include:$PATH
export LD_LIBRARY_PATH=/home/hadoop/openmpi-1.6.5/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/hadoop/environment/jsoncpp/libs/linux-gcc-4.8.5:$LD_LIBRARY_PATH
- cd myinjectLib后执行:cp ./lib* /usr/lib将所有运行时需要的库注入到系统默认的动态链接库
普通安装
依赖环境及其版本如下图所示,在各自官网下载即可,手动安装教程请参考度娘或Google。具体细节有待补充:
编译
对于BSP与SSP,在新安装环境首次运行时需要安装或修改以下内容:
1.安装gcc/g++/gdb,执行yum install gcc-c++即可
2.修改项目根路径下的编译配置文件Makefile.config
修改INCLUDE_DIRS的路径前缀
修改LIBRARY_DIRS的路径前缀
3.修改/examples/mnist路径下的超参数文件lenet_solver.prototxt
修改net的路径值
修改snapshot_perfix的路径值
4.修改训练集和测试集的配置文件lenet_train_test.prototxt
修改data_param下的source路径值,共两个
运行Demo
测试mpi是否安装好:mpirun -n 6 pwd
单机测试caffe-mpi运行:在/home/hadoop/environment/caffe-parallel-master/examples/mnist目录下;修改machinefile,填写自己机器hostname;在终端里输入 sh ./MyTrainLenet.sh即可;下图是我在一个从节点单机运行测试程序:
单机测试caffe-mpi运行:在/home/hadoop/environment/caffe-parallel-master/examples/mnist目录下;修改machinefile,填写参与计算的机器hostname;在终端里输入 sh ./MyTrainLenet.sh即可;下图是我在一个master节点并行运行测试程序:
致谢
感谢范禹辰同学的热心帮助!
JB全家桶账户(已于2018/11/23失效)
账号:Xiang_Zhou2018;密码:Aa950519
NFS网络文件系统
服务端配置
1.安装命令:yum install -y nfs-utils rpcbind
2.修改配置文件:vim /etc/exports;新增一行:/home/hadoop/share 10.1.18.0/24(rw,async,insecure,anonuid=0,anongid=0,no_root_squash)或者(rw,anonuid=0,anongid=0,all_squash,sync)
/home/hadoop/share 是服务器端要共享出去的文件路径
10.1.18.0/24 是网段,代表10.1.18.0-10.1.18.255都可以访问
rw:read-write,可读写;
ro:read-only,只读;
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。
root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;
all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的UID值
anongid:匿名用户的GID值。备注:其中anonuid=1000,anongid=1000,为此目录用户web的ID号,达到连接NFS用户权限一致。
defaults 使用默认的选项。默认选项为rw、suid、dev、exec、auto nouser与async。
atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
noatime 每次存取时不更新inode的存取时间。
dev 可读文件系统上的字符或块设备,取消选项为nodev。
nodev 不读文件系统上的字符或块设备。
exec 可执行二进制文件,取消选项为noexec。
noexec 无法执行二进制文件。
auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto。
noauto 无法使用auto加载。
suid 启动set-user-identifier设置用户ID与set-group-identifer设置组ID设置位,取消选项为nosuid。
nosuid 关闭set-user-identifier设置用户ID与set-group-identifer设置组ID设置位。
user 普通用户可以执行加载操作。
nouser 普通用户无法执行加载操作,默认设置。
remount 重新加载设备。通常用于改变设备的设置状态。
rsize 读取数据缓冲大小,默认设置1024。–影响性能
wsize 写入数据缓冲大小,默认设置1024。
fg 以前台形式执行挂载操作,默认设置。在挂载失败时会影响正常操作响应。
bg 以后台形式执行挂载操作。
hard 硬式挂载,默认设置。如果与服务器通讯失败,让试图访问它的操作被阻塞,直到服务器恢复为止。
soft 软式挂载。服务器通讯失败,让试图访问它的操作失败,返回一条出错消息。这项功能对于避免进程挂在无关紧要的安装操作上来说非常有用。
retrans=n 指定在以软方式安装的文件系统上,在返回一条出错消息之前重复发出请求的次数。
nointr 不允许用户中断,默认设置。
intr 允许用户中断被阻塞的操作并且让它们返回一条出错消息。
timeo=n 设置请求的超时时间以十分之一秒为单位。
tcp 传输默认使用udp,可能出现不稳定,使用proto=tcp更改传输协议。客户端参考mountproto=netid
3.使配置生效:exportfs -rv
4.启动并设置开机自动启动:systemctl enable rpcbind;systemctl start rpcbind;systemctl enable nfs-server;systemctl start nfs-server
5.查看启动情况:rpcinfo -p
6.对共享文件夹授权:chomd 777 -R /home/hadoop/share
客户端配置
1.安装命令:yum install -y nfs-utils rpcbind
2.设置开机自动启动:chkconfig nfs on; chkconfig rpcbind on
3.启动服务:service rpcbind start; service nfs start
4.创建挂载点前可能需要关闭防火墙:systemctl stop firewalld.service;systemctl disable firewalld.service
5.创建挂载点:mount -t nfs server_ip:/home/hadoop/share /home/hadoop/share //注释-服务器地址:/服务器下共享文件夹的路径 本地的共享文件夹路径
6.查看挂载目录:df -h
7.卸载挂载目录:umount /home/hadoop/share
8.开机自动挂载:sudo vim /etc/fstab; 添加一行:server_ip:/home/hadoop/share /home/hadoop/share nfs rw,tcp,intr 0 1
故障处理
1.重启服务器端:service nfs reload
2.重启服务器端:service nfs restart
NTP时间校准
服务器端设置
1.安装/更新ntp:yum install -y ntp
2.先校准时间:ntpdate cn.pool.ntp.org
3.更改配置:sudo vim /etc/ntp.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 0.cn.pool.ntp.org iburst
server 1.cn.pool.ntp.org iburst
server 2.cn.pool.ntp.org iburst
server 3.cn.pool.ntp.org iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 10
4.启动/重启ntp:service ntpd start(restart)
5.查看ntp情况:ntpq -p
6.设置开机启动:chkconfig ntpd on
客户端设置
1.安装/更新ntp:yum install -y ntp
2.先校准时间:ntpdate master_ip
3.更改配置:sudo vim /etc/ntp.conf
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server master_ip iburst
4.启动/重启ntp:service ntpd start(restart)
5.查看ntp情况:ntpq -p
6.设置开机启动:chkconfig ntpd on
查询各个机器时间的脚本
执行前可能需要执行:yum -y install expect
#!/bin/bash
USER="root"
PASS="1"
all_hosts="mdw sdw01 sdw02 sdw03 sdw04"
for element in $all_hosts
do
HOST=$element
EX_RUN=$(expect -c "
spawn ssh $USER@$HOST date \+\%Y\%m\%d\-\%H\%M\%S
expect \"password:\"
send \"$PASS\r\"
interact
")
echo "$EX_RUN" &
done
Nginx与Tomcat集群
假设有三台机器组成一个集群,机器的ip分别为:
- 192.168.128.191
- 192.168.128.192
- 192.168.128.193
Tomcat安装
官网下载解压即可,安装后登陆http://ip:port测试。
Nginx安装
官网下载解压即可,安装后登陆http://ip:80(默认端口)测试。
参考:https://www.cnblogs.com/kaid/p/7640723.html
常见命令:
cd /usr/local/nginx/sbin/ //安装路径
./nginx //启动
./nginx -s stop //立即停止
./nginx -s quit //执行完当前剩余任务后停止
./nginx -s reload //重新加载
Nginx配置
参考:https://www.cnblogs.com/machanghai/p/5957086.html
nginx.conf:
# 使用的用户和组
user root root;
# 指定工作衍生进程数(一般等于CPU的总核数或总核数的两倍,例如两个四核CPU,则综合数为8.通过命令ps -ef|grep nginx可以看出来设置的是几个)
worker_processes 8;
#指定错误日志存放的路径,错误日志记录级别可选项为:[debug|info|notice|warn|error|crit],默认是crit,记录的日志数量从crit到debug,由少到多。
error_log /usr/local/nginx/logs/nginx_error.log crit;
#指定pid存放的路径
pid /usr/local/nginx/nginx.pid;
# 指定文件描述符数量??
worker_rlimit_nofile 51200;
#events settings
events {
# 使用的网络I/O模型,Linux系统推荐采用epoll模型,FreeeBSD系统推荐采用kqueue模型
use epoll;
# 允许的连接数
worker_connections 51200;
}
#遵循http协议的服务器全局设置
http {
include mime.types;
default_type application/octet-stream;
#设置使用的字符集,如果一个网站有多种字符集,请不要随便设置,应让程序员在HTML代码中通过Meta标签设置
#charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
# 设置客户端能够上传的文件大小,注意要与应用程序中的文件大小限制兼容。
client_max_body_size 300m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
#log_format 自定义日志记录格式设置,main为名字,在access_log命令中引用
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# access_log 访问日志文件设置
#关闭日志记录
#access_log off;
#指定日志存放路径,如果想使用默认的combined格式记录日志,可以使用access_log logs/access.log combined; 以下是使用log_format自定义的格式记录日志的。
access_log logs/access.log main;
# 开启gzip压缩设置(只能在http模块中设置)
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types application/x-javascript text/css application/xml;
gzip_vary on;
# 用于设置如果出现指定的HTTP错误状态码,则返回指定的url页面
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
#upstream设置,设置代理服务器(负载均衡池),默认的负载均衡方式是轮询,另外一种是ip_hash
upstream tomcat_server {
#ip_hash;
server 192.168.1.96:7070 weight=1;
server 192.168.1.96:8081 weight=1;
}
#处理上传和下载的图片文件服务器,设置代理服务器(负载均衡池),默认的负载均衡方式是轮训,另外一种是ip_hash
upstream image_server{
server 192.168.1.96:9090 weight=1;
}
#server虚拟主机设置,可以设置多个:基于IP的虚拟主机,基于域名的虚拟主机
# 第一个虚拟主机(基于域名的虚拟主机),反向代理tomcat_server和image_server这两组服务器
server {
# 监听的端口
listen 8000;
# 主机名称
server_name localhost;
# 设置Nginx的默认首页文件
index index.html index.htm index.jsp index.do;
#root /home/oracle/dev_tools/server/apache-tomcat-6.0.44/webapps/examples;
# 配置该虚拟机的字符设置,如果不配置继承自http中的charset设置
#charset koi8-r;
#access_log 访问日志文件设置,如果server虚拟机中不设置,则继承http模块中的access_log的设置
#access_log logs/access.log main;
#rewrite settings
if (-d $request_filename)
{
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
# location模块说明
# 使用环境:server模块
# iamge 服务器location
location ~*/NginxTest/image/ {
proxy_pass http://image_server;
}
location ~*/NginxTest/ {
# root /home/oracle/dev_tools/server/apache-tomcat-6.0.44/webapps/;
# HTTP代理模块 proxy,主要是用来转发请求到其他服务器
# 如果后端服务器返回502,504,执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现failover。
proxy_next_upstream http_502 http_504 error timeout invalid_header;
# 变量$host等于客户端请求头中的Host值。
proxy_set_header Host $host;
#后端的web服务器可以通过X-Forwarded-For获取真实的IP地址,$remote_addr客户端的ip地址
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://tomcat_server;
}
#image expires settings
# expires 属于http Header模块,主要用来Nginx返回给用户网页添加附件的header信息,可以在http,server,location中使用
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
#css&js expires settings
# expires 属于http Header模块,主要用来Nginx返回给用户网页添加附件的header信息,可以在http,server,location中使用
location ~ .*\.(js|css|html)?$
{
expires 2h;
}
# 如果http模块设置了,则继承。此处设置了则覆盖。
#error_page 404 /404.html;
#error_page 500 502 503 504 /50x.html;
}
}