Linux运维入门到高级全套系列

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基

于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作

系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支

持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,

是一个性能稳定的多用户网络操作系统。

1991年的10月5日,Linux创始人林纳斯·托瓦兹(LinusTorvalds)

994年3月,Linux1.0发布,代码量17万行,当时是按照完全自由

1

免费的协议发布,随后正式采用GPL(GeneralPublicLicense的缩写,

Linux具有如下优点:

稳定、免费或者花费少

安全性高

多任务,多用户

耗资源少

由于内核小,所以它可以支持多种电子产品,如:Android手机、

PDA等。

1.2Linux发展趋势

随着IT产业的不断发展,用户对网站体验要求也越来越高,而目

前主流网站后端承载系统都是Linux系统,目前Android手机全部基

于Linux内核研发。企业大数据、云存储、虚拟化等先进技术都是基

于Linux系统。

2010年据有关权威部门统计:将来几年内我国软件行业的从业机

会十分庞大,中国每年对软件人才的需求将达到50万人左右。而对

于Linux专业人才的就业前景,更是广阔;据悉在未来5-10年

内Linux专业人才的需求将达到120万+!尤其是有经验的资深的

Linux工程师目前非常的缺乏,薪资也是非常诱人,平均月薪都是

15-20K,能力强的薪资更高。

所以机会对每个人都是公平的,关键是我们每个人如何去行动,

选择大于努力。

1.3Linux系统安装

在安装Linux系统之前,先来了解windows系统结构,windows

系统一般是安装在C盘系统盘,同样Linux也有类似的系统盘(/根分

区),Linux通常分区为(根分区/、swap分区),Linux系统以文件的

存储方式,所有的文件都是存储在某个目录下的,类似于windows

的文件夹。

对于文件系统的属性来说,windows文件系统类型一般是ntfs、

fat32等,而Linux文件系统类型则为ext2、ext3、ext4等(文件系统:

统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管

理所需数据结构。)

安装Linux系统是每一个初学者的第一个门槛。在这个过程中间,

最大的困惑莫过于给硬盘进行分区。虽然现在各种发行版本的Linux

已经提供了友好的图形交互界面,但是很多人还是感觉无从下手。这

其中的原因主要是不清楚Linux的分区规定。就好比如果我们了解了

windows分区的规则,系统盘C、数据盘D等,就很好分区了。

在Linux中规定,每一个硬盘设备最多只能有4个主分区(其中

包含扩展分区)构成,任何一个扩展分区都要占用一个主分区号码,

也就是在一个硬盘中,主分区和扩展分区一共最多是4个。

下面正式来安装Linux系统,安装系统前需要准备如下软件:

VMwareworkstation10.0

CentOS5.8x86_i386.iso

安装图解如下:

第一步,新建虚拟机如下图:

第三步选择“稍后安装操作系统”,如下图:

第四步,选择客户机操作系统类型如下图:

第五步,设置虚拟机硬盘大小为20G,最低不能小于5G,如下图:

第六步,虚拟机新建完成,如下图:

第七步,修改虚拟机内存为512M,并添加ISO镜像,如下图:

自此,虚拟机新建完成,接下来点击“启动此虚拟机”进行Linux系

统安装,Linux系统安装图解如下:

第一步,进入安装界面,直接按Enter回车键即可。

第二步,光盘检测,选择SKIP跳过。

第三步,选择安装过程中的语言,初学者可以选择“简体中文”。

第四步,选择初始化整个硬盘,清除所有数据。

第五步,选择分区方式为“自定义分区“。

第五步,点击“新建“-首先创建一个swap交换分区,大小为物理内

存的2倍(1024M)。

第六步,继续创建分区,选择“新建“,然后创建根分区/,如下图

选择,大小为剩余所有空间即可。

第七步,默认点击下一步,同时默认DHCP配置,时钟选择上海,去

掉UTC勾,点击下一步。

第八步,设置root密码,至少六位,点击下一步。

第九步,系统安装包选择,这里选择“现在定制“。

第十步,系统安装包选择,左侧选择“开发“----右侧选择”开发工

具“和“开发库”,语言选择“支持中文“,其他一概不选择。

安装完毕会提示“reboot“,直接回车即可。

1.4Linux学习技巧

初学者可以自己安装虚拟机,然后把linux常用命令例如cd、ls、

chmod、useradd、vi等等多练习几十遍,把自己敲打命令的熟练程度

提升上来。

然后根据文档搭建Linux下常见的各种服务(DHCP、SAMBA、DNS、

Apache、Mysql等),遇到问题后可以在google搜索,搜索的时候多

能够熟练的搭建服务后,理解每个服务的完整配置和优化,可以

拓展思维。例如LAMP,我们一般是把所有服务放在一台机器上,如

果分开多台该如何部署呢?等等。

平时多积累shell编程,可以在网上查找前辈们写的非常好的shell,

自己下载下来多练习几遍,从中吸取,不断提高。

建立一个自己的学习博客,把平时工作学习中的知识都记录在里

面,这样也可以供别人来参考同时也能提高自己的编写文档及方案的

能力。

通过以上学习能够满足企业的一般应有,需要达到资深级别,还

需要深入学习集群架构、负载均衡、自动化运维、运维开发等知识。

最后还是一句话:多练习才是硬道理!实践出真知!

2.Linux系统篇

2.1Linux系统管理

通过前两章的学习,我们已经能够独立安装Linux系统,已经掌握

了Linux学习的技巧,那接下来,我们将系统的来了解Linux系统各

目录、权限及常用命令的使用。

2

.1.1Linux目录初识

通过前面的学习,我们已经能够独立安装完一个linux系统,那接

下来我们来熟悉一下Linux系统里面的各个目录文件夹的大致功能:

主要的目录树的有/、/root、/home、/usr、/bin等目录。下面是一个

典型的linux目录结构如下:(附图表)

/

根目录

bin存放必要的命令

boot存放内核以及启动所需的文件

etc存放系统配置文件

home普通用户的宿主目录,用户数据存放在其主目录中

lib存放必要的运行库

mnt存放临时的映射文件系统,通常用来挂载使用。

/proc存放存储进程和系统信息

root超级用户的主目录

sbin存放系统管理程序

tmp存放临时文件

usr存放应用程序,命令程序文件、程序库、手册和其它文档。

var系统默认日志存放目录

.1.2Linux常用命令

默认进入系统,我们会看到这样的字符:[root@localhost~]#,其中#

我们了解linux由很多目录文件构成,那我们来学习第一个Linux

命令:

cd命令,cd/home;解析:进入/home目录

cd/root进入/root目录;cd../返回上一级目录;cd./当前目录;

.和..可以理解为相对路径;例如cd/hom/test,cd加完整的路径,

可以理解为绝对路径)

接下来继续学习更多的命令:

ls./查看当前目录所有的文件和目录。

ls-a查看所有的文件,包括隐藏文件,以.开头的文件。

pwd显示当前所在的目录。

mkdir创建目录,用法mkdirtest,命令后接目录的名称。

rmdir删除空目录

rm删除文件或者目录,用法rm–rftest.txt(-r表示递归,-f表

示强制)。

cp拷贝文件,用法,cpold.txt/tmp/new.txt,常用来备份;如

果拷贝目录

需要加–r参数。

mv重命名或者移动文件或者目录,用法,mvold.txtnew.txt

touch创建文件,用法,touchtest.txt,如果文件存在,则表示修

Useradd创建用户,用法useraddwugk,userdel删除用户。

Groupadd创建组,用法groupaddwugk1,groupdel删除组。

find查找文件或目录,用法find/home-name“test.txt”,命令

格式为:

find后接查找的目录,-name指定需要查找的文件名称,名称可

以使用*表示所有。

find/home-name“*.txt”;查找/home目录下,所有以.txt结

尾的文件或者目录。

vi修改某个文件,vi有三种模式:

命令行模式、文本输入模式、末行模式。

默认vi打开一个文件,首先是命令行模式,然后按i进入文本输

入模式,可以在文件里写入字符等等信息。

写完后,按esc进入命令模式,然后输入:进入末行模式,例如输

入:wq表示保存退出。

如果想直接退出,不保存,可以执行:q!,q!叹号表示强制退出。

cat查看文件内容,用法cattest.txt可以看到test.txt内容

more查看文件内容,分页查看,cat是全部查看,如果篇幅很多,

只能看到最后的篇幅。可以使用cat和more同时使用,例如:cat

test.txt|more分页显示text内容,|符号是管道符,用于把|前的输

出作为后面命令的输入。

echo回显,用法echook,会显示ok,输入什么就打印什么。

echook>test.txt;把ok字符覆盖test.txt内容,>表示追加并

覆盖的意思。

>>两个大于符号,表示追加,echook>>test.txt,表示向test.txt文

件追加OK字符,不覆盖原文件里的内容。

初学者常见的命令就如上所示,当然还有很多深入的命令需要学

习,后面的课程会讲解。

.1.3Linux用户权限

在Linux操作系统中,root的权限是最高的,相当于windows的

administrator,拥有最高权限,能执行任何命令和操作。在系统中,

通过UID来区分用户的权限级别,UID等于0,表示此用户具有最高

权限,也就是管理员。其他的用户UID依次增加,通过/etc/passwd

用户密码文件可以查看到每个用户的独立的UID。

每一个文件或者目录的权限,都包含一个用户权限、一个组的权

限、其他人权限,例如下:

标红第一个root表示该文件所有者是root用户,第二个root代

表该文件的所属的组为root组,其他用户这里默认不标出。

[

root@node1~]#ls-lmonitor_log.sh

-

rw-r--r--1rootroot91May720:21monitor_log.sh

root@node1~]#

如果我们想改变某个文件的所有者或者所属的组,可以使用命令

chown

chown–Rtest:testmonitor_log.sh即可。

每个Linux文件具有四种访问权限:可读(r)、可写(w)、可执行(x)和

无权限(-)。

利用ls-l命令可以看到某个文件或目录的权限,它以显示数据的第一

个字段为

准。第一个字段由10个字符组成,如下:

第一位表示文件类型,-表示文件,d表示目录;后面每三位为一

组。

第一组:2-4位表示文件所有者的权限,即用户user权限,简称u

第二组:5-7位表示文件所有者所属组成员的权限,group权限,简

称g

第三组:8-10位表示所有者所属组之外的用户的权限,other权限,

简称o

从上面这个文件,我们可以看出,monito_log.sh文件对应的权限为:

root用户具有读和写的权限,root组具有读的权限,其他人具有读

的权限。

为了能更简单快捷的使用和熟悉权限,rwx权限可以用数字来表

示,分别表示为r(4)、w(2)、x(1)。

Monitor_log.sh权限可以表示为:644

.1.4Linux网络配置

熟悉了常用的命令和Linux权限,那接下来如何让所在的Linux系

统上网呢?管理linux服务器网络有哪些命令呢?

Linux服务器默认网卡配置文件在/etc/sysconfig/network-scripts/下,

命名的名称一般为:ifcfg-eth0ifcfg-eth1,eth0表示第一块网卡,eth1

表示第二块网卡,依次类推。一般DELLR720标配有4块千兆网卡。

修改网卡的IP,可以使用命令:vi

etc/sysconfig/network-scripts/ifcfg-eth0如果是DHCP获取的IP,默认

配置如下:

AdvancedMicroDevices[AMD]79c970[PCnet32LANCE]

#

DEVICE=eth0

BOOTPROTO=dhcp

HWADDR=00:0c:29:52:c7:4e

ONBOOT=yes

TYPE=Ethernet

如果是静态配置的IP,ifcfg-eth0网卡配置内容如下:

BOOTPROTO=static

IPADDR=192.168.149.128

NETMASK=255.255.255.0

GATEWAY=192.168.149.1

网卡参数详解如下:

DEVICE=eth0#物理设备名

ONBOOT=yes#[yes|no](重启网卡是否激活设备)

BOOTPROTO=static#[none|static|bootp|dhcp](不使用协议|静态分配

|BOOTP协议|DHCP协议)

TYPE=Ethernet#网卡类型

IPADDR=192.168.149.128#IP地址

NETMASK=255.255.255.0#子网掩码

GATEWAY=192.168.149.1#网关地址

网卡配置完毕,重启网卡,命令:/etc/init.d/networkrestart即可。

查看ip命令:ifconfig查看当前服务器所有网卡的IP,可以单独指定,

ifconfigeth0查看eth0的IP地址。

网卡配置完毕,如果来配置DNS,首先要知道DNS配置在哪个目录

文件下,vi/etc/resolv.conf文件:

在该文件里面添加如下两条:

nameserver202.106.0.20

nameserver8.8.8.8

从上到下,分别表示主DNS,备DNS。配置完毕后,不需要重启网卡,DNS

立即生效。

IP配置完毕后,我们可以通过远程工具来连接Linux服务器,常见的

Linux远程连接工具有:putty、secureCRT(主流)、xshell、xmanger等

工具。

下载安装secureCRT,打开工具,然后如图配置:

点击左上角quickconnect快速连接,弹出界面,然后输入IP,用户名,

端口默认是22,然后点击下方的connect连接,会提示输入密码,输

入即可。

弹出输入密码框:

通过这几章的学习,我们已经熟练了Linux常用命令的操作,权限

网络、网络配置、远程连接等知识,那接下来我们还能做什么呢?我

们已经差不多入门了,接下来就是更进一步的服务配置,Linux系统

到底用来做什么呢?接下来的章节将跟大家一起来学习。

Linux系统的应用,我们最开始介绍的时候简单介绍过,目前大中

型企业都用它来承载web网站、数据库、虚拟化平台等,那接下来

我们将在Linux系统安装各种服务和软件来实现Linux真正的价值。

3.Linux服务篇

3.1Linux服务部署

3

NTP服务器监听端口为UDP的123,那就需要在本地防火墙开启

运行客户端访问123端口,vi/etc/sysconfig/iptables添加如下规则:

AINPUT-mstate--stateNEW-mudp-pudp--dport123-jACCEPT

yuminstallntpntpdate-y即可!

修改ntp.conf配置文件

cp/etp/ntp.conf/etc/ntp.conf.bak

vi/etc/ntp.conf只修改如下两行,把#号去掉即可!

server127.127.1.0

#localclock

fudge127.127.1.0stratum10

以守护进程启动ntpd

/etc/init.d/ntpdstart即可

则会提示“noserversuitableforsynchronizationfound”错误。)

crontab-e

0

06

*

/usr/sbin/ntpdate

ntp-server

ip>>/usr/local/logs/crontab/ntpdate.log

备注:如果客户机没有ntpdate,可以yum–yinstallntp即可!

以下是ntp服务器配置文件内容(局域网NTP,如果需要跟外网同步,

添加外网server即可)

driftfile/var/lib/ntp/drift

restrictdefaultkodnomodifynotrapnopeernoquery

restrict-6defaultkodnomodifynotrapnopeernoquery

restrict127.0.0.1

restrict-6::1

includefile/etc/ntp/crypto/pw

keys/etc/ntp/keys

下面是参数详解:

restrictdefaultignore

关闭所有的

NTP

要求封包

lo

开启内部递归网络接口

在内部子网里面的客户端可以进行

restrict192.168.0.0mask

55.255.255.0nomodify

服务器的

网络校时,但不能修改

server198.123.30.132

restrict198.123.30.132

#198.123.30.132

器参考

开放

server

访问我们服务的权

ntp

文件内

broadcastdelay0.008

自此NTP服务搭建完毕,然后在所有客户端crontab里面添加如下语

句:

***/usr/sbin/ntpdate10.0.0.155>>/data/logs/ntp.log

>&1

.1.2构建DHCP服务器

DHCP(DynamicHostConfigurationProtocol,动态主机配置协议)是

和UDP68为正常的DHCP服务端口,分别作为DHCPServer和DHCP

Client的服务端口。

DHCP可以部署在服务器、交换机或者服务器,可以控制一段IP

IP地址和子网掩码。其中DHCP所在服务器的需要安装TCP/IP协议,

需要设置静态IP地址、子网掩码、默认网关。

正式安装DHCP服务:

Yum

install

dhcpdhcp-devel–y即可,然后修改DHCP

/etc/dhcpd.conf配置文件内容如下:

ddns-update-styleinterim;

ignoreclient-updates;

next-server192.168.0.79;

filename"pxelinux.0";

allowbooting;

allowbootp;

subnet192.168.0.0netmask255.255.255.0{

---defaultgateway

optionrouters192.168.0.1;

optionsubnet-mask255.255.252.0;

optionnis-domain

"domain.org";

optiondomain-name"192.168.0.10";

optiondomain-name-servers192.168.0.11;

optionntp-servers192.168.1.1;

optionnetbios-name-servers192.168.1.1;

---Selectspoint-to-pointnode(defaultishybrid).Don't

changethisunless

--youunderstandNetbiosverywell

optionnetbios-node-type2;

rangedynamic-bootp192.168.0.100192.168.0.200;

hostns{

hardwareethernet00:1a:a0:2b:38:81;

fixed-address192.168.0.101;}

}

参数解析如下:

ddns-update-style

DHCP

服务器与

DNS

参数用来设置

interim|ad-hoc|none

服务器的动态信息更新模式:

interim为DNS互动更新模式,

ad-hoc为特殊DNS更新模式,none

为不支持动态更新模式。

next-serverip

filename

pxeclient

tftp

远程安装系统,指定

server地址

开始启动文件的名称,应用于无盘

安装,可以是tftp的相对或绝对路

ignoreclient-updates

为忽略客户端更新

subnet-mask

为客户端设定子网掩码

为客户端指定网关地址

optionrouters

domain-name

为客户端指明

名字

domain-name-servers

IP

host-name

为客户端指定主机名称

为客户端设定广播地址

broadcast-address

地址

time-offset

注意如上配置,需要修改成对应服务器网段IP,然后重启DHCP服务,

/etc/init.d/dhcpdrestart即可。

客户端要从这个DHCP服务器获取IP,需要做简单的设置,如果

是linux需要把/etc/sysconfig/network-scritps/ifcfg-eth0里BOOTPROTO

相改成dhcp即可,windows机器的话,需要修改本地连接,把它设

置成自动获取IP即可。

.1.3搭建Samba服务器

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软

件,由服务器及客户端程序构成,

供文件及打印机等资源的共享服务。

SMB协议是客户机/服务器型协议,客户机通过该协议可以访问

安装SAMBA服务器:

Yuminstallsamba–y

安装完毕,然后做如下设置(过滤#号行、空行如下命令)

cp/etc/samba/smb.conf/etc/samba/smb.conf.bak;egrep-v"#|^$"

etc/samba/smb.conf.bak|grep-v"^;">/etc/samba/smb.conf

查看smb.conf配置文件如下:

[global]

workgroup=MYGROUP

serverstring=SambaServerVersion%v

security=share

passdbbackend=tdbsam

loadprinters=yes

cupsoptions=raw

temp]

comment=Temporaryfilespace

path=/tmp

readonly=no

public=yes

data]

path=/data

根据需求修改之后重启服务:

root@node1~]#/etc/init.d/smbrestart

Shutting

FAILED]

Starting

OK]

down

SMB

NMB

services:

workgroup=

WORKGROUP

SambaServer

所要加入的工作

组或者域。

serverstring=SambaServer

的注释,可以是任何字符串,也可

Samba

Server

以不填。宏%v表示显示Samba

的版本号。

Version%v

.share:用户访问SambaServer不需要提供用户

名和口令,安全性能较低。

户访问,由SambaServer负责检查账号和密码的

security=user

中建

正确性。账号和密码要在本

立。

.server:依靠其他WindowsNT/2000或Samba

Server来验证用户的账号和密码,是一种代理验

证。此种安全模式下,系统管理员可以把所有的

Windows用户和口令集中到一个NT系统上,使用

WindowsNT进行Samba认证,远程服务器可以

自动认证全部用户和口令,如果认证失败,Samba

将使用用户级安全模式作为替代的方式。

4

.domain:域安全级别,使用主域控制器(PDC)来

完成认证。

comment=test

path=

是对该共享的描述,可以是任意字符串。

共享目录路径

/home/test

browseable=

yes/no

用来指定该共享是否可以浏览。

writable=

writable

用来指定该共享路径是否可写。

available

用来指定该共享资源是否可用

available=

adminusers=

admin

该共享的管理者

validusers=

test

允许访问该共享的用户

禁止访问该共享的用户

允许写入该共享的用户

invalidusers=

writelist=test

public=yes/nopublic

guest

账户访

用来指定该共享是否允许

问。

端IP),如何没有权限访问,需要注意防火墙和selinux设置,可以使

用如下命令关闭:

/etc/init.d/iptablesstop;sed–i

‘/SELINUX/s/enforcing/disabled’

/etc/sysconfig/selinux

.1.4搭建NFS服务器

NFS是NetworkFileSystem的缩写,即网络文件系统。一种使

用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。

数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,

是在类Unix系统间实现磁盘文件共享的一种方法。

NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远

程过程调用(RemoteProcedureCall)是能使客户端执行其他系统

中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的。

NFS应用场景,常用于高可用文件共享,多台服务器共享同样的

数据,可扩展性比较差,本身高可用方案不完善,取而代之的数据量

比较大的可以采用MFS、TFS、HDFS等等分布式文件系统。

NFS安装配置:

Yuminstallnfs*portmap-y如下图,安装成功即可。

NFS安装完毕,需要创建共享目录,共享目录在/etc/exports文

件里面配置,可配置参数如下:

data/

192.168.149.129(rw,sync,no_hide,no_all_squash)

在配置文件中添加如上一行,然后重启Portmap,NFS服务即可,

etc/init.d/portmaprestart;/etc/init.d/nfsrestart

第一列/data/表示需要共享的目录。

IP表示允许哪个客户端访问。

IP后括号里的设置表示对该共享文件的权限。

ro

只读访问

rw

读写访问

sync

所有数据在请求时写入共享

在NFS共享目录中不共享其子目录

共享NFS目录的子目录

共享文件的UID和GID映射匿名用户

hide

no_hide

all_squash

anonymous,适合公用目录。

no_all_squash

root_squash

保留共享文件的UID和GID(默认)

root用户的所有请求映射成如

anonymous用户一样的权限(默认)

no_root_squasroot用户具有根目录的完全管理访问

权限

Linux客户端,如何想使用这个NFS文件系统,需要在客户端挂

载,挂载命令为:

Mount–tnfs192.168.149.128:/data/

/mnt即可。如果有

报错根据错误信息排查。常见问题有rpc服务没有启动、防火墙没关

闭、selinux未关闭等问题。(拓展*有兴趣的童鞋可以研究MFS(分

布式文件系统)。)

.1.5搭建FTP服务器

是小巧轻快,安全易用;能让其自身特点得发发挥和掌握。

目前在开源操作系统中常用的FTP服务器程序主要有vsftpd、

ProFTPD、PureFTPd和wuftpd等,这么多FTP服务器程序,关键

在于自己熟练哪一个就使用哪一个。今天我们来研究一下VSFTPD

简单安装及使用。安装命令:yuminstallvsftpd*-y

修改配置文件如下:

#vsftpdconfig2014bywugk

anonymous_enable=NO

//禁止匿名用户访问

write_enable=YES//运行用户在FTP目录有写入的权限

local_umask=022//设置本地用户的文件生成掩码为022,默认

是077

dirmessage_enable=YES//激活目录信息,当远程用户更改目录时,

将出现提示信息

xferlog_enable=YES//启用上传和下载日志功能

connect_from_port_20=YES//启用FTP数据端口的连接请求

xferlog_std_format=YES//是否使用标准的ftpdxferlog日志文件

格式

listen=YES//使vsftpd处于独立启动监听端口模式

pam_service_name=vsftpd//设置PAM认证服务配置文件名称,文

件存放在/etc/pam.d/目录

器,默认是不允许

tcp_wrappers=YES

//使用tcp_wrqppers作为主机访问控制方式

户,并为其设置名,然后在xp客户端打开我的电脑资源里面访问

删除操作。

2)第二种方法比较安全,配置相对复杂一点,就是使用vsftpd虚拟

首先安装FTP虚拟用户需要用到的软件及认证模块

yuminstallpam*db4*--skip-broken–y

创建并生成vsftpd数据库文件vi/etc/vsftpd/ftpusers.txt,内容如

下:

用户名,依次类推。

wugk

wugk1

生成数据库文件命令:

-T-t

etc/vsftpd/vsftpd_login.db

chmod700/etc/vsftpd/vsftpd_login.db

配置PAM验证文件:

db_load

hash

-f

/etc/vsftpd/ftpusers.txt

在配置文件vi/etc/pam.d/vsftpd行首加入如下两行认证语句:(如

果是32位,lib64需改成lib,如果RedHat,加入的语句不一样,

需注意)

auth

sufficient

/lib64/security/pam_userdb.so

db=/etc/vsftpd/vsftpd_login

accountsufficient

创建vsftpd映射本地用户:

所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需

useradd–d/home/ftpuser–s/sbin/nologinftpuser

修改完整版配置文件内容如下:

local_enable=YES

write_enable=YES

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_file=/var/log/vsftpd.log

xferlog_std_format=YES

ascii_upload_enable=YES

ascii_download_enable=YES

listen=YES

guest_enable=YES

guest_username=ftpuser

pam_service_name=vsftpd

user_config_dir=/etc/vsftpd/vsftpd_user_conf

virtual_use_local_privs=YES

候所有的虚拟用户共同使用/home/ftpuser目录上传下载,如果想使

用自己独立的目录,可以在/etc/vsftpd/vsftpd_user_conf目录创建各

自的配置文件,如给wugk创建独立的配置文件:

vi/etc/vsftpd/vsftpd_user_conf/wugk,内容如下,建立自己的FTP

目录。

local_root=/home/ftpsite/wugk

anon_world_readable_only=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

还可以使用Server-U来搭建FTP服务器端,有兴趣的童鞋可以研究一

下。

FTP主被动模式

FTP主动模式:客户端从一个任意的非特权端口N(N>1024)连

接到FTP服务器的port21命令端口。然后客户端开始监听端口N+1,

并发送FTP命令“portN+1”到FTP服务器。接着服务器会从它自己

的数据端口(20)连接到客户端指定的数据端口(N+1)。

FTP被动模式:客户端从一个任意的非特权端口N(N>1024)连

同时客户端提交PASV命令。服务器会开启一个任意的非特权端口

P>1024),并发送PORTP命令给客户端。然后客户端发起从本地

端口N+1到服务器的端口P的连接用来传送数据。

.1.6构建ApacheWEB服务器

是最流行的Web服务器端软件之一。Apache工作模式有多种,其中最

常用的有两种:

Prefork模式:PreforkMPM使用多个子进程,每个子进程只有一

在大多数平台上,PreforkMPM在效率上要比WorkerMPM要高,

但是内存使用大得多。prefork的无线程设计在某些情况下将比worker

更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且

对于那些线程调试困难的平台而言,它也更容易调试一些。

Worker模式:WorkerMPM使用多个子进程,每个子进程有多个

一个高流量的HTTP服务器上,WorkerMPM是个比较好的选择,因

为WorkerMPM的内存使用比PreforkMPM要低得多。

WorkerMPM也由不完善的地方,如果一个线程崩溃,整个进程

就会连同其所有线程一起"死掉".由于线程共享内存空间,所以一个程

序在运行时必须被系统识别为"每个线程都是安全的"。

源码安装Apache

装如下,安装apache之前,需要先安装aprapr-util。

然后启动apache服务:/usr/local/apache2/bin/apachectlstart

查看apache进程及端口:

源码包安装Apache默认发布目录为:/usr/local/apache2/htdocs/下。

Apache基于域名虚拟主机配置

配置文件内容如下:

NameVirtualHost*:80

ServerAdminwgkgood@163.com

DocumentRoot"/data/webapps/www1"

ServerNamewww.wugk1.com

AllowOverrideAll

Options-IndexesFollowSymLinks

Orderallow,deny

Allowfromall

ErrorLoglogs/error_log

CustomLoglogs/access_logcommon

DocumentRoot"/data/webapps/www2"

ServerNamewww.wugk2.com

Directory"/data/webapps/www2">

<

重新加载apache即可,/usr/local/apache2/bin/apachectlgraceful

效果演示如下:

Apache基于IP虚拟主机同样跟域名一直,在服务器配置多个IP,

然后把域名改成IP即可。

ApacheRewrite规则讲解

RewriteURL重定向就是实现URL的跳转和隐藏真实地址,可以把

复杂的URL变成简洁直观的URL,对seo优化有很大的帮助。如

下几个简单的举例:

把所有配置的域名都跳转到一个域名:

RewriteEngineon

//启用rewrite引擎

RewriteCond%{HTTP_HOST}^wugk1.com[NC]

wugk1.com开头的域名,NC忽略大小写。

//匹配以

5

6

7

)R强制外部重定向。

)F禁用URL,返回403HTTP状态码。

)G强制URL为GONE,返回410HTTP状态码。

)P强制使用代理转发。

)L表明当前规则是最后一条规则,停止分析以后规则的重写。

)N重新从第一条规则开始运行重写过程。

)C与下一条规则关联。

.1.7构建MySQL服务器

低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥

对应目前主流的LAMP架构来说,Mysql更是得到各位IT运维、DBA

的青睐,目前mysql已被orcacle收购,不过好消息是原来mysql创始

人已独立出来自己重新开发了一个MariaDB,而且使用的人数越来越

Mysql常用的两大引擎有MyISAM和innoDB,那他们有什么明显

的区别呢,什么场合使用什么引擎呢?

MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更

快,但不提供事务支持,如果执行大量的SELECT操作,MyISAM是更

好的选择,支持表锁。

InnoDB提供事务支持事务,外部键等高级数据库功能,执行大

量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表,

支持行锁。

MySQL安装方式有两种,一种是yum/rpm安装,另外一种是tar

源码安装。

Yum安装方法很简单,执行命令如下即可:yuminstall–y

mysql-servermysql-develmysql

源码安装MySQL方式:

cd/usr/src;

wget

xzf

mysql-5.1.63.tar.gz

;cd

mysql-5.1.63

;./configure

-prefix=/usr/local/mysql

--enable-assembler&&make&&make

配置Mysql服务为系统服务:

cp/usr/local/mysql/share/mysql/my-medium.cnf/etc/my.cnf

cp/usr/local/mysql/share/mysql/mysql.server/etc/rc.d/init.d/mysqld

chkconfig--addmysqld

chkconfig--level345mysqldon

cd/usr/local/mysql

useraddmysql

chown-Rmysql.mysql/usr/local/mysql

usr/local/mysql/bin/mysql_install_db--user=mysql

chown-Rmysqlvar

usr/local/mysql/bin/mysqld_safe--user=mysql&

MySQL日常操作命令:

createdatabasetest_db;创建名为test_db数据库

usetest_db;进入test_db数据库

showtables;查看数据库里有多少张表。

createtabletest01(idvarchar(20),namevarchar(20));创建名为test01表,

并创建两个字段,id、name、数据长度(用字符来定义长度单位。)

insertintotest01values("001","wugk1");向表中插入数据。

select*fromtest01;查看test01表数据内容。

grantallprivilegesontest_db.*totest@localhostidentifiedby

123456';

grantallontest_db.*

grantselect,insert,update,deleteon*.*totest@”%”identifiedby

123456’;

'

totest@localhostidentifiedby

flushprivileges;刷新权限

mysqldump–uroot–p123456test_db>/tmp/test.db.sql;MySQL备

份或导出

mysql–uroot–p123456test_db

;MySQL导

mysqladmin–uroot–p123456password

MySQLroot密码

newpassword

;修改

dropdatabasetest_db;删除数据库

droptabletest01;删除表

deletefromtest01;清空表内容

showvariableslike'%char%';查看数据库字符集

修改Mysql字符集为UTF-8的方法:在/etc/my.cnf对应如下配置段加

入相应命令。

client]字段里加入default-character-set=utf8

mysqld]字段里加入character-set-server=utf8

mysql]字段里加入default-character-set=utf8

然后重启MySQL服务即可。

.1.8LAMP架构网站搭建

常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大

目前LAMP架构是大多数中小企业最青睐的PHP架构选择,也是

众多LinuxSA喜欢选择的一套架构。那接下来我们就实战来操作一下,

如果来搭建这样一套架构,当然可以使用yum方法,安装命令很简

单,一条命令搞定所有。

php-develphp-mysql–y

这一条命令LAMP环境即可安装成功,只需要重启apache、mysql服

务即可。

如果想要更多功能和自定义模块,需要使用源码包的方式来安装

LAMP架构。如下我们使用源码包来实现LAMP架构安装与配置:

源码安装LAMP之Apache

yuminstallapr-develapr-util-devel–y;

cd/usr/src

;

-prefix=/usr/local/apache--enable-so--enable-rewrite&&make

;tar

&&makeinstall

cd

源码安装LAMP之MySQL

/usr/src

;wget

xzfmysql-5.1.63.tar.gz;cdmysql-5.1.63;./configure

-prefix=/usr/local/mysql--enable-assembler&&make&&makeinstall

源码安装LAMP之PHP

php-5.3.28.tar.bz2;cdphp-5.3.28;./configure--prefix=/usr/local/php5

-with-config-file-path=/usr/local/php/etc

-with-apxs2=/usr/local/apache/bin/apxs--with-mysql=/usr/local/mysql/

源码安装Apache+PHP整合

LoadModulephp5_modulemodules/libphp5.so(默认已存在)

AddType

DirectoryIndexindex.phpindex.html(把index.php加入index.html之

前)

然后在/usr/local/apache/htdocs目录下创建index.php测试页面,执行

如下命令:

cat>>/usr/local/apache/htdocs/index.php<

phpinfo();

>

EOF

重新启动apache服务,通过IP访问界面如下图,即代表LAMP环境

搭建成功。

源码安装DISCUZ论坛

下载discuz源码包文件,然后解压:

cd/usr/src;wget

解压discuz程序包:unzipDiscuz_X3.1_SC_UTF8.zip-d

/usr/local/apache/htdocs/

重命名程序文件:cd/usr/local/apache/htdocs/;mvupload/*.

赋予discuz目录完全访问权限:cd/usr/local/apache/htdocs/;chmod

777-Rdata/uc_server/config/uc_client/

然后访问IP安装discuz论坛,如下图,选择“我同意”

createdatabasediscuzcharset=utf8;

grantallondiscuz.*toroot@'localhost'identifiedby"123456";

点击下一步,直至安装完成,进入等待已久的论坛画面:

自此LAMP环境整合并搭建成功,通过IP直接访问即可。

.1.9Cacti监控平台搭建

作为一名LinuxSA,日常最重要的就是保证网站正常稳定的运行,

我们需要实时监控网站、服务器的运行状态,这时需要借助开源软件

cacti、nagios、zabbix等)监控来实现。

的关键。

件中(在cacti根目录的rra文件夹下,一般以rra为后缀名称)。简

单原理图如下:

1)Cacti服务器端安装

2)安装LAMP系统环境

这里采用yum安装方式,安装命令:

php-pdo-y

php-json

3)安装rrdtool采集工具

安装rrdtool之前需要安装相应的lib库,如下安装:

yuminstallcairo-devellibxml2-develpangopango-devel–y

tarxzfrrdtool-1.4.5.tar.gz;cdrrdtool-1.4.5;./configure--prefix=/usr/

local/rrdtool/

make&&makeinstall;ln-s/usr/local/rrdtool/bin/*/usr/local/bin/

4)安装SNMP服务

yuminstallnet-snmpnet-snmp-utils–y

5)安装cacti主程序

tarxzfcacti-0.8.8a.tar.gz&&mvcacti-0.8.8a/var/www/html/cacti/

6)创建cacti数据库

mysql-uroot–p输入你的密码进入数据库,然后创建数据库:

createdatabasecacti;创建数据库

grantalloncacti.*tocacti@'localhost'identifiedby"123456";创建用户

mysql配置完毕后,把cacti数据导入cacti数据库

mysql-ucacti-p123456cacti

配置完mysql后,我们需要设置cactirra、log目录的权限,这里设

置为777:

chmod-R777/var/www/html/cacti/rra/

chmod-R777/var/www/html/cacti/log/

7)修改cacti全局配置文件

vi/var/www/html/cacti/include/config.php为如下配置:

8

)添加Rrdtool抓图任务计划

/5

/usr/bin/php

/var/www/html/cacti/poller.php>>/tmp/cacti_rrdtool.log2>&1

9)Cacti安装完毕,测试访问

默认一直点击下一步:

进入Cacti配置管理界面

点击device,可以添加设备,默认可以看到127.0.0.1这台服务器。

右上角Add可以增加设备。

点击localhost可以看到具体的设置,包括采用的snmp协议版本,监

控的名称等:

如果出现snmperror,检查snmp服务是否已启动,或者是否有权限。

出现如上信息则表示正常。

点击左上角第二个按钮,graphs查看cacti图像—选择localhost主机

右边会显示cacti每5分钟的监控图像。

更多cacti深入知识,根据需求深入讲解。

.1.10Nagios监控平台搭建

Nagios是一款开源的免费网络监视工具,能有效监控Windows、

人员,在状态恢复后发出正常的邮件或短信通知。

Nagios和cacti有什么区别呢?简单的来说cacti主要监控流量,

服务器状态页面展示;nagios主要监控服务,邮件及短信报警灯,当

然也有简单的流量监控界面,二者综合使用效果更好。(附Nagios工

作简单逻辑图)

Nagios监控客户端需要借助插件及NRPE软件来实现,NRPE作为

中间的代理程序,接收Nagios服务器端发来的请求,另一端在远程

1)Nagios服务端安装

同样安装nagios服务需要安装LAMP环境,这里省略,可以参考

之前的cactiPHP环境安装方法:官网下载nagios相应版本和插件:

usr/sbin/useraddnagios

tarzxvfnagios-3.2.1.tar.gz

cdnagios-3.2.1

.

/configure--prefix=/usr/local/nagios--with-command-group=nagios

makeall

makeinstall//来安装主程序,CGI和HTML文件

makeinstall-init//在/etc/rc.d/init.d安装启动脚本

makeinstall-config//来安装示例配置文件,安装的路径是

/usr/local/nagios/etc

makeinstall-commandmode//来配置目录权限

makeinstall-webconf//配置nagios跟apache整合

2)安装Nagios-plugins

tarzxvfnagios-plugins-1.4.14.tar.gz

cdnagios-plugins-1.4.14

/configure

-with-nagios-group=nagios

make&&makeinstall

)nagios访问控制设置

--prefix=/usr/local/nagios

--with-nagios-user=nagios

htpasswd-c/usr/local/nagios/etc/htpasswd.usersnagiosadmin

4)Nagios测试访问

点击左侧的Hosts可以看到右侧默认localhost主机的监控,UP表示

主机目前运行正常:

点击左侧的Services可以看到右侧默认localhost监控的各个服务的状

态,绿色OK表示正常:

5)Nagios案例配置

默认安装完nagios,配置文件主目录在/usr/local/nagios/下,目录各

种的功能如下:

bin

etc

Nagios

可执行程序所在目录

配置文件所在目录

sbin

NagiosCGI

文件所在目录,也就是执行外部命

令所需文件所在的目录

share

libexec

var

网页文件所在的目录

外部插件所在目录

日志文件、

lock

等文件所在的目录

var/archivesNagios

日志自动归档目录

var/rw

用来存放外部命令文件的目录

这里先来了解etc/objects目录主要包括监控主机的配置、模板、监

简单来添加一个客户端监控的步骤:

cplocalhost.cfg192.168.149.128.cfg

把默认配置文件里面的locahost、127.0.0.1、check_local替换成最新

sed

-i

s#localhost#192.168.149.128#g;s#127.0.0.1#192.168.149.128#g;s#chec

k_local#check#g

92.168.149.128.cfg

s#linux-servers#192.168.149.128#g

nagios.cfg

36

cfg_file=/usr/local/nagios/etc/objects/192.168.149.128.cfg

sed-i'36acfg_file=/usr/local/nagios/etc/objects/192.168.149.128.cfg'

/usr/local/nagios/etc/nagios.cfg

:/usr/local/nagios/bin/nagios

usr/local/nagios/etc/nagios.cfg没有报错即可。

默认有报错,因为没有在客户端安装nagios插件及NRPE,需删掉配

-v

置文件里disk、swap、process、user、cpu等监控配置段:

defineservice{

use

local-service

host_name

service_description

check_command

192.168.149.128

SwapUsage

check_swap!20!10

这里注意*如果没有配置check_nrpe监控,默认不能监控客户端例

如swap、disk、CPU、process等状态,需要在配置文件里删除或者注

释掉。

如下是刚刚添加的默认的客户端监控图:

6)

Nagios客户端插件安装

Nagios客户端安装需要安装两个软件,nagios-plugins-1.4.15.tar.gz

和nrpe-2.13.tar.gz,安装方法如下:

useraddnagios;tar-xzfnagios-plugins-1.4.15.tar.gz&&cd

nagios-plugins-1.4.15&&./configure–prefix=/usr/local/nagios

&

&make&&makeinstall

tar-xzfnrpe-2.13.tar.gz&&cdnrpe-2.13&&./configure--enable-ssl

-with-ssl-lib&&makeall&&makeinstall-plugin&&make

install-daemon&&makeinstall-daemon-config

chown-Rnagios:nagios/usr/local/nagios/;cd..;cpnrpe.cfg

/usr/local/nagios/etc/nrpe.cfg

启动nrpe客户端命令:/usr/local/nagios/bin/nrpe-c

usr/local/nagios/etc/nrpe.cfg–d

7)Nrpe客户端配置

修改vi/usr/local/nagios/etc/nrpe.cfg修改默认配置段的内容如下,

去掉#号,做相应修改。

command[check_users]=/usr/local/nagios/libexec/check_users-w5

c10

command[check_load]=/usr/local/nagios/libexec/check_load-w

5,10,5-c30,25,20

command[check_disk]=/usr/local/nagios/libexec/check_disk-w20-c

0-p/dev/sda2

command[check_procs]=/usr/local/nagios/libexec/check_procs-w

0-c100

command[check_swap]=/usr/local/nagios/libexec/check_swap-w

0-c10

8)Nagios服务器Nrpe配置

Nagios服务器端也需要安装nrpe,同时需要定义Nrpe监控命令,

写command.cfg末尾即可:

definecommand{

command_namecheck_nrpe

command_line$USER1$/check_nrpe-H$HOSTADDRESS$-c

$

ARG1$

9)Nagios监控端客户机配置

在192.168.149.128.cfg加入如下配置段,引用客户端nrpe.cfg里面配

置的check_load命令,命令一般格式为:check_nrpe!command

CurrentLoad

check_nrpe!check_load

其他同理,添加的方法一样。只要在客户端nrpe.cfg里面添加的监控

命令,都可以在服务端引用。

10)Nagios监控端HTTP关键词

在真实的线上环境中,如果要监控HTTP、web、tomcat某个URL

关键词,监控网站关键词是否被篡改,如果来实现呢?

如下:

解析:-I指定IP或者主机名,-u指定URL,-p指定端口,-s指定关

键词。

command_name

command_line

-I

HOSTADDRESS$-u$$ARG1$-p$$ARG2$-s$ARG3$

然后在服务器端监控主机的配置文件里面引用即可,引用的方法如

也可以在服务器端命令行执行如下命令来做测试,例如监控页面不

存在ATM关键词,但82端口web服务可以访问,依然会发送报警。

p82-s"ATM"

如上截图表示,关键词ATM不存在,则nagios在监控页面上会显示

CRITICAL紧急。

11)Nagios邮件及短信报警

使用nagios报警,以前可以用飞信发送报警,但是自从飞信更改

接口后,就不方便了,那我们要发短信报警怎么办呢,我们可以139

们绑定的手机。提前在139上绑定好手机即可。除此之外还可以使

用短信猫(收费)设备来发送报警。

默认command.cfg里面已经配置好了邮件报警设置,可以使用默

认的配置,使用系统默认的mail发送邮件;还可以自己定义发送的

内容格式及发送的邮件smtp服务器端软件。

这里使用默认的配置文件,要能收到短信报警,除了在139.com

件收件人如下:

修改配置文件:vi/usr/local/nagios/etc/objects/contacts.cfg内容如

同样也可以使用sed命令修改:cd/usr/local/nagios/etc/objects/;

sed-i's#nagios@localhost#wgkgood@139.com#g'contacts.cfg

如上配置完毕后,重启nagios服务,可以测试关闭某个服务,过

一会就会收到nagios发来的报警邮件。

进一步研究,例如nagios跟cacti如何整合,nagios如何优化等等。

.1.11Kickstart自动化安装平台

随着公司业务不断增加,经常需要采购新服务器,并要求安装

Linux系统,并且要求Linux版本要一致,方便以后的维护和管理,每

大中型互联网公司一次采购服务器上百台,如果采用人工手动一

台一台的安装,一个人得搞坏N张光盘,得多少个加班加点才能完成这

项”艰巨”的任务呢,我们可以看到全人工来完成这样的工作太浪费人

力了,有没有自动化安装平台呢,通过一台已存在的系统然后克隆或者

复制到新的服务器呢。Kickstart可以毫不费力的完成这项工作。

要使用kickstart安装平台,包括的完整架构为:

Kickstart+DHCP+NFS+TFTP+PXE,从架构可以看出,大致需要安装的服

务,例如dhcp、tftp、nfs、kickstart/pxe等。

1)DHCP、TFTP安装

yuminstall-ydhcp*tftp*

首先配置tftp服务:

vi/etc/xinetd.d/tftp

servicetftp

{

disable=no

socket_type=dgram

protocol=udp

wait=yes

user=root

server=/usr/sbin/in.tftpd

server_args=-unobody-s/tftpboot

per_source=11

cps=1002

flags=IPv4

只需要把disable=yes改成disable=no即可。

2)TFTP+PXE配置

mount

如果系统是5.x,默认tftpboot目录已经自动创建到/根目录下

如果系统是6.x,默认tftpboot目录在/var/lib/下,所以centos6.x

/dev/cdrom/mnt挂载本地光盘

需要做软链接到/根目录下。

cp/usr/lib/syslinux/pxelinux.0./

cp/mnt/images/pxeboot/{vmlinuz,initrd.img}./拷贝内核至

tftpboot目录下

mkdir-ppxelinux.cfg&&cp/mnt/isolinux/isolinux.cfgpxelinux.

cfg/default

拷贝isolinux.cfg配置文件重命名,系统安装的时候会根据这个文

件的配置启动相应的选项。

修改pexlinux.cfg/default内容如下:

defaultlinux

prompt1

timeout10

displayboot.msg

F1boot.msg

F2options.msg

F3general.msg

F4param.msg

F5rescue.msg

labelcentos5.8

kernelvmlinuz

appendks=nfs:192.168.0.79:/centosinstall/ks.cfg

initrd=initrd.img

ksdevice=eth0

labeltext

appendinitrd=initrd.imgtext

labelks

appendksinitrd=initrd.img

labellocal

localboot1

labelmemtest86

kernelmemtest

append–

解析:192.168.0.79是kickstart服务器,/centosinstall是nfs共享

linux镜像的目录,也是linux存放安装文件的路径,ks.cfg是kickstart

表当我们有多块网卡的时候,要实现自动化需要设置从eth0安装。

TFTP配置完毕,由于是TFTP是非独立服务,需要依赖xinetd服务来

启动,启动命令为:

chkconfigtftp--level35on&&servicexinetdrestart

3)NFS+KICKSTART配置

远程系统安装,客户端需要下载系统所需的软件包,所以需要使

mkdir-p/centosinstall

nohupcp-rf/mnt/*/centosinstall&

echo“/centosinstall*(rw,sync)”>>/etc/exports

在NFS配置文件/etc/exports中加入如上语句:

/centosinstall*(rw,sync),表示允许任何主机访问/centosinstall目录,

有读写权限。

配置kickstart,可以使用system-kickstart系统软件包来配置,也

可以直接拷贝/root/目录下anaconda-ks.cfg重命名为ks.cfg,并把

ks.cfg拷贝至刚共享的/centosinstall目录下,赋权限为chmod777ks.cfg

如下我这里采用配置文件内容如下:viks.cfg

Kickstartfileautomaticallygeneratedbyanaconda.

text

nfs--server=192.168.0.79--dir=/centosinstall

key--skip

langzh_CN.UTF-8

keyboardus

network--deviceeth0--bootproto=dhcp--noipv6

rootpw123456

firewall--disabled

authconfig--enableshadow--enablemd5

selinux--disabled

timezoneAsia/Shanghai

bootloader--location=mbr--driveorder=sda--append="rhgb

quiet"

clearpart--all--initlabel

part/boot--fstypeext3--size=200

partswap--size=4000

part/--fstypeext3--size=80000

part/data--fstypeext3--size=1--grow

%

@

packages

admin-tools

base

core

development-libs

development-tools

editors

system-tools

base-x

chinese-support

keyutils

kexec-tools

trousers

fipscheck

device-mapper-multipath

imake

audit

xorg-x11-server-Xnest

xorg-x11-server-Xvfb

第一步install,以text字符界面,指定nfs共享IP和目录,设置

安装后的服务器字符集、网络分配方式、密码;

然后设置防火墙状态,磁盘采用MBR方式引导,然后客户机分区

的情况;%packages

后写入客户机系统需要安装的软件包,可以自己定制。更多详细的参

数在此就不做过多的说明了,可以进一步学习。

在真实环境中,通常我们会发现一台服务器好几块硬盘,做完raid,

整个硬盘有等10T,如果来使用kickstart自动安装并分区呢;一般服

务器硬盘超过2T,如何来使用kickstart安装配置呢?这里就不能使用

MBR方式来分区,需要采用GPT格式来引导并分区。

需要在ks.cfg末尾添加如下命令来实现需求:

pre

parted-s/dev/sdbmklabelgpt

end

为了实现kickstart安装完系统后,自动初始化系统等等工作,我们可

以在系统安装完后,自动执行定制的脚本,需要在ks.cfg末尾加入如

下配置:

post

mount-tnfs192.168.0.79:/centos/init/mnt

cd/mnt/;/bin/shauto_init.sh

4)DHCP配置及测试

Pxe+kickstart自动安装系统,需要用到DHCP分配的客户端的IP地址,

这里直接上dhcpd.conf配置文件:

192.168.0.1;

optionsubnet-mask

255.255.252.0;

最后重启所有服务,并关闭iptables和selinux,然后找一台新服务器,

接入网线与kickstart服务器在一个交换机或通过中继能获取到IP的

网络即可。

servicexinetdrestart

servicenfsrestart

servicedhcpdrestart

注*KICKSTART所有配置就此告一段落,真实环境需要注意,新服务器

跟kickstart最后独立在一个网络,不要跟办公环境或者服务器机房网

络混在一起,如果别的机器以网卡就会把它的系统重装成Linux系统。

4.Linux编程篇

4.1LinuxShell编程

.1.1Shell编程简介

该输入,然后处理来自操作系统的任何结果输出来管理您与操作系统

之间的交互。

Shell是用户与Linux操作系统之间沟通的桥梁。用户可以输入命

令执行,又可以利用Shell脚本编程去运行。随着Linux企业应用越

来越多,维护Linux日常工作频繁,所以如果单靠手工去敲打命令是

非常困难的,所以学会熟练使用SHELL编程是每个LinuxSA必备的功

课。

LinuxShell种类非常多,常见的有:BourneShell(/usr/bin/sh或

bin/sh)、BourneAgainShel(l/bin/bash)、CShel(l/usr/bin/csh)、KShell

/usr/bin/ksh)、ShellforRoot(/sbin/sh)等。不同的Shell语言的语

法有所不同,所以不能交换使用。

最常用的shell是Bash,也就是BourneAgainShell,由于易用和免

费,Bash在日常工作中被广泛使用,也是大多数Linux系统默认的Shell。

接下来我们来写一个简单的shell脚本。(shell脚本一般文件名以.sh

结尾,同时文件第一行定义该脚本为shell脚本)

vifirst_shell.sh

#!/bin/bash

#ThisismyFirstshell

echo“HelloWorld!”

这就是我们的第一个脚本,是不是很简单呢,注解如下:

!/bin/bash//表示定义该脚本是一个shell脚本(固定格式)。

ThisismyFirstshell//这里的#号属于注解,没有任何的意义,SHELL

不会解析它。

echo“HelloWorld!”//shell脚本主命令,我们执行这个脚本讲看

到:HelloWorld!信息。

脚本编写完毕,如何来执行呢,首先执行shell脚本需要执行权限,

赋予执行权限:

chmodo+xfirst_shell.sh然后./first_shell.sh执行即可;也可以直接使用

命令执行:/bin/shfirst_shell.sh,显示效果一样。

.1.2Shell变量设置

Shell编程语言是非类型的解释型语言,不像C++/JAVA语言编程时

在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值。

SHELL变量可分为两类:局部变量和环境变量。局部变量只在创建

它们的shell脚本中使用。而环境变量则可以在创建它们的shell及其

派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是

专用shell变量。

例如在脚本里面定义A=123,定义这样一个变量,前面变量名,后

面是变量的值。

引用变量可以使用$A,把变量放在脚本里面会出现什么样的效果呢?

#Authorwugk2014-06-10

A=123

echo“Printfvariablesequalis$A”

执行脚本:shtest.sh,结果将会显示:

Printfvariablesequalis123

简单的理解变量,相当于定义一个别名-名称,引用的时候加上$符号

就可以了。

例如定义变量name=wuguangke

执行echo$name将会显示wuguangke

SHELL常见的系统变量解析:

$0当前程序的名称

n当前程序的第n个参数,n=1,2,…9

*当前程序的所有参数(不包括程序本身)

#当前程序的参数个数(不包括程序本身)

命令或程序执行完后的状态,一般返回0表示执行成功。

UID当前用户的ID

PWD当前所在的目录

.1.3Shell流程控制语句

在LinuxShell编程中,if、for、while、case等条件流程控制

语句用的非常多,把这些学好,对提升脚本的功力有非常大的帮助。

下面将逐个来讲解具体的用法:

If条件判断语句

If(表达式)#if(VariableinArray)

语句1

else

语句2

fi

案例一,测试数字大小

#!/bin/sh

NUM=100

if(($NUM>4));then

echo“thisnumis$NUMgreater4!”

案例二,测试目录是否存在,不存在则新建(注意,中括号之间必须

要空格)

#judgedirexist

if[!-d/data/20140515];then

mkdir-p/data/20140515

echo“ThisDIRisexist,Pleaseexit…..”

逻辑运算符解析:

f判断文件是否存在eg:if[-ffilename]

d判断目录是否存在eg:if[-ddir

eq等于应用于:整型比较

ne不等于应用于:整型比较

lt小于应用于:整型比较

]

gt大于应用于:整型比较

le小于或等于应用于:整型比较

ge大于或等于应用于:整型比较

a双方都成立(and)逻辑表达式–a逻辑表达式

o单方成立(or)逻辑表达式–o逻辑表达式

z空字符串

案例三,多个条件测试判断

!/bin/sh

scores=80;

if[[$scores-gt85]];then

echo"verygood!";

elif[[$scores-gt75]];then

echo"good!";

elif[[$scores-gt60]];then

echo"pass!";

echo"nopass!";

fi;

循环语句for

For变量in字符串

do

done

案例一,打印seq多个数

for

i

in`seq15`

echo“NUMis$i”

in`find/var/log-name“*.log”`

tar–czf2014log.tgz$i

循环语句while

while条件语句

案例一,while条件判断数字

i=1;

while[[$i-lt10]];do

echo$i;

((i++));

done;

案例二,while逐行读取某个文件

whilereadline

echo$line;

done

Until循环语句

until条件

action

直到满足条件,才退出。否则执行action。

案例一,条件判断数字

a=10;

until[[$a-lt0]];do

echo$a;

((a--));

Case选择语句

case$argin

pattern1)

;;

pattern2)

)

语句3

esac

案例一,创建选择参数脚本

case$1in

monitor_log)

monitor_log

archive_log)

archive_log

echo"Usage:{$0monitor_log|archive_log|help}"

select选择语句

PS3="Whatyoulikemostoftheopensourcesystem"

selectiinCentOSRedHatUbuntu

echo"YourSelectSystem:"$i

.1.4Shell脚本案例

a)自动删除test.txt文件脚本

脚本的功能实现从/root/目录cp拷贝test.txt到/tmp目录,并且在/tmp

目录创建一个目录abc,并且删除原/root/下test.txt。

首先命名脚本名称为auto_cp.sh(名称可以自己定义),内容如下:

!/bin/bash

ThisisFirstshellforautocpFiles

定义文件和目录变量

FILES=/root/test.txt

DIR=/tmp

cp$FILES$DIR

cd$DIR;mkdir–pabc

rm

echo“TheShellScriptsexecsuccessfully!”

自动CP并删除文件”的脚本编写完毕,保存退出即可。

b)自动备份Mysql数据库脚本

-rf$FILES

autobackupmysql

wugk2012-12-12

DefinePATH定义变量

BAKDIR=/data/backup/mysql/`date+%Y-%m-%d`

MYSQLDB=webapp

MYSQLPW=backup

MYSQLUSR=backup

#mustuserootuserrunscripts必须使用root用户运行,$UID为系

统变量

if

$UID-ne0];then

echoThisscriptmustusetherootuser!!!

sleep2

exit0

#DefineDIRandmkdirDIR判断目录是否存在,不存在则新建

!-d$BAKDIR];then

mkdir-p$BAKDIR

echoThisis$BAKDIRexists....

Usemysqldumpbackupmysql使用mysqldump备份数据库

/usr/bin/mysqldump

-u$MYSQLUSR

-p$MYSQLPW

-d

MYSQLDB>$BAKDIR/webapp_db.sql

echo"Themysqlbackupsuccessfully"

c)自动打包tar目录下log文件脚本

autotarczfshelltoFiles

Authorwugk2014-05-15

SRC_DIR=/opt/

DES_DIR=/opt/backup/`date+%Y%m%d`

If

!–d$DES_DIR];then

Mkdir–p$DES_DIR

foriin`find$SRC_DIR-name“*.log”`

tarczf$i.tgz$i

echo“Thescriptsexecend,Filestarsuccessfully!”

d)自动拒绝恶意IP脚本

#autodropsshfailedIPaddress

#wugk2013-1-2

#定义变量

SEC_FILE=/var/log/secure

IP_ADDR=`tail-n1000/var/log/secure|grep"Failedpassword"|

egrep-o"([0-9]{1,3}\.){3}[0-9]{1,3}"|sort-nr|uniq-c|awk'$1>=4

{print$2}'`

IPTABLE_CONF=/etc/sysconfig/iptables

echo

cat<

+

+++++++++++++welcome

tousessh

login

drop

failed

ip+++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++

+++++++++++++++------------------------------------+++++++++++++++++

echo-n"请等待5秒后开始执行"

for((j=0;j<=4;j++));doecho-n"----------";sleep1;done

foriin`echo$IP_ADDR`

#查看iptables配置文件是否含有提取的IP信息

cat$IPTABLE_CONF|grep$i>/dev/null

$-ne0];then

#判断iptables配置文件里面是否存在已拒绝的ip,如何不存在

就不再添加相应条目

sed-i"/lo/a-AINPUT-s$i-mstate--stateNEW-mtcp-ptcp

-dport22-jDROP"$IPTABLE_CONF

#如何存在的话,就打印提示信息即可

echo"Thisis$iisexistiniptables,pleaseexit......"

#最后重启iptables生效

/etc/init.d/iptablesrestart

.1.5Shell数组编程

数组,就是相同数据类型的元素按一定顺序排列的集合,就是把

有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量

的集合,这个名字成为数组名,编号成为下标。

今天这里我们来探讨一维数组的定义、统计、引用和删除等操作。首

先来定义一个一维数组:

A=(test1test2test3),定义数组一般以括号的方式来定义,数组

的值可以随机定义。如何来引用呢?

echo${A[0]},代表引用第一个数组变量,结果会显示test1,数组引

用从0开始,代表第一个数组,依次类推。

echo${A[1]},代表引用第二个数组变量,结果会显示test2,数组引

用也是从0开始计算的。

如何显示该数组所有参数呢?echo${A[@]}将显示所有参数test1

test2test3。

如何显示该数组参数个数呢?echo${#A[@]}将显示该数组的参数

个数3。

如果替换某个数组呢?例如替换第二个test2数组为test5:echo

{A[@]/test2/test5}

如何删除一个数组呢?例如删除test3数组命令为:unsetA[2];echo

{A[@]}查看效果。

那输入如何在编程来使用呢?请看下面例子:

AutoMakeKVMVirtualization

Autoconfigbondscripts

eth_bond()

NETWORK=(

HWADDR=`ifconfigeth0|egrep"HWaddr|Bcast"|tr"\n"""|awk

{print$5,$7,$NF}'|sed-e's/addr://g'-e's/Mask://g'|awk'{print$1}'`

IPADDR=`ifconfigeth0|egrep"HWaddr|Bcast"|tr"\n"""|awk'{print

$5,$7,$NF}'|sed-e's/addr://g'-e's/Mask://g'|awk'{print$2}'`

NETMASK=`ifconfigeth0|egrep"HWaddr|Bcast"|tr"\n"""|awk

{print$5,$7,$NF}'|sed-e's/addr://g'-e's/Mask://g'|awk'{print$3}'`

GATEWAY=`route-n|grep"UG"|awk'{print$2}'`

cat>ifcfg-bond0<

DEVICE=bond0

{NETWORK[1]}

{NETWORK[2]}

{NETWORK[3]}

NM_CONTROLLED=no

如上脚本为定义三个数组变量,然后分别来引用,这样让脚本可读性

更强,更整洁。关于数组就简单的介绍到这里。

5.Linux深入篇

5.1构建NginxWEB服务器

另外它也可以作为邮件代理服务器。它已经在众多流量很大的俄罗

使用Nginx作为其服务器或者代理服务器。目前互联网主流公司360、

百度、新浪、腾讯、阿里等都在使用nginx作为自己的web服务器。

Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完

成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一

个locationblock(location是Nginx配置中的一个指令,用于URL匹

配),而在这个location中所配置的每个指令将会启动不同的模块去

完成相应的工作。

Nginx相对于Apache优点:

)高并发响应性能非常好,官方Nginx处理静态文件并发5w/s

)反向代理性能非常好。(可用于负载均衡)

)内存和cpu占用率低。(为Apache的1/5-1/10)

)功能较Apache少(常用功能均有)

)对php可使用cgi方式和fastcgi方式。

.1.1NginxWEB安装

首先需要安装pcre库,然后再安装Nginx:

安装pcre支持rewrite库,也可以安装源码,注*安装源码时,指定

pcre路径为解压

源码的路径,而不是编译后的路径,否则会报错

make[1]:***[/usr/local/pcre/Makefile]Error127错误)

yuminstallpcre-develpcre-y

#下载Nginx源码包

#解压Nginx源码包

tar-xzfnginx-1.4.2.tar.gz

#进入解压目录,然后sed修改Nginx版本信息为WS

cdnginx-1.4.2;sed-i-e's/1.4.2//g'-e's/nginx\//WS/g'-e

s/"NGINX"/"WS"/g'src/core/nginx.h

预编译Nginx

useradd

-prefix=/usr/local/nginx--with-

www

--user=www

--group=www

#.configure预编译成功后,执行make命令进行编译

make

#make执行成功后,执行makeinstall正式安装

makeinstall

#自此Nginx安装完毕

/usr/local/nginx/sbin/nginx-t检查nginx配置文件是否正确,返回

OK即正确。

root@localhost~]#/usr/local/nginx/sbin/nginx-t

nginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisok

nginx:configurationfile/usr/local/nginx/conf/nginx.conftestis

successful

root@localhost~]#

然后启动nginx,/usr/local/nginx/sbin/nginx回车即可。查看进程是否

已启动:

root@localhost~]#ps-ef|grepnginx

nobody

process

root

5381302850May16

00:04:31nginx:worker

00:00:00nginx:master

30285

102014

process/usr/local/nginx/sbin/nginx

3226032220012:34pts/0

00:00:00grepnginx

.1.2Nginx虚拟主机配置

在真实的服务器环境,为了充分利用服务器资源,一台nginxweb

服务器同时会配置N个虚拟域名主机,即多个域名对于同样一个80

端口。然后服务器IP数量很多,也可以配置基于多个IP对应同一个

端口。

vi修改nginx.confserver段配置内容如下:

#virtualhostsconfig2014/5/18

server{

listen

80;

server_namewww.a.com;

#access_loglogs/host.access.logmain;

location/{

roothtml/a;

indexindex.htmlindex.htm;

server_namewww.b.com;

roothtml/b;

创建两个不同的目录mkdir–p/usr/local/nginx/html/{a,b},然后分

别在两个目录创建两个不同的index.html网站页面即可。通过客户端

配置hosts指向两个域名,然后在IE浏览器访问测试效果。

.1.3Nginx性能优化

随着访问量的不断增加,需要对Nginx和内核做相应的优化来满

)Nginx.conf配置优化:

worker_processes8;

nginx进程数,建议按照cpu数目来指定,一般为它的倍数。

worker_cpu_affinity0000000100000010000001000000100000010000

001000000100000010000000;

为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以

写多个,或者将一

个进程分配到多个cpu。

worker_rlimit_nofile102400;

这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值

应该是最多打

开文件数(ulimit-n)与nginx进程数相除,但是nginx分配请求并不

是那么均匀

所以最好与ulimit-n的值保持一致。

useepoll;

使用epoll的I/O模型。epoll是Linux内核为处理大批量文件描述符

而作了改进的

poll,它能显著提高程序在大量并发连接中只有少量活跃的情况下的

系统CPU利用

率。

worker_connections102400;

每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数

worker_processes*worker_connections。

keepalive_timeout60;

对服务器的后

继请求时,keepalive-timeout功能可避免建立或重新建立连接。

client_header_buffer_size4k;

客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设

置,一般一个

请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,

所以这里设置为

分页大小。分页大小可以用命令getconfPAGESIZE取得。

open_file_cachemax=102400inactive=20s;

这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,

建议和打开

open_file_cache_valid30s;

open_file_cache_min_uses1;

如果超过这

个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文

件在inactive

2)Linux内核参数优化:

net.ipv4.tcp_max_tw_buckets=10000

timewait的数量,默认是180000。

net.ipv4.ip_local_port_range=102465000

允许系统打开的端口范围。

net.ipv4.tcp_tw_recycle=1

启用timewait快速回收。

net.ipv4.tcp_tw_reuse=1

开启重用。允许将TIME-WAITsockets重新用于新的TCP连接。

net.ipv4.tcp_syncookies=1

开启SYNCookies,当出现SYN等待队列溢出时,启用cookies来处理。

.1.4Nginx参数深入理解

Nginx常用配置参数有upstream,主要用于均衡后端多个实例:

Nginx的upstream目前支持5种算法分配方式:

1)轮询(默认rr)

台服务器down掉,自动剔除,待恢复自动添加上。

2)Weight权重

指定轮询权重,权重越高,处理的请求就越多,weight和访问比

率成正比,用于后端服务器性能不均的情况。

3)ip_hash

每个请求根据访问的IP的hash结果分配,这样每个访客固定访

4)fair(第三方)

)url_hash(第三方)

upstream的fail_timeout和max_fails参数是用来判断负载均衡

upstream中的某个server是否失效。

尝试失败了max_fails次,则nginx会认为该server已经失效。在接下

例如在nginx.conf里面配置如下的tdt_app均衡:

upstreamtdt_app{

fail_timeout=30s;

10.10.1.11:8080

weight=1

max_fails=2

10.10.1.12:8080

Tdt_app均衡两台后端JAVA服务,在30秒内nginx会与后端的

某个server通信检测,如果检测连接失败2次,则Nginx会认为该

server已经失效,然后踢出转发列表,然后在接下来的30s内,nginx

不再讲请求转发给失效的server。

是用proxy_connect_timeout和proxy_read_timeout来控制的。

经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的

服务器必须传完所有的数据。

还需要等待多少秒后,才关闭这个连接。

.1.5NginxRewrite规则

Rewrite规则含义就是某个URL重写成特定的URL,从某种意义上说

为了美观或者对搜索引擎友好,提高收录量及排名等。

Rewrite规则的最后一项参数为flag标记,支持的flag标记主要有以

下几种:

1)last:相当于Apache里德(L)标记,表示完成rewrite;

2)break;本条规则匹配完成后,终止匹配,不再匹配后面的规则

3)redirect:返回302临时重定向,浏览器地址会显示跳转后的URL

4)permanent:返回301永久重定向,浏览器地址栏会显示跳转后的

URL地址

5)last和break用来实现URL重写,浏览器地址栏URL地址不变。

我们可以使用NginxRewrite来实现这个需求,具体如下:

在server中加入如下语句即可:

代表前面0或更多个字符

代表前面1或更多个字符

代表前面0或1个字符

^

代表字符串的开始位置

代表字符串结束的位置

为通配符,代表任何字符

b)例如多个域名跳转到同一个域名,nginxrewrite规则写法如下:

listen80;

server_namewww.wugk.comwugk.com;

if($host!=‘www.wugk.com’){

更多深入的rewrite可以继续学习。

5.2构建Rsync同步服务器

Rsync是Unix/Linux下的一款应用软件,利用它可以使多台服务

器数据保持同步一致性,第一次同步时rsync会复制全部内容,但在

下一次只传输修改过的文件。

硬链接等。

.2.1Rsync服务端配置

下面正式来配置Rsync服务器,模拟真实环境服务器数据同步。

A是源服务器,B、C为客户端服务器,因需求,B、C服务器需

要从A某个同步某个目录到本地。

正式安装,官网下载rsync稳定版本,然后进行安装编译。

tarxzfrsync-3.0.7.tar.gz&&cdrsync-3.0.7&&./configure--

prefix=/usr/local/rsync&&make&&makeinstall

安装完毕,配置rsync配置文件,默认/etc/不存在rsyncd.conf配

置文件,需要手动创建,配置内容为如下:catrsyncd.conf

#########[global]全局配置

uid=nobody

gid=nobody

usechroot=no

maxconnections=30

pidfile=/var/run/rsyncd.pid

lockfile=/var/run/rsyncd.lock

logfile=/var/log/rsyncd.log

transferlogging=yes

logformat=%t%a%m%f%b

syslogfacility=local3

timeout=300

www]

readonly=yes

path=/usr/local/webapps

comment=www

authusers=test

secretsfile=/etc/rsync.pas

hostsallow=192.168.0.11,192.168.0.12

web]

path=/data/www/web

comment=web

hostsallow=192.168.1.11,192.168.0.0/24

Rsync配置参数说明:

www]#要同步的模块名

path=/usr/local/webapps#要同步的目录

#这个名名称无所谓,最后模块名一直)

readonly=no#no客户端可上传文件,yes只读

writeonly=no#no客户端可下载文件,yes不能下载

list=yes

#是否提供资源列表

authusers=test#登陆系统使用的用户名,没有默认为匿名。

hostsallow=192.168.0.10,192.168.0.20#本模块允许通过的IP

hostsdeny=192.168.1.4

secretsfile=/etc/rsync.pas#密码文件存放的位置

#禁止主机IP

启动服务器端RSYNC主进程,/usr/local/rsync/bin/rsync

-daemon,监听端口TCP873

设置rsync服务器端同步密钥:

vi/etc/rsync.pas

username:userpasswd(表示用户名:密码)

test:test999

保存完毕,chmod600/etc/rsync.pas设置权限为宿主用户读写。

最后在客户端配置同步密钥和命令,如下设置即可同步。

vi/etc/rsync.pas输入服务器端配置的密码:

test999

保存即可开始同步:执行如下语句

Rsync-aP--deletetest@192.168.0.100::www/usr/local/webapps

-password-file=/etc/rsync.pas

Rsync-aP--deletetest@192.168.0.100::web

/data/www/web

注*/usr/local/webapps为客户端的目录,@前test是认证的用户名;

IP后面www为rsync服务器端的模块名称。

Rsync常用参数解析:

归档模式,表示以递归方式传输文件,并

a,––archive

保持所有文件属性。

––exclude=PATTERN

––exclude-from=FILE

––include=PATTERN

指定排除一个不需要传输的文件匹配模式

FILE

中读取排除规则

指定需要传输的文件匹配模式

删除那些接收端还有而发送端已经不存在

的文件

––delete

P

等价于––partial––progress

v,––verbose

q,––quiet

详细输出模式

精简输出模式

指定远程服务器上的rsync命令所在路

–rsyncpath=PROGRAM

–password-file=FILE

从FILE中读取口令,以避免在终端上输

入口令,

通常在cron中连接rsync服务器时使用

.2.2Rsync基于SSH同步

除了可以使用rsync密钥进行同步之外,还有一个比较简单的同步

方法就是基于linuxssh来同步。具体方法如下:

/data/www/webapps,如果想每次同步不输入密码,需要做Linux主

.2.3Rsync实时同步配置

在企业日常web应用中,某些特殊的数据需要要求保持跟服务器

端实时同步,那我们该如何来配置呢?如何来实现呢?这里可以采用

rsync+inotify来实现需求。

Inotify是一个Linux特性,它监控文件系统操作,比如读取、写

入和创建。Inotify反应灵敏,用法非常简单,并且比cron任务的繁

忙轮询高效得多。

Rsync安装完毕后,需要安装inotify文件检查软件。同时为了同

步的时候不需要输入密码,这样可以使用ssh免密钥方式进行同步。

inotify-tools-3.14.tar.gz

tar

–xzf

inotify-tools-3.14.tar.gz;./configure;make

;makeinstall即可。配置auto_inotify.sh同步脚本,内容如下:

src=/data/webapps/www

des=/home/webapps/

ip=192.168.0.11

inotifywait-mrq--timefmt'%d/%m/%y-%H:%M'--format'%T%w%f'

emodify,delete,create,attrib${src}|whilereadfile

foriin$ip

/usr/local/rsync/bin/rsync

-aP

--delete

$src

root@$ip:$des

在服务器端后台启动该脚本,nohupshauto_inotify.sh&,

5.3Tomcat/ResinJAVA服务器

可以单独使用,apache是一个以C语言编写的HTTP服务器。Tomcat

主要用来解析JSP语言。目前最新版本为8.0。

.3.1Tomcat安装配置

安装tomcat之前需要安装jdk(JavaDevelopmentKit)是Java语

言的软件开发工具包(SDK)),这里选择jdk-6u18-linux-x64-rpm.bin,bin

文件安装跟sh文件方法一样,sh./jdk-6u18-linux-x64-rpm.bin,回车

即可,默认安装到/usr/java/jdk1.6.0_18目录下。

配置java环境变量,vi/etc/profile添加如下语句:

exportJAVA_HOME=/usr/java/jdk1.6.0_18

export

CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

source

java

/etc/profile

-version

//使环境变量立刻生效。

//查看java版本,显示版本为1.6.0_18,

证明安装成功。

在官网下载tomcat相应版本,这里下载的版本为

apache-tomcat-6.0.30.tar.gz,下载完后解压:

-xzf

apache-tomcat-6.0.30.tar.gz

;mvapache-tomcat-6.0.30

/usr/local/tomcat即可。

启动tomcat,命令为:/usr/local/tomcat_test/bin/startup.sh

查看ps-ef|greptomcat进程及端口是否存在,通过页面访问可以

tomcat

这个画面是默认网站,怎么来创建一个自己的网站页面呢,定义自己

的发布目录,方法如下:在server.xml配置文件末尾加入如下行:(附

截图)

path="/"

docBase="/data/webapps/www"

reloadable="true"/>

在/data/webapps/www目录下,创建自己的jsp代码,重启tomcat

即可访问。

.3.2Tomcat性能优化

线上环境使用默认tomcat配置文件,性能很一般,为了满足大量

用户的访问,需要对tomcat进行参数性能优化,具体优化的地方如

Linux内核的优化

服务器资源配置的优化

Tomcat参数优化

配置负载集群优化

这里着重讲解tomcat参数的优化:server.xml文件,关闭DNS查询、

配置最大并发等参数。

maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默

认值为200

acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求

个数,默认值为100

当然这些值都不是越大越好,需要根据实际情况来设定。可以基于测

试的基础上来不断的调优分析。

connectionTimeout="20000"

redirectPort="8443"

maxThreads="5000"

minSpareThreads="20"

acceptCount="1000"

disableUploadTimeout="true"

enableLookups="false"

URIEncoding="UTF-8"/>

Catalina.shJVM参数优化,添加如下内容:

CATALINA_OPTS="$CATALINA_OPTS

–Xms4000M

–Xmx4000M

-XX:+UseConcMarkSweepGC

-DLOCALE=UTF-16LE

Xmn1000M

-XX:SurvivorRatio=4

XX:CMSInitiatingOccupancyFraction=82

DRAMDISK=/-DUSE_RAM_DISK=ture-DRAM_DISK=true"

配置多个tomcat实例,方法也很简单,只需要在服务器上cp多个

tomcat,然后修改三个端口和发布目录即可,然后分别启动即可。

为了提升整个网站的性能,还需要在tomcat前面架设nginxweb反向

代理服务器,用以提高用户高速访问。

.3.3Resin安装配置

Resin是CAUCHO公司的产品,是一个非常流行的applicationserver,

对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采

用JAVA语言开发。

能提高性能。

一般个人使用都使用开源免费版,如果想更高的性能,可以购买

使用企业版resin,售后服务有保障。

tar–xzvfresin-4.0.33.tar.gz

cdresin-4.0.33&&./configure--prefix=/usr/local/resin

\--with-resin-log=/data/logs/resin/

-with-java-home=/usr/java/jdk1.6.0_18/

安装完毕后,修改/usr/local/resin/conf/resin.xml配置文件发布目录,

如图:

然后启动resin,/usr/local/resin/bin/resin.shstart测试成功访问如下

图(发布目录未修改之前resin默认测试页面):

.3.4Resin性能优化

Resin同tomcat一样,都需要优化JVM参数,resin的JVM参数配

如下所示:

!--SSLportconfiguration:-->

jvm-arg>-Xms4000m

jvm-arg>-Xmx4000m

jvm-arg>-Xmn1000m

jvm-arg>-XX:PermSize=128m

jvm-arg>-XX:MaxPermSize=256m

thread-max>10000

socket-timeout>30s

keepalive-max>5000

keepalive-timeout>60s

jvm-arg>-agentlib:resin

Resin参数优化同样包括最大内存、最小内存,年轻带,最大并发,

.3.5Resin多实例配置

为了资源最大利用,单台服务器可以配置多个resin实例,配置

resin多实例的方式跟tomcat大部分一致,但还有一些区别:

cd/usr/local/resin/conf下,然后cpresin.xmlresin1.xml;cp

resin.xmlresin2.xml

修改两个配置文件如下图所示:

HTTP端口为8080Resin1.xml配置如下:

HTTP端口为8081Resin2.xml配置如下:

创建两个发布目录mkdir-p/data/webapps/{www1,www2}写入测

试jsp文件即可。最后如下方法启动两个resin实例:

usr/local/resin/bin/resin.sh

server1start

server2start

-conf

/usr/local/resin/conf/resin1.xml

/usr/local/resin/conf/resin2.xml

真实环境,需要调整jvm参数,需要在resin.xml里面配置,同时需

要开启启动resin,只需要把上述脚本加入/etc/rc.local即可。

5.4NginxTomcat动静分离

Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成

只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动

态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat、

Resin出来动态页面。

动静分离从目前实现角度来讲大致分为两种,一种是纯粹的把静

态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇

的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过

nginx来分开。这样也是本次课程要讲解的,具体怎么来实现呢,如

下图,通过location指定不同的后缀名实现不同的请求转发。

器之前的请求和流量。具体Expires定义:是给一个资源设定一个过

过期即可,所以不会产生额外的流量。

此种方法非常适合不经常变动的资源。(如果经常更新的文件,不

建议使用Expires来缓存),我这里设置3d,表示在这3天之内访问

则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务

器重新下载,返回状态码200。

如下为nginx.conf里面server配置段,直接添加在nginx.conf

里即可。

####www.wuguangke.cn

server_namewww.wuguangke.cn;

配置发布目录为/data/www/wugk

root/data/www/wugk;

location/

timeoutinvalid_header;

proxy_set_headerHost$host;

proxy_set_headerX-Real-IP$remote_addr;

proxy_set_headerX-Forwarded-For

proxy_add_x_forwarded_for;

expires3d;

义的upstreamtdt_wugk均衡

location~.*\.(php|jsp|cgi)$

$proxy_add_x_forwarded_for;

#配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取。

location

~

.*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$

常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力

expires

3d;

#定义Nginx输出日志的路径

access_log/data/logs/nginx_wugk/access.logmain;

error_log/data/logs/nginx_wugk/error.logcrit;

真实环境网站程序包只有一个,需要把这个程序包在nginx前端

放一份,同时需要在Tomcat、Resin后端也放置一份,如果服务器涉

及数量很多,那每台服务器都需要更新,可以使用批量更新方法。

5.5LNAMP高性能架构配置

LNAMP(Linux+Nginx+Apache+Mysql+PHP)架构受到很多IT企业的青

睐,取代了原来认为很好的LNMP(Linux+Nginx+Mysql+PHP)架构,那我

们说LNAMP到底有什么优点呢,还得从Nginx和apache的优缺点说起。

Nginx处理静态文件能力很强,Apache处理动态文件很强而且很稳

定,把二者综合在一块,性能提升很多倍。可能很多LinuxSA在从事

LNMP运维中,会发现PHP(FastCGI)模式会出现一些502错误的现

象,这是因为Nginx+PHP(FastCGI)组合不稳定的原因造成的。

源码安装LNAMP之Nginx

yuminstallprce-devel

–y

nginx-1.6.0;./configure–prefix=/usr/local/nginx&&make&&make

源码安装LNAMP之Apache

源码安装LNAMP之MySQL

源码安装LNAMP之PHP

自此LAMP环境整合并搭建成功,那如何使用Nginx来整合LAMP呢?

源码安装Nginx+LAMP整合

先修改apache访问端口为8080,Nginx端口为80。

然后修改nginx配置文件:vi/usr/local/nginx/conf/nginx.conf,server

配置段内容如下:

(定义upstream均衡模块,配置动静分离,动态转发至apache,静态

文件直接本地响应)

upstreamapp_lamp{

server127.0.0.1:8080weight=1max_fails=2fail_timeout=30s;

server_namelocalhost;

root/usr/local/apache/htdocs;

indexindex.phpindex.htmlindex.htm;

proxy_set_header

X-Forwarded-For

测试,访问nginxip+port如下图所示:

查看系统启动的端口及进程如下图:

自此,LNAMP全部整合完毕,接下来就是对系统内核、各个服务、

架构进行优化,同样优化是一项长期的任务。

5.6LVS+Keepalived负载均衡

LVS简介及工作原理

LVS是LinuxVirtualServer的简写,意即Linux虚拟服务器,是一个

是中国国内最早出现的自由软件项目之一。

LVS简单工作原理:用户请求LVSVIP,LVS根据转发方式和算法,

将请求转发给后端服务器,后端服务器接受到请求,返回给用户。对

于用户来说,看不到WEB后端具体的应用。

LVS转发方式有三种,分别是NAT、DR、TUN模式,常用算法:

RR、LC、WRR、WLC模式等(RR为轮询模式,LC为最少连接模式)

LVSNAT原理:用户请求LVS到达director,director将请求的报文的

目标地址改成后端的realserver地址,同时将报文的目标端口也改成

后端选定的realserver相应端口,最后将报文发送到realserver,

realserver将数据返给director,director再把数据发送给用户。(两次

请求都经过director,所以访问大的话,director会成为瓶颈)

LVSDR原理:用户请求LVS到达director,director将请求的报文的

目标MAC地址改成后端的realserverMAC地址,目标IP为VIP(不变),

源IP为用户IP地址(保持不变),然后Director将报文发送到realserver,

realserver检测到目标为自己本地IP,如果在同一个网段,然后将请

求直接返给用户。如果用户跟realserver不在一个网段,则通过网关

返回用户。(此种转发效率最高)

LVSTUN原理:跟LVSDR类似,也是改变封装MAC地址,多了一

层隧道加密。实施环境复杂,比LVSDR模式效率略低。

LVS环境安装配置

下载LVS所需软件ipvsadm-1.2.4.tar.gz软件,编译安装:

-c

ln-s/usr/src/kernels/2.6.*/usr/src/linux//IPVS模块编译进内核里,

需要做软连接

tarxzvfipvsadm-1.24.tar.gz&&cdipvsadm-1.24&&make&&make

LVS安装完毕之后,需要进行配置,配置的步骤有两步,第一步为定

义端口服务,第二步为添加realserver后端服务。

ipvsadm-A-t192.168.149.129:80-srr

ipvsadm-a-t192.168.149.129:80-r192.168.149.130-m-w2

ipvsadm-a-t192.168.149.129:80-r192.168.149.131-m-w2

参数说明:

A增加一台虚拟服务器地址。

r指定真实服务器地址。

m设置当前转发方式为NAT模式;-g为直接路由模式;-i模式为

w后端真实服务器的权重。

查看LVS转发列表命令为:ipvsadm–Ln

我们会发现,如果这台LVS发生突发情况,down机了,那后端所

有的应用程序都访问不了。如何避免这种问题呢,这里需要用到故障

切换,也就是如果有一台备用的LVS就好了,主down了,自动切换

到从,怎么实现这个需求,接下来讲解的keepalived软件就是专门用

来做故障检测及切换的。

Keepalived基于三层检测(IP层,TCP层,及应用层),主要用于

检测web服务器的状态,如果有一台web服务器死机,或工作出现

故障,Keepalived检测到并将有故障的web服务器从系统中剔除;

当web服务器工作正常后Keepalived自动将web服务器加入到服

务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的

只是修复故障的web服务器。

需要注意一点,如果使用了keepalived.conf配置,就不需要再执

行ipvs–A命令去添加均衡的realserver命令了,所有的配置都会在

keepalived.conf里面,一个配置文件搞定所有,即只需要安装ipvs模

块。

Keepalived安装配置

官方下载keepalived相应稳定版本:

tar-xzvfkeepalived-1.1.15.tar.gz&&cdkeepalived-1.1.15&&./configure

安装完毕,配置keepalived服务为系统服务。

DIR=/usr/local/

cp

DIR/etc/sysconfig/keepalived

etc/keepalived&&cp$DIR/sbin/keepalived/usr/sbin/

$DIR/etc/rc.d/init.d/keepalived

/etc/rc.d/init.d/

&&

-p

/etc/sysconfig/

mkdir

在MASTER上/etc/keepalived/目录创建keepalived.conf配置文件,并

写入如下内容:

!

ConfigurationFileforkeepalived

global_defs{

notification_email{

wgkgood@163.com

notification_email_fromwgkgood@163.com

smtp_server127.0.0.1

smtp_connect_timeout30

router_idLVS_DEVEL

VIP1

vrrp_instanceVI_1{

stateMASTER

interfaceeth0

lvs_sync_daemon_intefaceeth0

virtual_router_id51

priority100

advert_int5

authentication{

auth_typePASS

auth_pass1111

virtual_ipaddress{

92.168.149.129

#REAL_SERVER_1

virtual_server192.168.149.12980{

delay_loop6

lb_algowlc

lb_kindDR

persistence_timeout60

protocolTCP

real_server192.168.149.13080{

weight100

TCP_CHECK{

connect_timeout10

nb_get_retry3

delay_before_retry3

connect_port80

#REAL_SERVER_2

real_server192.168.149.13180{

如上配置文件,红色标记的地方需要注意,state状态主服务器设置

MASTER,从设置为BACKUP,优先级备机设置比MASTER小,例如设

置90,使用TCP端口检测。

在LVSBACKUP服务器写入如下配置,需要注意的是客户端的配置要

修改优先级及状态:

stateBACKUP

priority90

如上设置,LVS主备配置完毕,接下来需要在realserver配置LVSVIP,

为什么要在realserver绑定VIP呢?

客户端访问director的VIP,director接收请求,将通过相应的算

法将请求转发给相应的realserver。在转发的过程中,会修改请求包

的目的mac地址,目的ip地址不变。

Realserver接收请求,并直接响应客户端。这时便出现一个问题,

director此时与realserver位于同一个网络中,当director直接将请求

转发给realserver时,realserver检测到该请求包的目的ip是vip而并

非自己,便会丢弃,而不会响应。为了解决这个问题,所以需要在所

有Realserver上都配上VIP。

为什么一定要配置在lo接口上呢?

在realserver上的lo口配置VIP,这样限制了VIP不会在物理交换机上

产生MAC地址表,从而避免IP冲突。

客户端启动Realserver.sh脚本内容:

#LVSClientServer

VIP=192.168.149.118

start)

ifconfiglo:0$VIPnetmask255.255.255.255broadcast$VIP

/sbin/routeadd-host$VIPdevlo:0

echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore

echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce

echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore

echo"2">/proc/sys/net/ipv4/conf/all/arp_announce

sysctl-p>/dev/null2>&1

echo"RealServerStartOK"

stop)

ifconfiglo:0down

routedel$VIP>/dev/null2>&1

echo"0">/proc/sys/net/ipv4/conf/lo/arp_ignore

echo"0">/proc/sys/net/ipv4/conf/lo/arp_announce

echo"0">/proc/sys/net/ipv4/conf/all/arp_ignore

echo"0">/proc/sys/net/ipv4/conf/all/arp_announce

echo"RealServerStopedOK"

exit1

*)

echo"Usage:$0{start|stop}"

LVS网站故障排查经验:

如果发现主网站无法访问,首先第一步ping网站域名是否能ping

通,如果域名无法访问,试着使用IP能不能访问,如果IP能访问,

首先排查到域名解析问题。

看当前连接状态和查看/var/log/messages日志信息,可以在LVS上访

问realserverip,进行排查。

如果LVS服务正常,后端realserver服务异常,然后查看nginx日

志信息,是否有大量恶意访问,临时重启看是否能访问。

如果有恶意ip访问,找出恶意ip,经确认可以关闭后,使用iptables

防火墙临时关闭即可。

5.7Squid缓存服务器配置

随着网站访问人数越来越多,对体验的要求也越来越高,网站承

受的并发和压力也越来越大,所以需要对网站和架构进行优化,优化

的策略有很大,系统内核、程序、配置均衡、加入缓存等,那今天我

们来讨论使用Squid对架构进行缓存优化。

Squidcache(简称为Squid)是一个流行的自由软件,它符合GNU

通用公共许可证。Squid作为网页服务器的前置cache服务器,可以

代理用户向web服务器请求数据并进行缓存,也可以用在局域网中,

使局域网用户通过代理上网。Squid主要设计用于在Linux一类系统运

行。

简单的来说就是:用户请求www网站,经过squid,squid检查本

地硬盘目录有没有这个文件的缓存;如果没有,squid则去后端真实

web服务器获取该页面,返回给用户,同时在自己本地缓存一份,如

果另外一个用户再访问同样请求页面时,squid直接从本地返回。

squid有ufs,aufs,coss,diskd,null五种存储机制,其中ufs,aufs,

diskd都是在文件系统上面保存很多小文件,coss是squid自己实

现了一个简单的文件系统,可以使用一个大文件或者一个磁盘设备来

存储。null则是给不想要磁盘缓存的情况准备的,coss看起来好像

很不错,但是以前试验并不足够稳定,因此并不推荐使用。

对于一些老系统,使用aufs或者diskd是比较好的选择,如果系

统的线程库比较好(如Linux,Solaris),那么使用aufs。

正式安装squid

安装squid也非常简单,可以用源码安装,也可以使用rpm、yum安

装,这里使用yum安装,根据实际经验使用,squid2.6系列的squid

比较稳定,可以考虑采用。

安装命令:yuminstall-ysquid

创建squid.conf配置文件,内容如下:

cache_peer192.168.149.130parent800originservername=wugk1

cache_peer192.168.149.131parent800originservername=wugk2

cache_peer_domainwugk1www.wugk1.com

cache_peer_domainwugk2www.wugk2.com

visible_hostnamelocalhost

forwarded_foroff

viaoff

cache_varyon

#aclconfig

aclmanagerprotocache_object

acllocalhostsrc127.0.0.1/32

aclto_localhostdst127.0.0.0/80.0.0.0/32

acllocalnetsrc10.0.0.0/8#RFC1918possibleinternalnetwork

acllocalnetsrc172.16.0.0/12#RFC1918possibleinternalnetwork

acllocalnetsrc192.168.0.0/16#RFC1918possibleinternalnetwork

aclSSL_portsport443

aclSafe_portsport808080

aclSafe_portsport21

aclSafe_portsport443

aclallsrc0.0.0.0/0

#ftp

aclCONNECTmethodCONNECT

aclPURGEmethodPURGE

#squidconfig2014-03-25

cache_diraufs/data/cache11024016256

cache_mem4000MB

maximum_object_size8MB

maximum_object_size_in_memory256KB

hierarchy_stoplistcgi-bin

coredump_dir/var/spool/squid

refresh_pattern^ftp:

144020%10080

14400%1440

refresh_pattern^gopher:

refresh_pattern-i(/cgi-bin/|\)00%

refresh_pattern\.(jpg|png|gif|mp3|xml|html|htm|css|js)

44050%2880ignore-reload

refresh_pattern.20%4320

Squid参数详解

vhost和vport表示支持虚拟主机和虚拟端口,如果再加上transparent

表示支持透明代理

#cache_peer表示如果本机缓存中找不到客户端请求的数据,则与后

端主机联系,以parent类型进行联系;

使用HTTP协议进行联系,联系端口是80,orginserver表示此服务器

是源服务器,name表示别名。

cache_peer192.168.149.128parent800originservername=wugk1

cache_peer192.168.149.129parent800originservername=wugk2

#设置别名所对应的域名,如果cache_peer中使用域名而不是IP的话;

那么cache_peer_domain中一定要用相同的域名,否则无法访问。

#设置缓存服务器名称

acllocalnetsrc10.0.0.0/8

#RFC1918possibleinternalnetwork

##设置访问控制,允许所有客户端访问上面设置的两个网站

#支持purge方式清除缓存

#设置缓存文件夹的路径和参数,缓存机制为aufs,10240表示10G,

目录下面分为16级,每级有256个目录

#设置缓存内存大小,最大内存为4g

设置硬盘中可缓存的最大文件大小

设置内存中可缓存的最大文件大小

#当squid突然挂掉的时候,或者突然出现什么故障的时候,将squid

在内存中的资料写到硬盘中

#如果希望内容缓存cache后不删除,直到被主动用purge清除,可

以加ignore-reload选项

1440

20%

0%

10080

refresh_pattern-i(/cgi-bin/|\)

refresh_pattern\.(jpg|png|gif|mp3|xml|html|htm|css|js)144050%

880ignore-reload

refresh_pattern.

4320

5.8MySQL高可用架构

随着访问量的不断增加,Mysql数据库压力不断增加,需要对mysql

进行优化和架构改造,可以使用高可用、主从复制、读写分离来、拆

分库、拆分表进行优化。下面我们来学习MySQL主从复制高可用如

何来实现。

MySQL数据库主从复制原理

Mysql主从同步其实是一个异步复制的过程,要实现复制首先需

要在master上开启bin-log日志功能,整个过程需要开启3个线程,

分别是Master开启IO线程,slave开启IO线程和SQL线程。

户连接上master,并请求master从指定的文件和位置之后发送

bin-log日志内容。

b)Master服务器接收到来自slave服务器的IO线程的请求后,master

服务器上的IO线程根据slave服务器发送的指定bin-log日志之后

的内容,然后返回给slave端的IO线程。(返回的信息中除了bin-log

日志内容外,还有本次返回日志内容后在master服务器端的新的

binlog文件名以及在binlog中的下一个指定更新位置。)

c)Slave的IO进程接收到信息后,将接收到的日志内容依次添加到

Slave端的relay-log文件的最末端,并将读取到的Master端的

bin-log的文件名和位置记录到master-info文件中,以便在下一次

读取的时候能够清楚的告诉Maste“r我需要从某个bin-log的哪个

位置开始往后的日志内容,请发给我”;

d)Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析

relay-log的内容成为在Master端真实执行时候的那些可执行的内

容,并在自身执行。

MySQL数据库主从配置

环境准备:192.168.149.128为master主服务器,192.168.149.129

为slave从服务器。

yuminstall-ymysqlmysql-develmysql-servermysql-libs

安装完毕后,在Master修改vi/etc/my.cnf内容为如下:

mysqld]

datadir=/data/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

Disablingsymbolic-linksisrecommendedtopreventassorted

securityrisks

symbolic-links=0

log-bin=mysql-bin

server-id=1

auto_increment_offset=1

auto_increment_increment=2

mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

replicate-do-db=all

创建/data/mysql数据目录,mkdir–p/data/mysql;chown–R

mysqld:mysqld/data/mysql

启动mysql即可,/etc/init.d/mysqldrestart

然后修改slaveMysql数据库my.cnf配置文件内容如下:

server-id=2

auto_increment_offset=2

master-host=192.168.149.128

master-user=tongbu

master-pass=123456

master-port=3306

master-connect-retry=60

在Master数据库服务器上设置权限,执行如下命令:

grantreplicationslaveon*.*to'tongbu'@'%'identifiedby

在Master数据库执行如下命令:

mysql>showmasterstatus;

------------------+----------+--------------+------------------+

|

File

|Position|Binlog_Do_DB|Binlog_Ignore_DB

mysql-bin.000006|98|

rowinset(0.00sec)

然后在slave服务器指定masterIP和同步的pos点:

changemasterto

master_host='192.168.149.128',master_user='tongbu',master_passw

ord='123456',master_log_file='mysql-bin.000006',master_log_pos=9

8;

在slave启动slavestart,并执行showslavestatus\G查看Mysql主

从状态:

Slave_IO_Running:Yes

Slave_SQL_Running:Yes两个状态为YES,代表slave已经启动两个

线程,一个为IO线程,一个为SQL线程。

然后在Master服务器创建一个数据库和表,命令如下:

然后去slave服务器查看是否有mysql_ab_test数据库和相应t0的

表,如果存在则代表Mysql主从同步搭建成功:

同样还可以测试在master服务器插入两条数据,在slave查看

insert数据是否已同步:

28master上执行如下图:

29slave上执行如下图,在master插入的数据已经同步到slave

上:

自此Mysql主从搭建完毕,现在有一个问题,如果master服务

器down机了,如何快速恢复服务呢?

可以通过两种方法:

第一种方法,如果程序连接的是master的IP,直接在slave服务

较长,可能还会出现误操作的情况,不推荐。

第二种方法,可以使用keepalived、heartbeat作为HA检测软件,

检查MySQL服务是否正常,不正常则自动切换到slave上,推荐使用。

Mysql+keepalived高可用配置

继上一章节MySQL主从配置完毕后,接着配置keepalived服务,

主要用于Mysql故障自动切换。

Keepalived安装配置:

tarzxfkeepalived-1.2.1.tar.gz

keepalived-1.2.1

&&./configure

-with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686&&make&&

DIR=/usr/local/;cp$DIR/etc/rc.d/init.d/keepalived/etc/rc.d/init.d/

cp$DIR/etc/sysconfig/keepalived/etc/sysconfig/&&mkdir-p

etc/keepalived

cp$DIR/sbin/keepalived/usr/sbin/

修改Master服务器上keepalived.conf配置如下,vi

etc/keepalived/keepalived.conf

wgkgood@139.com

notification_email_fromwgkgood@139.com

virtual_router_id151

nopreempt

auth_pass2222

92.168.149.100

virtual_server192.168.149.1003306{

lb_algowrr

real_server192.168.149.1283306{

notify_down/data/sh/mysql.sh

connect_port3306

Mysql从服务器配置keepalived.conf跟master一样,只需要把

RealserverIP修改成real_server192.168.149.129;优先级从100

改成90即可。

在master、slave数据库上创建/data/sh/mysql.sh脚本,内容为:

pkillkeepalived

然后分别重启两台数据库上keepalived服务即可。最后测试停止

masterMysql服务,是否会自动切换到Backup上。

关于Mysql集群高可用就在此告一段落,当然除了keepalived高

可用之外,Mysql优化还可以进行读写分离、Mysql+DRBD、拆分

表等等优化,有兴趣的童鞋可以继续深入研究。

6.Linux运维职业规划

怎么样,能不能挣钱我以后能做什么

对于第一个问题:

随着互联网飞速的发展,用户对网站体验各方面都要求很高,所以

作为网站底层承载的linux系统来说,得到大批量的应用,可以说大中

型互联网公司Linux在服务器领域已经占到7-80%,而且Android手机

也是基于Linux来研发定制的。未来Linux会在各行各业得到普遍的

应用。

这里讨论Linux运维,如果是Linux开发的话,薪资更高,所以只

要你技术熟练、精通,薪资根本不是问题,初级薪资一般都在4-5K

以上,中间6-8K,高级Linux运维薪资一般都在10K+。对应Linux岗

位管理方面薪资则20K+左右。所有不要再问能给有多少钱,关键是

你有多熟练,你的能力在哪里?

从Linux运维领域来说,可以努力学习的方向有:

)熟练Linux系统的性能优化、网络日常管理。

)高性能集群架构部署及优化等。

)大并发网站运维及管理。

)Mysql、Oracle数据库集群管理。

)自动化运维平台开发与管理

)网站架构GSLB、CDN缓存等。

事重在专一,即使现在不会,只要每天进步一点点,每天实践一点点,

改变一点点,相信未来更美好。只有专注才能成功。

7.Linux运维面试总结

.1.1面试技巧总结

通过全面具体的学习,我们已经正式遨游进入了Linux运维世界,

接下来我们就需要正式的找一份Linux岗位的工作,很多人谈到找工

作就害怕,为什么呢,害怕面试不上、面试紧张、知识准备不充分等

等。

通过这样一个完整的Linux高级运维的学习,我们了解了目前企业

里面使用的技术和架构信息,那接下来我们来总结一下企业一般问什

么问题?以及面试的过程中要注意哪些细节?

总结日常面试的技巧(以正式讲课为准):

)首先穿着要得体,最好标准的职业装面试,不能随意穿着;简单

一点就是要让人一看你,就感觉清爽、能干、有活力。

)要准备充分,尽量提前15分钟到面试公司,提前翻阅资料了解公

)保持微笑,不要太古板,要随和,保持心态放松,不要抢话抢答;

要懂礼貌,有时候细节决定成败。

)在回答问题上要简单明了,不要阐述一个问题绕来绕去,把自己

都绕迷糊了;要说到恰到好处。该回答的回答,不该说尽量别说,

做到有的放矢。

5)要保持谦逊,遇到不会的题目,不知道就是不知道,不要非懂装

懂;

6)面试通常开始会让你做自我介绍,自我介绍说些什么?多长合

适?

前工作经验,自己比较熟练的技能和自己的性格和优点等等;注

介绍完毕,最后说声介绍完毕,谢谢。

)面试要有自信,不要低着头,面试是双向的,你选择公司,公司

也在选择你。机会是非常的多的,关键是看你自己是否能把握住,

是否之前已经准备好。

)面试的心态一定要保持平静,不要因为一次面试不上,就觉得自

己到处都是缺点,要总结自己上次面试的不足,然后下一次改变

掉,相信坚持不懈一定能找到满意的工作。

9)最后总结一点,做什么事情自信很重要,相信自己可以做到,然

后勇敢的去做,结果一定让你倍感惊喜。

.1.2面试题目总结

通过不断的面试,我们会总结到更多的知识和技巧,这里总结一

下日常面试到的问题及简单回答方法:

)你平时在公司主要做什么?

)你们原来公司的网站架构是怎样的?

)你对哪一块比较熟练或者精通?

4)Squid、varnish等缓存服务器维护过吗?squid缓存代理的原理是

什么?缓存命中率怎么查看及清空缓存?

5)LVS的工作原理是什么?有哪些算法?

6)Nginx日常的优化的参数都有哪些?Nginx动静分离做过吗?描述

简单的步骤。

7)Linux内核优化,你都优化哪些参数?

8)你在维护网站的过程中,曾经遇到过什么重大的问题?怎么解决

的?

9)Shell编程熟练吗?编写一个自动化备份Mysql数据库的脚本?

10)Mysql主从架构的原理是什么?如果主从不同步,报错了,怎么

恢复?

1)如果备份大数据Mysql数据文件?Mysql优化有哪些步骤?

2)FTP主被动模式的区别是什么?

3)Apache两种工作模式的区别及优化?

4)Nagios、cacti维护过吗?平时都监控些什么?

5)你们公司的网络出口带宽是多少?每天网站的PV、UV是多少?

THE END
1.软件开发Tomcat之初体验51CTO博客如果需要修改为其他端口(例如 9090),只需要更改port="8080"为port="9090"。 配置Tomcat 用户(如果需要登录管理界面) 在conf/tomcat-users.xml中,可以添加管理员用户和角色来访问 Tomcat 的管理界面。例如: <role rolename="manager-gui"/> <role rolename="admin-gui"/> https://blog.51cto.com/gklbb/12841150
2.服务器管理最佳实践:保持IT运营顺畅无阻(服务器管理最多的端口)在讨论服务器管理最佳实践之前,让我们先了解服务器管理中最重要的端口。这些端口通常用于关键服务,例如:端口 22 (SSH):用于安全外壳连接。端口 80 (HTTP):用于 HTTP Web 流量。端口 443 (HTTPS):用于安全 HTTP Web 流量。端口 25(SMTP):用于发送电子邮件。端口 3389 (RDP):用于远程桌面连接。 https://www.ulidc.com/2024/12/16/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5%EF%BC%9A%E4%BF%9D%E6%8C%81-it-%E8%BF%90%E8%90%A5%E9%A1%BA%E7%95%85%E6%97%A0%E9%98%BB-%E6%9C%8D%E5%8A%A1%E5%99%A8/
3.大厂笔试选择题总结(持续更新)持久代溢出原因 -动态加载了大量Java类而导致溢出。解决办法唯有将参数 -XX:MaxPermSize 调大(一般256m能满足绝大多数应用程序需求)。将部分Java类放到容器共享区(例如Tomcat share lib)去加载的办法也是一个思路,但前提是容器里部署了多个应用,且这些应用有大量的共享类库 https://www.ctyun.cn/zhishi/p-444987
4.关于ApacheTomcat竞争条件远程代码执行漏洞(CVE2024Apache Tomcat中修复了个TOCTOU竞争条件远程代码执行漏洞(CVE-2024-50379),该漏洞的CVSS评分为9.8。Apache Tomcat中JSP编译期间存在检查时间使用时间(TOCTOU)竞争条件漏洞,当Apache Tomcat的默认servlet被配置为允许写入 (即readonly初始化参数被设置为非默认值false),在不区分大小写的文件系统上,当对同一文件进行并发读取https://nic.seu.edu.cn/info/1055/2398.htm
5.版本模式端口5.X版本local模式proxy的remoting端口转发路由错误 在5.X版本下,使用最简单的默认配置命令如下:nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &proxy默认的remoting端口为8080,grpc端口为8081。如果使用remoting协议向8080发送请求,请求会被转发到8081端口然后报错非http/2协议。使用mqadmin的topicRoute命令https://www.aliyun.com/sswb/1759271.html
6.tomcat默认线程池大小Tomcat线程池配置 maxThreads :线程池最大线程数,默认为200。当线程池空闲一段时间后会解释放到只保留minSpareThreads个线程。举例,假设maxThreads=100,maxConnections=50,acceptCount=50,假设并发请求为200,则50个线程并发处理50个并发连接,50个连接进入等待队列,剩余100个将被拒绝。也就是说Tomca最大并发线程数是由maxhttps://www.zcbm580.com/pos/9q0kgwz82.html
7.SpringBoot实现动态端口切换黑魔法java使用TomcatServletWebServerFactory 实现容器的动态创建和启动。 动态绑定 DispatcherServlet 通过 ServletContextInitializer 集合完成 Servlet 注册。 2.端口检查和动态切换: 通过ServerSocket 判断端口是否占用。 如果占用,则先用备用端口启动新服务,再通过关闭老服务释放主端口,最后切换新服务到主端口。 https://www.jb51.net/program/332497vah.htm
8.百度搜索:蓝易云JavaWeb手写Tomcat底层机制JavaWeb应用中,Tomcat作为一个Servlet容器,负责处理HTTP请求和响应。其底层机制如下:监听端口: Tomcat启动时会创建一个ServerSocket,监听指定的端口(通常是80或8080)。接收请求: 当有HTTP请求到达指定端口,ServerSocket会接收请求并创建一个Socket连接。HTTP请求解https://blog.itpub.net/70025954/viewspace-3057123/
9.大学期末考试SSH试题四腾讯云开发者社区库房出库管理系统 一、语言和环境 a) 实现语言 java b) 环境要求 JDK6、myeclipse 、tomcat6、oracle 二、功能要求 1、使用SSH(struts2+spring+hibernate)实现库房出库管理,oracle做为后台数据库具体要求如下 进入应用首页,如图-l所示: 大学期末考试SSH试题四_java https://cloud.tencent.com/developer/article/2477876
10.S220,S310,S530,S620V600R024C00配置指南(Web网管)ASN1是通用的数字证书格式之一,文件的扩展名是.der,是大多数浏览器的默认格式。 PFX是通用的数字证书格式之一,文件的扩展名是.pfx,是可移植的二进制格式,可以转换为PEM或ASN1格式。 CA(Certificate Authority) CA是发放、管理、废除数字证书的机构。CA的作用是检查数字证书持有者身份的合法性,并签发数字证书(在证书https://info.support.huawei.com/enterprise/zh/doc/EDOC1100406542/6ec4df
11.服务器安全管理需要注意哪些事项?默认端口风险:Windows的3389或Linux的22是恶意入侵者首要入侵的对象,不建议使用预设端口。 推荐端口范围:常用及安全端口为50000-59000,应选择此范围内的随机数字。 3、打开系统防火墙 防火墙的重要性:不打开防火墙会将高风险的服务端口对外开放,提高被入侵的可能性。 https://shuyeidc.com/wp/18175.html
12.tomcat系列漏洞利用Apache Tomcat 安全漏洞(CVE-2017-5647) Apache Tomcat 安全漏洞(CVE-2018-1304) Apache Tomcat 安全漏洞(CVE-2018-1305) 本文要点 发现目标的所有 tomcat 管理控制台入口 低版本 tomcat 管理控制台manager的弱口令爆破 通过tomcat 默认管理控制台的 war 包部署功能部署 webshell https://www.secpulse.com/archives/161988.html
13.Tomcat之服务管理页面manager部署tomcatmanagertomcat默认服务端口8080,可以自定义端口,根据服务器端口规划设置指定监听端口。 7、访问tomcat页面 8、登录管理页面 点击ServerStatus、Manager App等管理项弹窗要求输入用户密码,将设置好的用户名密码输入后即可登录。 9、查看服务器状态 查看服务器状态可以看到java版本、操作系统内核版本、内存使用https://blog.csdn.net/carefree2005/article/details/129991661
14.tomcat会话管理及session复制集群配置寂寞暴走伤(2)ManagerBase:实现了Manager接口,该类提供了Session管理器的常见功能的实现。 (3)StandardManager:继承自ManagerBase,tomcat的默认Session管理器(不指定配置,默认使用这个),是tomcat处理session的非集群实现(也就说是单机版的),tomcat关闭时,内存session信息会持久化到磁盘保存为SESSION.ser,再次启动时恢复。 http://blog.chinaunix.net/uid-30212356-id-5723004.html
15.Tomcat默认端口是多少Tomcat默认端口是什么java教程Tomcat默认端口是多少? tomcat默认的http端口是8080。当你启动tomcat时,它会在8080端口上监听连接。 本教程操作系统:windows10系统、Dell G3电脑。 tomcat默认的http端口是8080。当你启动tomcat时,它会在8080端口上监听连接。如果没有进行特殊配置,你可以通过以下地址在浏览器中访问Tomcat管理页面:https://www.php.cn/faq/642468.html
16.Tomcat配置实践tmp |-- webapps tomcat默认存放应用程序的目录,好比apache的默认网页存放路径是/var/www/html一样; | |-- docs tomcat文档; | |-- examples tomcat自带的一个独立的web应用程序例子; | |-- host-manager tomcat的主机管理应用程序; | | |-- META-INF 整个应用程序的入口,用来描述jar文件的信息; | | https://www.jianshu.com/p/60016cb57321
17.Tomcat容器入门介绍·Servlet学习笔记·看云(2) 主动改变tomcat的端口. 到conf/server.xml 文件中修改 3、 能够正常启动,但是会导航到另外一个页面 去修改工具->管理加载项,把默认的导航给禁用即可 4、浏览器显示404 Not Found 在访问 tomcat时候,一定要保证 tomcat 服务器是启动,不然就会出现这种错误。 https://www.kancloud.cn/digest/switch-servlet/120125
18.一,每个备案系统单独出具测评报告.二,测评报告编号为四组数据.各建议制定安全事件报告和处置管理制度,明确安全事件的类型,规定安全事 件的现场处理,事件报告和后期恢复的管理职责. 主要安全问题及整改建议 XV 报告编号:34010100429-00002-21-0115-01 【2021 版】 (2021)皖信安测字 061 号 目录 网络安全等级测评基本信息表错误!https://ggzy.hefei.gov.cn/EpointWebBuilder/WebbuilderMIS/attach/downloadZtbAttach.jspx?attachGuid=97684902-817a-47a5-9df9-cffba0ead476&appUrlFlag=ztbAttach