首页 文章 精选 留言 我的

精选列表

搜索[伪集群],共10000篇文章
优秀的个人博客,低调大师

ubuntu安装spark2.1 hadoop2.7.3集群

0: 设置系统登录相关 Master要执行 1 cat $HOME/. ssh /id_rsa .pub>>$HOME/. ssh /authorized_keys 如果用root用户 1 sed -ri 's/^(PermitRootLogin).*$/\1yes/' /etc/ssh/sshd_config 编辑/etc/hosts 1 2 3 4 5 6 7 8 9 10 11 127.0.0.1localhost #别把spark1放在这 192.168.100.25spark1 #spark1isMaster 192.168.100.26spark2 192.168.100.27spark3 127.0.1.1ubuntu #ThefollowinglinesaredesirableforIPv6capablehosts ::1localhostip6-localhostip6-loopback ff02::1ip6-allnodes ff02::2ip6-allrouters 如果把 spark1 放在/etc/hosts第一行, 会发现在slave 有下面的错误 1 org.apache.hadoop.ipc.Client:Retryingconnecttoserver:spark1 /192 .168.100.25:9000.Alreadytried0 time (s) 然后在spark1 运行 1 2 ss-lnt LISTEN0128localhost:9000 会发现监听的是本地. 删除 hosts中的相关文本重新启动hadoop,解决问题 1: 安装java 可以直接apt-get 1 2 3 4 apt-get install python-software-properties-y add-apt-repositoryppa:webupd8team /java apt-getupdate apt-get install oracle-java7-installer 或者下载 1 2 3 4 5 6 7 8 9 10 11 12 13 wgethttp: //download .oracle.com /otn-pub/java/jdk/7u80-b15/jdk-7u80-linux-x64 . tar .gz mkdir /usr/lib/jvm tar xvfjdk-7u80-linux-x64. tar .gz mv jdk1.7.0_80 /usr/lib/jvm #配置相关路径 update-alternatives-- install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.7.0_80/bin/java" 1 update-alternatives-- install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0_80/bin/javac" 1 update-alternatives-- install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7.0_80/bin/javaws" 1 update-alternatives--configjava #验证一下 java-version javac-version javaws-version 添加环境变量 1 2 3 4 5 6 cat >> /etc/profile <<EOF export JAVA_HOME= /usr/lib/jvm/jdk1 .7.0_80 export JRE_HOME= /usr/lib/jvm/jdk1 .7.0_80 /jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME /lib :$JRE_HOME /lib export PATH=$PATH:$JAVA_HOME /bin :$JRE_HOME /bin EOF 2: 安装 hadoop 1 2 3 4 tar xvfhadoop-2.7.3. tar .gz mv hadoop-2.7.3 /usr/local/hadoop cd /usr/local/hadoop mkdir -phdfs/{data,name,tmp} 添加环境变量 1 2 3 4 cat >> /etc/profile <<EOF export HADOOP_HOME= /usr/local/hadoop export PATH=$PATH:$HADOOP_HOME /bin EOF 编辑 hadoop-env.sh 文件 1 export JAVA_HOME= /usr/lib/jvm/jdk1 .7.0_80 #只改了这一行 编辑 core-site.xml 文件 1 2 3 4 5 6 7 8 9 10 <configuration> <property> <name>fs.defaultFS< /name > <value>hdfs: //spark1 :9000< /value > < /property > <property> <name>hadoop.tmp. dir < /name > <value> /usr/local/hadoop/hdfs/tmp < /value > < /property > < /configuration > 编辑hdfs-site.xml 文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <configuration> <property> <name>dfs.namenode.name. dir < /name > <value> /usr/local/hadoop/hdfs/name < /value > < /property > <property> <name>dfs.datanode.data. dir < /name > <value> /usr/local/hadoop/hdfs/data < /value > < /property > <property> <name>dfs.replication< /name > <value>3< /value > < /property > < /configuration > 编辑mapred-site.xml 文件 1 2 3 4 5 6 <configuration> <property> <name>mapreduce.framework.name< /name > <value>yarn< /value > < /property > < /configuration > 编辑yarn-site.xml 文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <configuration> <property> <name>yarn.nodemanager.aux-services< /name > <value>mapreduce_shuffle< /value > < /property > <property> <name>yarn.resourcemanager. hostname < /name > <value>spark1< /value > < /property > <!--property> 别添加这个属性,添加了可能出现下面的错误: Problembindingto[spark1:0]java.net.BindException:Cannotassignrequestedaddress <name>yarn.nodemanager. hostname < /name > <value>spark1< /value > < /property-- > < /configuration > 上面相关文件的具体属性及值在官网查询: https://hadoop.apache.org/docs/r2.7.3/ 编辑masters 文件 1 echo spark1>masters 编辑 slaves 文件 1 2 3 spark1 spark2 spark3 安装好后,使用rsync 把相关目录及/etc/profile同步过去即可 启动hadoop dfs 1 . /sbin/start-dfs .sh 初始化文件系统 1 hadoopnamenode- format 启动 yarn 1 . /sbin/start-yarn .sh 检查spark1相关进程 1 2 3 4 5 6 7 root@spark1: /usr/local/spark/conf #jps 1699NameNode 8856Jps 2023SecondaryNameNode 2344NodeManager 1828DataNode 2212ResourceManager spark2 spark3 也要类似下面的运程 1 2 3 4 root@spark2: /tmp #jps 3238Jps 1507DataNode 1645NodeManager 可以打开web页面查看 1 http: //192 .168.100.25:50070 测试hadoop 1 2 3 4 hadoopfs- mkdir /testin hadoopfs-put~ /str .txt /testin cd /usr/local/hadoop hadoopjar. /share/hadoop/mapreduce/hadoop-mapreduce-examples-2 .7.3.jarwordcount /testin/str .txttestout 结果如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 hadoopjar. /share/hadoop/mapreduce/hadoop-mapreduce-examples-2 .7.3.jarwordcount /testin/str .txttestout 17 /02/24 11:20:59INFOclient.RMProxy:ConnectingtoResourceManageratspark1 /192 .168.100.25:8032 17 /02/24 11:21:01INFOinput.FileInputFormat:Totalinputpathstoprocess:1 17 /02/24 11:21:01INFOmapreduce.JobSubmitter:numberofsplits:1 17 /02/24 11:21:02INFOmapreduce.JobSubmitter:Submittingtokens for job:job_1487839487040_0002 17 /02/24 11:21:06INFOimpl.YarnClientImpl:Submittedapplicationapplication_1487839487040_0002 17 /02/24 11:21:06INFOmapreduce.Job:Theurltotrackthejob:http: //spark1 :8088 /proxy/application_1487839487040_0002/ 17 /02/24 11:21:06INFOmapreduce.Job:Runningjob:job_1487839487040_0002 17 /02/24 11:21:28INFOmapreduce.Job:Jobjob_1487839487040_0002running in ubermode: false 17 /02/24 11:21:28INFOmapreduce.Job:map0%reduce0% 17 /02/24 11:22:00INFOmapreduce.Job:map100%reduce0% 17 /02/24 11:22:15INFOmapreduce.Job:map100%reduce100% 17 /02/24 11:22:17INFOmapreduce.Job:Jobjob_1487839487040_0002completedsuccessfully 17 /02/24 11:22:17INFOmapreduce.Job:Counters:49 FileSystemCounters FILE:Numberofbytes read =212115 FILE:Numberofbyteswritten=661449 FILE:Numberof read operations=0 FILE:Numberoflarge read operations=0 FILE:Numberofwriteoperations=0 HDFS:Numberofbytes read =377966 HDFS:Numberofbyteswritten=154893 HDFS:Numberof read operations=6 HDFS:Numberoflarge read operations=0 HDFS:Numberofwriteoperations=2 JobCounters Launchedmaptasks=1 Launchedreducetasks=1 Data- local maptasks=1 Total time spentbyallmaps in occupiedslots(ms)=23275 Total time spentbyallreduces in occupiedslots(ms)=11670 Total time spentbyallmaptasks(ms)=23275 Total time spentbyallreducetasks(ms)=11670 Totalvcore-millisecondstakenbyallmaptasks=23275 Totalvcore-millisecondstakenbyallreducetasks=11670 Totalmegabyte-millisecondstakenbyallmaptasks=23833600 Totalmegabyte-millisecondstakenbyallreducetasks=11950080 Map-ReduceFramework Mapinputrecords=1635 Mapoutputrecords=63958 Mapoutputbytes=633105 Mapoutputmaterializedbytes=212115 Input split bytes=98 Combineinputrecords=63958 Combineoutputrecords=14478 Reduceinput groups =14478 Reduceshufflebytes=212115 Reduceinputrecords=14478 Reduceoutputrecords=14478 SpilledRecords=28956 ShuffledMaps=1 FailedShuffles=0 MergedMapoutputs=1 GC time elapsed(ms)=429 CPU time spent(ms)=10770 Physicalmemory(bytes)snapshot=455565312 Virtualmemory(bytes)snapshot=1391718400 Totalcommittedheapusage(bytes)=277348352 ShuffleErrors BAD_ID=0 CONNECTION=0 IO_ERROR=0 WRONG_LENGTH=0 WRONG_MAP=0 WRONG_REDUCE=0 FileInputFormatCounters BytesRead=377868 FileOutputFormatCounters BytesWritten=154893 3: 安装 scala 1 2 tar xvfscala-2.11.8.tgz mv scala-2.11.8 /usr/local/scala 添加环境变量 1 2 3 4 cat >> /etc/profile <<EOF export SCALA_HOME= /usr/local/scala export PATH=$PATH:$SCALA_HOME /bin EOF 测试 1 2 3 source /etc/profile scala-version Scalacoderunnerversion2.11.8--Copyright2002-2016,LAMP /EPFL 4: 安装 spark 1 2 tar xvfspark-2.1.0-bin-hadoop2.7.tgz mv spark-2.1.0-bin-hadoop2.7 /usr/local/spark 添加环境变量 1 2 3 4 5 cat >> /etc/profile <<EOF export SPARK_HOME= /usr/local/spark export PATH=$PATH:$SPARK_HOME /bin export LD_LIBRARY_PATH=$HADOOP_HOME /lib/native EOF 1 2 3 export LD_LIBRARY_PATH=$HADOOP_HOME /lib/native #这一条不添加的话在运行spark-shell时会出现下面的错误 NativeCodeLoader:Unabletoloadnative-hadooplibrary for yourplatform...using builtin -javaclasseswhereapplicable 编辑 spark-env.sh 1 2 SPARK_MASTER_HOST=spark1 HADOOP_CONF_DIR= /usr/locad/hadoop/etc/hadoop 编辑 slaves 1 2 3 spark1 spark2 spark3 启动 spark 1 . /sbin/start-all .sh 此时在spark1上运行jps应该如下, 多了 Master 和 Worker 1 2 3 4 5 6 7 8 9 root@spark1: /usr/local/spark/conf #jps 1699NameNode 8856Jps 7774Master 2023SecondaryNameNode 7871Worker 2344NodeManager 1828DataNode 2212ResourceManager spark2 和 spark3 则多了 Worker 1 2 3 4 5 root@spark2: /tmp #jps 3238Jps 1507DataNode 1645NodeManager 3123Worker 可以打开web页面查看 1 http: //192 .168.100.25:8080/ 运行 spark-shell 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 root@spark1: /usr/local/spark/conf #spark-shell UsingSpark'sdefaultlog4jprofile:org /apache/spark/log4j-defaults .properties Settingdefaultloglevelto "WARN" . Toadjustlogginglevelusesc.setLogLevel(newLevel).ForSparkR,usesetLogLevel(newLevel). 17 /02/24 11:55:46WARNSparkContext:Support for Java7isdeprecatedasofSpark2.0.0 17 /02/24 11:56:17WARNObjectStore:Failedtogetdatabaseglobal_temp,returningNoSuchObjectException SparkcontextWebUIavailableathttp: //192 .168.100.25:4040 Sparkcontextavailableas 'sc' (master= local [*],app id = local -1487908553475). Sparksessionavailableas 'spark' . Welcometo ______ /__ /__ ________/ /__ _\\/_\/_`/__/'_/ /___/ .__/\_,_ /_/ /_/ \_\version2.1.0 /_/ UsingScalaversion2.11.8(JavaHotSpot(TM)64-BitServerVM,Java1.7.0_80) Type in expressionstohavethemevaluated. Type:help for more information. scala>:help 此时可以打开spark 查看 1 http: //192 .168.100.25:4040 /environment/ spark 测试 1 2 3 run-exampleorg.apache.spark.examples.SparkPi 17 /02/28 11:17:20INFODAGScheduler:Job0finished:reduceatSparkPi.scala:38,took3.491241s Piisroughly3.1373756868784346 至此完成. 本文转自 nonono11 51CTO博客,原文链接:http://blog.51cto.com/abian/1900868,如需转载请自行联系原作者

优秀的个人博客,低调大师

基于keepalived实现多种模式的高可用集群网站架构

一、 实现主从服务器高可用技术。 大概网络拓扑图: 前提准备条件: 准备四台机器,一台为keepalived的master,一台为keepalived的backup,一台为rs1,一台为rs2,同时都关闭防火墙和selinux。 ①安装包。 yum install keepalived ②修改位置文件(keepalived的master)。 vim /etc/keepalived/keepalived.cf ③修改keepalived的主配置文件(keepalived的backup) ④给RS1设置VIP并设置成网卡别名。 ⑤同理,给RS2设置VIP并设置为网卡别名。 ⑥查看keepalived服务器上是否有服务。 ⑦测试。 ⑧模拟keepalived的master损坏。 二、实现互为主从模式的高可用技术。 大概网络拓扑图: 实现互为双主模式也就是准备两个VIP同时互相监督,当有一方宕机另一方就立刻顶上,从而实现了高可用。 ①在上个实验中的(主配置master)配置文件里再增加一套instance方案,从而达到互为主从。 ②在(从配置文件backup)修改配置文件,正好和主配置文件互为相反,从而可以互相监督。 本文转自 LUksl 51CTO博客,原文链接:http://blog.51cto.com/19940919/1980857

优秀的个人博客,低调大师

中小型规模网站集群架构:Rsync错误集

常见问题 3.1.1 rsync服务端排错思路 查看rsync服务配置文件路径是否正确,正确的默认路径为:/etc/rsyncd.conf 查看配置文件里host allow,host deny,允许的IP网段是否是允许客户端访问的IP网段。 查看配置文件中path参数里的路径是否存在,权限是否正确(正常应为配置文件中的UID参数对应的属主和组) 查看rsync服务是否启动。查看命令为:ps -ef | grep rsync。端口是否存在netstat -plunt| grep 873 查看iptables防火墙和selinux是否开启允许rsync服务通过,也可考虑关闭。 查看服务端rsync配置的密码文件是否为600的权限,密码文件格式是否正确,正确格式用户名:密码,文件路径和配置文件里的secrect files参数对应。 如果是推送数据,要查看下,配置rsyncd.conf文件中用户是否对模块下目录有可读写的权限。 3.1.2 rsync客户端排错思路 查看客户端rsync配置的密码文件是否为600的权限,密码文件格式shfou 正确,注意:仅需要有密码,并且和服务端的mima 一直 用telnet链接rsync服务器IP地址873查看服务是否启动(可测试服务端防火墙是否阻挡) 客户端执行命令是rsync -avz /etc/hostsrsync_backup@172.16.1.41::backup 此命令的细节要记清楚,尤其是双冒号 3.2 No route to host问题 1 2 3 [root@nfs01~] #rsync-avz/etc/hostsrsync_backup@172.16.1.41::backup rsync :failedtoconnectto172.16.1.41:Noroutetohost(113) rsync error:error in socketIO(code10)atclientserver.c(124)[sender=3.0.6] 解决方案 服务端关闭防火墙 3.3 执行命令错误导致的报错 1 2 3 [root@nfs01~] #rsync-avz/etc/hostsrsync_backup@172.16.1.41::/backup ERROR:Theremotepathmuststartwithamodulenamenota/ rsync error:errorstartingclient-serverprotocol(code5)atmain.c(1503)[sender=3.0.6] 解决: rsync命令语法理解错误:/backup 必须是模块,也就是不能“/” 3.4 @ERROR: auth failed on module backup 1 2 3 4 5 [root@nfs01~] #rsync-avz/etc/hostsrsync_backup@172.16.1.41::backup Password: @ERROR:authfailedonmodulebackup rsync error:errorstartingclient-serverprotocol(code5)atmain.c(1503)[sender=3.0.6] [root@nfs01~] # 解决: 1.账号rsync_backup或者密码123456错误了。 2.指定的密码文件和实际的名称不一致。 secrets file = /etc/rsync.password 3.密码文件的权限忘记改为600 4.密码文件多了一个空格。 vi时候用set list或者用cat -A 3.5 @ERROR: Unknown module 'backupa' 1 2 3 4 [root@nfs01~] #rsync-avz/etc/hostsrsync_backup@172.16.1.41::backupa @ERROR:Unknownmodule 'backupa' rsync error:errorstartingclient-serverprotocol(code5)atmain.c(1503)[sender=3.0.6] [root@nfs01~] # 解决: 文件的模块和命令的模块不匹配 3.6 权限问题 1 2 3 4 5 6 7 [root@nfs01~] #rsync-avz/etc/hostsrsync_backup@172.16.1.41::backup Password: sendingincremental file list rsync :ERROR:cannotstatdestination "." ( in backup):Permissiondenied(13) rsync error:errorsselectinginput /output files, dirs (code3)atmain.c(554)[receiver=3.0.6] rsync :connectionunexpectedlyclosed(5bytesreceivedsofar)[sender] rsync error:error in rsync protocoldatastream(code12)atio.c(600)[sender=3.0.6] 解决: 共享目录的属主和属组不正确,不是rsync 共享目录的权限不正确。不是755 3.7 没有创建对应的目录 1 2 3 4 [root@nfs01~] #rsync-avz/etc/hostsrsync_backup@172.16.1.41::backup Password: @ERROR:chdirfailed rsync error:errorstartingclient-serverprotocol(code5)atmain.c(1503)[sender=3.0.6] 解决: 看配置文件的目录和创建的目录是否对应(相同) 或者目录没有创建 3.8 ID或者用户组和用户组不存在 1 2 3 4 [root@nfs01~] #rsync-avz/etc/hostsrsync_backup@172.16.1.41::backup Password: @ERROR:invaliduid rsync rsync error:errorstartingclient-serverprotocol(code5)atmain.c(1503)[sender=3.0.6] 解决: 创建rsync目录 3.9 客户端已经配置了密码文件,但免密钥登录方式,依旧需要输入密码 1 2 3 4 5 6 7 8 9 10 11 [root@nfs01~] #rsync-avz/etc/hostsrsync_backup@172.16.1.41::backup--password-file=/etc/rsync.password password file mustnotbeother-accessible continuingwithoutpassword file Password: sendingincremental file list hosts rsync :mkstemp ".hosts.xWBidH" ( in backup)failed:Permissiondenied(13) sent196bytesreceived27bytes89.20bytes /sec totalsizeis349speedupis1.57 rsync error:somefiles /attrs werenottransferred(seepreviouserrors)(code23)atmain.c(1039)[sender=3.0.6] 解决: 客户端的密码文件权限不是600 chmod 600 /etc/rsync.password 3.10 传输慢 看日志文件 1 2 3 4 5 6 7 2017 /03/08 20:15:49[25053]params.c:Parameter()-Ignoringbadlyformedline in configuration file :ignoreerrors 2017 /03/08 20:15:49[25053]namelookupfailed for 172.16.1.31:Nameorservicenotknown 2017 /03/08 20:15:49[25053]connectfromUNKNOWN(172.16.1.31) 2017 /03/08 20:15:49[25053] rsync tobackup/fromrsync_backup@unknown(172.16.1.31) 2017 /03/08 20:15:49[25053]receiving file list 2017 /03/08 20:15:49[25053] rsync :mkstemp ".hosts.q63Fzr" ( in backup)failed:Permissiondenied(13) 2017 /03/08 20:15:49[25053]sent173bytesreceived253bytestotalsize349 解决:配置本地域名解析/etc/hosts 1 172.16.1.31nfs01 修改后 1 2 3 4 5 6 2017 /03/08 20:17:46[25056]params.c:Parameter()-Ignoringbadlyformedline in configuration file :ignoreerrors 2017 /03/08 20:17:46[25056]connectfromnfs01(172.16.1.31) 2017 /03/08 20:17:46[25056] rsync tobackup/fromrsync_backup@nfs01(172.16.1.31) 2017 /03/08 20:17:46[25056]receiving file list 2017 /03/08 20:17:46[25056] rsync :mkstemp ".hosts.CmOBRm" ( in backup)failed:Permissiondenied(13) 2017 /03/08 20:17:46[25056]sent173bytesreceived253bytestotalsize349 3.11 客户端目录权限644+rsync使用了avz参数 推送之后会给服务端的/backup目录修改权限。使服务端权限变成644导致传输失败。 sh [root@nfs01 ~]# echo 123456>/etc/rsync.password ash: 123456: Bad file descriptor 3.12 问题,服务没启动 1 2 3 [root@backupscripts] #rsync-avz/etc/hostsrsync_backup@172.16.1.41::allbackup rsync :failedtoconnectto172.16.1.41:Connectionrefused(111) rsync error:error in socketIO(code10)atclientserver.c(124)[sender=3.0.6] 解决: rsync --daemon 未知错误 1 2 3 4 5 [root@nfs01scripts] #rsync-az-delete/data/rsync_backup@172.16.1.41::nfsbackup--password-file=/etc/rsync.password rsync :Failedto exec lete:Nosuch file ordirectory(2) rsync error:error in IPCcode(code14)atpipe.c(84)[sender=3.0.6] rsync :connectionunexpectedlyclosed(0bytesreceivedsofar)[sender] rsync error:error in rsync protocoldatastream(code12)atio.c(600)[sender=3.0.6] 解决:重新写一下命令,就OK? 本文转自 baishuchao 51CTO博客,原文链接:http://blog.51cto.com/baishuchao/1948091

优秀的个人博客,低调大师

Linux系统集群架构线上项目配置实战(一)

项目整体介绍 **整个项目包括以下几个应用工程** 1、 用户APP 2、 商家APP 3、 业务平台管理后台 4、 商家业务管理后台 5、 官网 **整体项目规划设计如下** 1、 用户APP采用JAVA环境布署,初始环境两台服务器,实现负载均衡与高可用,前端负载使用nginx 做负载 2、 商家APP采用JAVA环境布署,初始环境两台服务器,实现负载均衡与高可用,前端负载使用nginx 做负载 3、 业务平台管理后台采用JAVA环境布署,初始环境一台服务器,前端使用nginx 反向代理,后续业务流量扩大,架构重新扩展 4、 商家平台管理后台采用JAVA环境布署,初始环境一台服务器,前端使用nginx 反向代理,后续业务流量扩大,架构重新扩展 5、 官方网站都是一些静态页面,采用nginx布署,WEB服务另安装FTP服务器,做为业务管理后台一些静态资源的上传 6、 数据库使用Mysql主从复制架构,程序上实现读写分享,从库开启binlog做备份使用 7、 全网所有备份数据全部同步到专业内网备份服务器,所有业务备份数据保留30天 8、 全网所有服务器监控(基本监控与服务监控)都采用zabbix监控 服务器IP地址规划如下 服务器环境与应用软件版本介绍 服务器环境 [root@centos ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [root@centos ~]# uname -r 2.6.32-642.el6.x86_64 应用软件版本 Nginx 1.12.1 Mysql 5.7.17 Jdk 1.8 Tomcat 8.5.9 Zabbix 3.0 Yum 源使用163、阿里去、sohu国内的源都可以,自行选择 Redis 4.0.1 服务器逻辑架构图 服务器基础环境配置 因使用云主机服务器,初始系统安装就略过了,如果需要批量安装的请参考前面的文章 配置国内YUM源,以163为例 [root@centos ~]# cd /etc/yum.repos.d/ [root@centos yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo [root@centos yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak [root@centos yum.repos.d]# mv CentOS6-Base-163.repo CentOS-Base.repo 安装需要的软件包 [root@centos ~]# yum install lsof vim telnet dos2unix lrzsz tree –y 关闭不需要启动的服务 [root@centos ~]#for service in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $service off;done [root@centos ~]#for service in crond network sshd rsyslog;do chkconfig --level 3 $service on;done [root@centos ~]# chkconfig --list|grep 3:on 修改SSH服务的默认配置 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's%#Port 22%Port 2233%g' /etc/ssh/sshd_config sed -i 's%#PermitRootLogin yes%PermitRootLogin no%g' /etc/ssh/sshd_config sed -i 's%#PermitEmptyPasswors no%PermitEmptyPasswors no%g' /etc/ssh/sshd_config sed -i 's%#UseDNS yes%UseDNS no%g' /etc/ssh/sshd_config egrep "UseDNS|2233|RootLogin|EmptyPass" /etc/ssh/sshd_config /etc/init.d/sshd reload 关闭selinux 配置文件/etc/selinux/config sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config egrep "SELINUX=" /etc/selinux/config 关闭防火墙 如果不是对外网的服务器,直接关闭防火墙,有外网地址的可建议开启,并允许相关的服务端口,并发高的服务器也不需要开启防火墙,可能会影响性能 /etc/invited/pintables stop /etc/invited/pintables status pintables: Firewall is not running. 锁定系统关键文件 for file in /etc/passed /etc/shadow /etc/services /etc/initial /etc/rc.local do chattr +i $file done 配置普通操作用户及sudo权限 具体操作请参考公众号相关文章介绍 配置全网服务器时间同步 /usr/sbin/ntpdate time.windows.com cat>>/var/spool/cron/root<<EOF #this cron is for ntpdate */5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2>&1 #cron config end EOF 配置全网服务器hosts文件 Cat>>/etc/hosts<<EOF 10.0.0.1 nginx-lb 10.0.0.2 nginx-proxy 10.0.0.3 nginx 10.0.0.4 userapp 10.0.0.5 sjapp 10.0.0.6 admin 10.0.0.7 shangjia 10.0.0.8 web 10.0.0.9 mysql-m 10.0.0.10 mysql-s 10.0.0.11 ftp-backup 10.0.0.12 redis 10.0.0.13 backup-server 10.0.0.14 zabbix EOF 规范所有服务器目录 [root@centos ~]# mkdir /download/tools/ -p [root@centos ~]# mkdir /app/logs -p [root@centos ~]# mkdir /app -p [root@centos ~]# mkdir /server/{scripts,backup} –p 至此基本的服务器优化配置也就结束了,接下来就是安装各类服务 本文转自 民工哥 51CTO博客,原文链接:http://blog.51cto.com/mingongge/2056979

优秀的个人博客,低调大师

0551-期中集群架构nginx负载均衡实践

一环境准备 服务器说明 外网IP(NAT) 内网IP(NAT) 主机名称规划 A1-nginx负载服务器01 10.0.0.5/24 172.16.1.5/24 lb01 A2-nginx负载服务器02 10.0.0.6/24 172.16.1.6/24 lb02 安装反向代理,负载均衡就是安装nginx,安装nginx和之前安装web一样的。 nginx反向代理负载均衡安装(和安装nginx web服务器一样的) 1 安装依赖软件包命令集合 yum install openssl openssl-devel pcre pcre-devel -y rpm -qa openssl openssl-devel pcre pcre-devel 2 安装nginx软件包命令集合 mkdir -p /home/oldboy/tools cd /home/oldboy/tools wget -q http://nginx.org/download/nginx-1.6.3.tar.gz ls -l nginx-1.6.3.tar.gz useradd nginx -s /sbin/nologin -M tar xf nginx-1.6.3.tar.gz cd nginx-1.6.3 ./configure --user=nginx --group=nginx --prefix=/application/nginx-1.6.3 --with-http_stub_status_module --with-http_ssl_module make make install ln -s /application/nginx-1.6.3 /application/nginx 3.配置 [root@lb01 nginx-1.6.3]# ll /application/nginx/ 总用量 16 drwxr-xr-x 2 root root 4096 8月 30 22:39 conf drwxr-xr-x 2 root root 4096 8月 30 22:39 html drwxr-xr-x 2 root root 4096 8月 30 22:39 logs drwxr-xr-x 2 root root 4096 8月 30 22:39 sbin [root@lb01 nginx-1.6.3]# cd /application/nginx/conf/ [root@lb01 conf]# ll 总用量 60 -rw-r--r-- 1 root root 1034 8月 30 22:39 fastcgi.conf -rw-r--r-- 1 root root 1034 8月 30 22:39 fastcgi.conf.default -rw-r--r-- 1 root root 964 8月 30 22:39 fastcgi_params -rw-r--r-- 1 root root 964 8月 30 22:39 fastcgi_params.default -rw-r--r-- 1 root root 2837 8月 30 22:39 koi-utf -rw-r--r-- 1 root root 2223 8月 30 22:39 koi-win -rw-r--r-- 1 root root 3957 8月 30 22:39 mime.types -rw-r--r-- 1 root root 3957 8月 30 22:39 mime.types.default -rw-r--r-- 1 root root 2656 8月 30 22:39 nginx.conf -rw-r--r-- 1 root root 2656 8月 30 22:39 nginx.conf.default -rw-r--r-- 1 root root 596 8月 30 22:39 scgi_params -rw-r--r-- 1 root root 596 8月 30 22:39 scgi_params.default -rw-r--r-- 1 root root 623 8月 30 22:39 uwsgi_params -rw-r--r-- 1 root root 623 8月 30 22:39 uwsgi_params.default -rw-r--r-- 1 root root 3610 8月 30 22:39 win-utf [root@lb01 conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf [root@lb01 conf]# vim nginx.conf 把17 18 19 20 行删除 1 worker_processes 1; 2 events { 3 worker_connections 1024; 4 } 5 http { 6 include mime.types; 7 default_type application/octet-stream; 8 sendfile on; 9 keepalive_timeout 65; 10 server { 11 listen 80; 12 server_name localhost; 13 location / { 14 root html; 15 index index.html index.htm; 16 } 17 error_page 500 502 503 504 /50x.html; 18 location = /50x.html { 19 root html; 20 } 21 } 22 } 然后在server标签上面增加如下几行 upstream www_server_pools { #<==这里是定义web服务器池,包含了7,8两个web节点 server 10.0.0.7:80 weight=1; server 10.0.0.8:80 weight=1; } 然后在index这行的下面增加如下内容: proxy_pass http://www_server_pools; 然后把代理的服务器localhost修改为代理的服务器,例如:www.etiantian.org 最后完成的nginx.conf配置如下 [root@lb01 conf]# cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream www_server_pools { server 10.0.0.7:80 weight=1; server 10.0.0.8:80 weight=1; } server { listen 80; server_name www.etiantian.org; location / { root html; index index.html index.htm; proxy_pass http://www_server_pools; } } } 这样负载均衡就配置完成了。 接下来nginx语法检查,启动nginx服务。 [root@lb01 conf]# ../sbin/nginx -t nginx: the configuration file /application/nginx-1.6.3/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx-1.6.3/conf/nginx.conf test is successful [root@lb01 conf]# ../sbin/nginx [root@lb01 conf]# ../sbin/nginx -s reload [root@lb01 conf]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 4285 root 6u IPv4 17693 0t0 TCP *:http (LISTEN) nginx 4288 nginx 6u IPv4 17693 0t0 TCP *:http (LISTEN) lb01作为客户端测试下: [root@lb02 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.1.5 lb01 www.etiantian.org etiantian.org blog.etiantian.org bbs.etiantian.org 172.16.1.6 lb02 172.16.1.7 web02 172.16.1.8 web01 172.16.1.51 db01 db01.etiantian.org 172.16.1.31 nfs01 172.16.1.41 backup 172.16.1.61 m01 [root@lb02 ~]# for n in `seq 100`;do curl www.etiantian.org;sleep 1;done [root@lb02 ~]# for n in `seq 100`;do curl www.etiantian.org/index.html;sleep 1;done nginx www apache www nginx www apache www [root@lb02 ~]# for n in `seq 100`;do curl www.etiantian.org;sleep 1;done nginx www apache www nginx www apache www nginx www 负载到两个web服务器上面来回切换。 proxy_pass http://www_server_pools;这行后面加一样添加请求头。 proxy_set_header Host $host; ##加请求头。 客户端请求www.etiantian.org给负载均衡nginx,默认nginx是不带请求头的,如果加了请求头就可以找到想要的虚拟主机了。 默认情况下web节点的access.log 日志里面IP不是用户的ip地址,而是代理的IP。 要想实现节点中记录用户的ip地址,需要在proxy_set_header Host $host;后面再加一行,如下: proxy_set_header X-Forwarded-For $remote_addr; [root@web01 logs]# pwd /application/nginx/logs [root@web01 logs]# cat access.log 同理,把lb02也配置和lb01一样的负载均衡。 lb02里面的nginx.conf配置要和lb01一样 先把lob01机器停掉。 [root@lb01 ~]# pkill nginx 然后在m01机器里面测试 for n in `seq 100`;do curl 172.16.1.6/index.html;sleep 1;done 可以看到lb02代理服务器一会代理web01一会代理web02 [root@m01 ~]# for n in `seq 100`;do curl 172.16.1.6/index.html;sleep 1;done nginx www apache www 如何实现lb高可用呢? 负载均衡器的VIP规划为10.0.0.3/24 在两台机器上面配置辅助IP [root@lb01 ~]# ip addr add 10.0.0.3/24 dev eth0 label eth0:0 windows hosts文件增加解析: 10.0.0.3 www.etiantian.org bbs.etiantian.org blog.etiantian.org etiantian.org 然后lb01再配置反向代理 在ie中输入http://blog.etiantian.org/就可以访问blog了,可以看到博客文字和图片。 然后ie中ping blog.etiantian.org 就可以看到返回的lb01虚ip地址了10.0.0.3 C:\Users\Administrator>ping blog.etiantian.org 正在 Ping www.etiantian.org [10.0.0.3] 具有 32 字节的数据: 来自 10.0.0.3 的回复: 字节=32 时间<1ms TTL=64 来自 10.0.0.3 的回复: 字节=32 时间<1ms TTL=64 来自 10.0.0.3 的回复: 字节=32 时间<1ms TTL=64 来自 10.0.0.3 的回复: 字节=32 时间<1ms TTL=64 10.0.0.3 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 0ms,最长 = 0ms,平均 = 0ms 继续把lb02里面的nginx.conf配置和lb01一样的,然后配置和lb01一样的虚ip地址 [root@lb02 conf]# ip addr add 10.0.0.3/24 dev eth0 label eth0:0 这样lb01和lb01就实现了负载均衡反向代理。 下面用keepalived实现 lb01和lb01同时按照yum install keepalived -y [root@lb01 ~]# yum install keepalived -y 编辑/etc/keepalived/keepalived.conf文件为如下内容: [root@lb01 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { 13779258@qq.com } notification_email_from 13779258@qq.com smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 dev eth0 label eth0:1 } } 然后scp拷贝给lb02机器 [root@lb01 ~]# scp /etc/keepalived/keepalived.conf root@172.16.1.6:/etc/keepalived/ 然后修改lb02的keepalived.conf配置文件,修改完成后一定要重启下nginx服务。 [root@lb02 conf]# vim /etc/keepalived/keepalived.conf 修改的内容为: router_id LVS_DEVEL1 state BACKUP priority 100 然后lb01和lb02都启动keepalived [root@lb01 ~]# /etc/init.d/keepalived start 正在启动 keepalived: [确定] [root@lb02 conf]# /etc/init.d/keepalived start 正在启动 keepalived: [确定] 启动后主keepalivedlb01先获取到资源,只有当主的挂了从lb02才启动。 检查有没有启动: [root@lb01 ~]# ip addr|grep 10.0.0.3 inet 10.0.0.3/24 scope global secondary eth0:0 [root@lb02 conf]# ip addr|grep 10.0.0.3 inet 10.0.0.3/24 scope global secondary eth0:0 先把手工配置的虚IPdown了,要不冲突了。 [root@lb01 ~]# ifconfig eth0:0 down [root@lb01 ~]# ip addr|grep 10.0.0.3 [root@lb02 conf]# ifconfig eth0:0 down [root@lb02 conf]# ip addr|grep 10.0.0.3 重启服务器后发现只有lb01主keepalived有虚ip,从lb01keepalived没有虚ip,这就说明成功了。 [root@lb01 ~]# /etc/init.d/keepalived restart 停止 keepalived: [确定] 正在启动 keepalived: [确定] [root@lb01 ~]# ip addr|grep 10.0.0.3 inet 10.0.0.3/24 scope global secondary eth0:1 [root@lb02 conf]# /etc/init.d/keepalived restart 停止 keepalived: [确定] 正在启动 keepalived: [确定] [root@lb02 conf]# ip addr|grep 10.0.0.3 如果两个都有IP就说明会列脑了。出问题了 然后ie再访问http://blog.etiantian.org/ 就可以看到图片和文字的博客了。 现在测试把lb01机器挂掉,然后查看lb01是否有虚ip地址: [root@lb02 conf]# ip addr|grep 10.0.0.3 inet 10.0.0.3/24 scope global secondary eth0:1 然后在登录ie测试:可以正常登录blog.etiantian.org 然后测试: 把主lb01从挂载状态打开到正常开机状态,那么lb01就自动把虚ip从lb02抢过来了。 抢过来的证据如下所示: [root@lb01 ~]# ip addr|grep 10.0.0.3 inet 10.0.0.3/24 scope global secondary eth0:1 [root@lb01 ~]# [root@lb02 conf]# ip addr|grep 10.0.0.3 [root@lb02 conf]# 再次用ie打开blog.etiantian.org可以正常打开博客。 本文转自sandshell博客51CTO博客,原文链接http://blog.51cto.com/sandshell/1961261如需转载请自行联系原作者 sandshell

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册