Linux运维入门到高级全套经常使用要点

Linux运维入门到高级全套经常使用要点 php

1. Linux 入门篇..................................................................... 4 css

1. 1 Linux 操做系统简介........................................................... 4 html

1. 2 Linux 发展趋势................................................................... 5 前端

1. 3 Linux 系统安装................................................................... 6 java

1. 4 Linux 学习技巧................................................................. 21 node

2. Linux 系统篇................................................................................ 22 mysql

2.1 Linux 系统管理.................................................................. 22 linux

2.1. 1 Linux 目录初识........................................................... 22 ios

2.1. 2 Linux 经常使用命令........................................................... 24 nginx

2.1. 3 Linux 用户权限........................................................... 26

2.1. 4 Linux 网络配置........................................................... 28

3. Linux 服务篇................................................................................ 32

3.1 Linux 服务部署.................................................................. 32

3.1. 1 构建 NTP 时间服务器.............................................. 32

3.1. 2 构建 DHCP 服务器.................................................... 34

3.1. 3 搭建 Samba 服务器.................................................. 37

3.1. 4 搭建 NFS 服务器...................................................... 42

3.1. 5 搭建 FTP 服务器....................................................... 44

3.1. 6 构建 Apache WEB 服务器........................................ 49

3.1. 7 构建 MySQL 服务器................................................. 54

3.1. 8 LAMP 架构网站搭建.................................................. 59

3.1. 9 Cacti 监控平台搭建................................................... 65

3.1. 10 Nagios 监控平台搭建............................................... 70

3.1. 11 Kickstart 自动化安装平台........................................ 80

4. Linux 编程篇................................................................................ 89

4.1 Linux Shell 编程................................................................. 89

4.1. 1 Shell 编程简介........................................................... 89

4.1. 2 Shell 变量设置........................................................... 90

4.1. 3 Shell 流程控制语句.................................................... 92

4.1. 4 Shell 脚本案例........................................................... 99

4.1. 5 Shell 数组编程......................................................... 103

5. Linux 深刻篇.............................................................................. 106

5. 1 构建 Nginx WEB 服务器.................................................. 106

5.1. 1 Nginx WEB 安装........................................................ 107

5.1. 2 Nginx 虚拟主机配置................................................ 109

5.1. 3 Nginx 性能优化........................................................ 110

5.1. 4 Nginx 参数深刻理解................................................ 113

5.1. 5 Nginx Rewrite 规则................................................... 115

5. 2 构建 Rsync 同步服务器.................................................. 117

5.2. 1 Rsync 服务端配置.................................................... 117

5.2. 2 Rsync 基于 SSH 同步.............................................. 121

5.2. 3 Rsync 实时同步配置................................................ 121

5. 3 Tomcat/Resin JAVA 服务器............................................. 123

5.3. 1 Tomcat 安装配置...................................................... 123

5.3. 2 Tomcat 性能优化...................................................... 125

5.3. 3 Resin 安装配置......................................................... 127

5.3. 4 Resin 性能优化......................................................... 128

5.3. 5 Resin 多实例配置..................................................... 129

5. 4 Nginx Tomcat 动静分离.................................................. 131

5. 5 LNAMP 高性能架构配置................................................ 135

5. 6 LVS+Keepalived 负载均衡............................................... 143

5. 7 Squid 缓存服务器配置................................................... 154

5. 8 MySQL 高可用架构........................................................ 160

6. Linux 运维职业规划.................................................................. 170

 

 

1. Linux 入门篇

1. 1 Linux 操做系统简介

Linux 是一套无偿使用和自由传播的类 Unix 操做系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操做系统。它能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操做系统。

1991 年的 10 月 5 日,Linux 创始人林纳斯·托瓦兹(Linus Torvalds)在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生,

1994 年 3 月,Linux 1.0 发布,代码量 17 万行,当时是按照彻底自由

免费的协议发布,随后正式采用 GPL(General Public License 的缩写,是一份 GNU 通用公共受权)协议。

Linux 具备以下优势:

Ø 稳定、免费或者花费少

Ø 安全性高

Ø 多任务,多用户

Ø 耗资源少

Ø 因为内核小,因此它能够支持多种电子产品,如:Android 手机、

PDA 等。

1. 2 Linux 发展趋势

随着 IT 产业的不断发展,用户对网站体验要求也愈来愈高,而目前主流网站后端承载系统都是 Linux 系统,目前 Android 手机所有基于 Linux 内核研发。企业大数据、云存储、虚拟化等先进技术都是基于 Linux 系统。

2010 年据有关权威部门统计:未来几年内我国软件行业的从业机会十分庞大,中国每一年对软件人才的需求将达到 50 万人左右。而对于 Linux 专业人才的就业前景,更是广阔;据悉在将来 5-10 年内 Linux 专业人才的需求将达到 120 万+!尤为是有经验的资深的

Linux 工程师目前很是的缺少,薪资也是很是诱人,平均月薪都是 15-20K,能力强的薪资更高。

clip_image002 因此机会对每一个人都是公平的,关键是咱们每一个人如何去行动,选择大于努力。

1. 3 Linux 系统安装

在安装 Linux 系统以前,先来了解 windows 系统结构,windows 系统通常是安装在 C 盘系统盘,一样 Linux 也有相似的系统盘(/根分区),Linux 一般分区为(根分区/、swap 分区),Linux 系统以文件的存储方式,全部的文件都是存储在某个目录下的,相似于 windows 的文件夹。

对于文件系统的属性来讲,windows 文件系统类型通常是 ntfs、 fat32 等,而 Linux 文件系统类型则为 ext二、ext三、ext4 等(文件系统:是操做系统用于明确磁盘或分区上的文件的方法和数据结构文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需数据结构。)

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

最大的困惑莫过于给硬盘进行分区。虽然如今各类发行版本的 Linux 已经提供了友好的图形交互界面,可是不少人仍是感受无从下手。这其中的缘由主要是不清楚 Linux 的分区规定。就比如若是咱们了解了 windows 分区的规则,系统盘 C、数据盘 D 等,就很好分区了。

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

包含扩展分区)构成,任何一个扩展分区都要占用一个主分区号码,也就是在一个硬盘中,主分区和扩展分区一共最可能是 4 个。 下面正式来安装 Linux 系统,安装系统前须要准备以下软件:

ü VMware workstation 10.0

ü CentOS 5.8 x86_i386.iso 安装图解以下:第一步,新建虚拟机以下图:

clip_image003 第二步,选择相关选项,以下图: clip_image005 第三步选择“稍后安装操做系统”,以下图: clip_image007 第四步,选择客户机操做系统类型以下图:

clip_image009

第五步,设置虚拟机硬盘大小为 20G,最低不能小于 5G,以下图: clip_image011 第六步,虚拟机新建完成,以下图:

clip_image012 第七步,修改虚拟机内存为 512M,并添加 ISO 镜像,以下图: clip_image014 自此,虚拟机新建完成,接下来点击“启动此虚拟机”进行 Linux 系统安装,Linux 系统安装图解以下:第一步,进入安装界面,直接按 Enter 回车键便可。 clip_image016 第二步,光盘检测,选择 SKIP 跳过。

clip_image017

clip_image019 第三步,选择安装过程当中的语言,初学者能够选择“简体中文”。

clip_image021 第四步,选择初始化整个硬盘,清除全部数据。 clip_image023 第五步,选择分区方式为“自定义分区“。

clip_image025

clip_image027 第五步,点击“新建“-首先建立一个 swap 交换分区,大小为物理内存的 2 倍(1024M)。

clip_image029

第六步,继续建立分区,选择“新建“,而后建立根分区/,以下图选择,大小为剩余全部空间便可。

clip_image032

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

clip_image035

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

clip_image039 第九步,系统安装包选择,这里选择“如今定制“。 clip_image041 第十步,系统安装包选择,左侧选择“开发“----右侧选择”开发工具“和“开发库”,语言选择“支持中文“,其余一律不选择。

clip_image043

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

1. 4 Linux 学习技巧

初学者能够本身安装虚拟机,而后把 linux 经常使用命令例如 cd、ls、

chmod、useradd、vi 等等多练习几十遍,把本身敲打命令的熟练程度提高上来。

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

Apache、Mysql 等),遇到问题后能够在 google 搜索,搜索的时候多看几篇文章,综合最好的文章来解决问题。

可以熟练的搭建服务后,理解每一个服务的完整配置和优化,能够拓展思惟。例如 LAMP,咱们通常是把全部服务放在一台机器上,若是分开多台该如何部署呢?等等。平时多积累shell编程,能够在网上查找前辈们写的很是好的shell,本身下载下来多练习几遍,从中吸收,不断提升。

创建一个本身的学习博客,把平时工做学习中的知识都记录在里面,这样也能够供别人来参考同时也能提升本身的编写文档及方案的能力。

经过以上学习可以知足企业的通常应有,须要达到资深级别,还

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

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

2. Linux 系统篇

2.1 Linux 系统管理

经过前两章的学习,咱们已经可以独立安装 Linux 系统,已经掌握了 Linux 学习的技巧,那接下来,咱们将系统的来了解 Linux 系统各目录、权限及经常使用命令的使用。

2.1. 1 Linux 目录初识

经过前面的学习,咱们已经可以独立安装完一个 linux 系统,那接下来咱们来熟悉一下 Linux 系统里面的各个目录文件夹的大体功能:主要的目录树的有/、/root、/home、/usr、/bin 等目录。下面是一个典型的 linux 目录结构以下: (附图表)

clip_image047

/ 根目录

/bin 存放必要的命令

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

/dev存放设备文件

/etc 存放系统配置文件

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

/lib 存放必要的运行库

/mnt 存放临时的映射文件系统,一般用来挂载使用。

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

/root 超级用户的主目录

/sbin 存放系统管理程序

/tmp 存放临时文件

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

/var 系统默认日志存放目录

2.1. 2 Linux 经常使用命令

默认进入系统,咱们会看到这样的字符: [root@localhost ~]#,其中# 表明当前是 root 用户登陆,若是是$表示当前为普通用户。

咱们了解 linux 由不少目录文件构成,那咱们来学习第一个 Linux 命令:

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

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

(.和..能够理解为相对路径;例如 cd /hom/test ,cd 加完整的路径,能够理解为绝对路径)

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

ls ./ 查看当前目录全部的文件和目录。

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

pwd 显示当前所在的目录。

mkdir 建立目录,用法 mkdir test ,命令后接目录的名称。

rmdir 删除空目录

rm 删除文件或者目录,用法 rm –rf test.txt (-r 表示递归,-f 表示强制)。

cp 拷贝文件,用法,cp old.txt /tmp/new.txt ,经常使用来备份;若是拷贝目录

须要加 –r 参数。

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

touch 建立文件,用法,touch test.txt,若是文件存在,则表示修改当前文件时间。

Useradd 建立用户,用法 useradd wugk ,userdel 删除用户。

Groupadd 建立组,用法 groupadd wugk1 ,groupdel 删除组。

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

find 后接查找的目录,-name 指定须要查找的文件名称,名称能够使用*表示全部。

find /home -name “*.txt” ;查找/home 目录下,全部以.txt 结尾的文件或者目录。

vi 修改某个文件,vi 有三种模式:命令行模式、文本输入模式、末行模式。

默认 vi 打开一个文件,首先是命令行模式,而后按 i 进入文本输入模式,能够在文件里写入字符等等信息。

写完后,按 esc 进入命令模式,而后输入:进入末行模式,例如输入:wq 表示保存退出。

若是想直接退出,不保存,能够执行:q!, q!叹号表示强制退出。

cat 查看文件内容,用法 cat test.txt 能够看到 test.txt 内容

more 查看文件内容,分页查看,cat 是所有查看,若是篇幅不少,

只能看到最后的篇幅。能够使用 cat 和 more 同时使用,例如: cat test.txt |more 分页显示 text 内容,|符号是管道符,用于把|前的输出做为后面命令的输入。

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

echo ok > test.txt ;把 ok 字符覆盖 test.txt 内容,>表示追加并覆盖的意思。

>>两个大于符号,表示追加,echo ok >> test.txt,表示向 test.txt 文件追加 OK 字符,不覆盖原文件里的内容。

初学者常见的命令就如上所示,固然还有不少深刻的命令须要学习,后面的课程会讲解。

2.1. 3 Linux 用户权限

在 Linux 操做系统中,root 的权限是最高的,至关于 windows 的 administrator,拥有最高权限,能执行任何命令和操做。在系统中,经过 UID 来区分用户的权限级别,UID 等于 0,表示此用户具备最高权限,也就是管理员。其余的用户 UID 依次增长,经过/etc/passwd 用户密码文件能够查看到每一个用户的独立的 UID。

每个文件或者目录的权限,都包含一个用户权限、一个组的权限、其余人权限,例以下:

标红第一个 root 表示该文件全部者是 root 用户,第二个 root 表明该文件的所属的组为 root 组,其余用户这里默认不标出。

[root@node1 ~]# ls -l monitor_log.sh

-rw-r--r-- 1 root root 91 May 7 20:21 monitor_log.sh

[root@node1 ~]#

若是咱们想改变某个文件的全部者或者所属的组,能够使用命令

chown chown –R test:test monitor_log.sh 便可。

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

无权限(-)。

利用 ls -l 命令能够看到某个文件或目录的权限,它以显示数据的第一个字段为 准。第一个字段由 10 个字符组成,以下:

[root@node1 ~]# ls -l monitor_log.sh

-rw-r--r-- 1 root root 91 May 7 20:21 monitor_log.sh

[root@node1 ~]#

第一位表示文件类型,-表示文件,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 若是给某个文件受权,命令为 chmod:chmod 777 monitor_log.sh

2.1. 4 Linux 网络配置

熟悉了经常使用的命令和 Linux 权限,那接下来如何让所在的 Linux 系统上网呢?管理 linux 服务器网络有哪些命令呢?

Linux 服务器默认网卡配置文件在/etc/sysconfig/network-scripts/下,命名的名称通常为:ifcfg-eth0 ifcfg-eth1 ,eth0 表示第一块网卡,eth1

表示第二块网卡,依次类推。通常 DELL R720 标配有 4 块千兆网卡。

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

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

配置以下:

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=dhcp

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

ONBOOT=yes TYPE=Ethernet

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

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]

DEVICE=eth0

BOOTPROTO=static

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

ONBOOT=yes

TYPE=Ethernet

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/network restart 便可。

查看 ip 命令:ifconfig 查看当前服务器全部网卡的 IP,能够单独指定,

ifconfig eth0 查看 eth0 的 IP 地址。

网卡配置完毕,若是来配置 DNS,首先要知道 DNS 配置在哪一个目录

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

在该文件里面添加以下两条: nameserver 202.106.0.20

nameserver 8.8.8.8

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

能够 ping www.baidu.com看看效果:

clip_image048 IP 配置完毕后,咱们能够经过远程工具来链接 Linux 服务器,常见的

Linux 远程链接工具备:putty、secureCRT(主流)、xshell、xmanger 等工具。

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

点击左上角 quick connect 快速链接,弹出界面,而后输入 IP,用户名,端口默认是 22,而后点击下方的 connect 链接,会提示输入密码,输入便可。

clip_image050 弹出输入密码框:

clip_image052 进入远程界面,与服务器真实登陆同样,而后能够执行命令:

clip_image054 经过这几章的学习,咱们已经熟练了 Linux 经常使用命令的操做,权限网络、网络配置、远程链接等知识,那接下来咱们还能作什么呢?咱们已经差很少入门了,接下来就是更进一步的服务配置,Linux 系统到底用来作什么呢?接下来的章节将跟你们一块儿来学习。

Linux 系统的应用,咱们最开始介绍的时候简单介绍过,目前大中型企业都用它来承载 web 网站、数据库、虚拟化平台等,那接下来咱们将在 Linux 系统安装各类服务和软件来实现 Linux 真正的价值。

3. Linux 服务篇

3.1 Linux 服务部署
3.1. 1 构建 NTP 时间服务器

NTP 服务器是用于局域网服务器时间同步使用的,能够保证局域网全部的服务器与时间服务器的时间保持一致,某些应用对时间实时性要求高的必须统一时间。

互联网的时间服务器也有不少,例如 ntpdate ntp.fudan.edu.cn 复

旦大学的 NTP 免费提供互联网时间同步。

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

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

-A INPUT -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT

NTP 时间服务器配置:

yum install ntp ntpdate -y 便可!

修改 ntp.conf 配置文件

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

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

server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10

以守护进程启动 ntpd

/etc/init.d/ntpd start 便可

(注意*: ntpd 启动后,客户机要等几分钟再与其进行时间同步,不然会提示“no server suitable for synchronization found”错误。)

配置时间同步客户机

crontab -e

增长一行,在天天的 6 点 10 分与时间同步服务器进行同步

10 06 * * * /usr/sbin/ntpdate ntp-server 的

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

备注:若是客户机没有 ntpdate,能够 yum –y install ntp 便可!

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

添加外网 server 便可)

driftfile /var/lib/ntp/drift restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6 ::1 server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 includefile /etc/ntp/crypto/pw keys /etc/ntp/keys

下面是参数详解:

restrict default ignore

# 关闭全部的 NTP 要求封包

restrict 127.0.0.1

# 开启内部递归网络接口 lo

restrict 192.168.0.0 mask

#在内部子网里面的客户端能够进行

255.255.255.0 nomodify

网络校时,但不能修改 NTP 服务器的时间参数。

server 198.123.30.132

#198.123.30.132 做为上级时间服务器参考

restrict 198.123.30.132

#开放server 访问咱们ntp服务的权限

driftfile /var/lib/ntp/drift

在与上级时间服务器联系时所花费

的时间,记录在 driftfile 参数后面的文件内

broadcastdelay 0.008

#广播延迟时间

自此 NTP 服务搭建完毕,而后在全部客户端 crontab 里面添加以下语句:

0 0 * * * /usr/sbin/ntpdate 10.0.0.155 >>/data/logs/ntp.log

2>&1

3.1. 2 构建 DHCP 服务器

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是

一个局域网的网络协议,使用 UDP 议工做,主要用途:给内部网络或网络服务供应商自动分配 IP 地址DHCP 有 3 个端口,其中 UDP67 和 UDP68 为正常的 DHCP 服务端口,分别做为 DHCP Server 和 DHCP

Client 的服务端口。

DHCP 能够部署在服务器、交换机或者服务器,能够控制一段 IP 地址范围,客户机登陆服务器时就能够自动得到 DHCP 服务器分配的 IP 地址和子网掩码。其中 DHCP 所在服务器的须要安装 TCP/IP 协议,须要设置静态 IP 地址、子网掩码、默认网关。

正式安装 DHCP 服务:

Yum install dhcp dhcp-devel –y 便可,而后修改 DHCP

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

ddns-update-style interim; ignore client-updates; next-server 192.168.0.79; filename "pxelinux.0"; allow booting; allow bootp; subnet 192.168.0.0 netmask 255.255.255.0 {

# --- default gateway option routers 192.168.0.1; option subnet-mask 255.255.252.0;

# option nis-domain "domain.org";

# option domain-name "192.168.0.10";

# option domain-name-servers 192.168.0.11;

# option ntp-servers 192.168.1.1;

# option netbios-name-servers 192.168.1.1;

# --- Selects point-to-point node (default is hybrid). Don't

change this unless

# -- you understand Netbios very well # option netbios-node-type 2; range dynamic-bootp 192.168.0.100 192.168.0.200; host ns { hardware ethernet 00:1a:a0:2b:38:81; fixed-address 192.168.0.101;}

}

参数解析以下:

选 项

解 释

ddns-update-style interim|ad-hoc|none

参数用来设置DHCP服务器与DNS

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

interim 为 DNS 互动更新模式,

ad-hoc为特殊DNS更新模式,none 为不支持动态更新模式。

next-server ip

pxeclient 远程安装系统,指定 tftp server 地址

filename

开始启动文件的名称,应用于无盘安装,能够是 tftp 的相对或绝对路径

ignore client-updates

为忽略客户端更新

subnet-mask

为客户端设定子网掩码

option routers

为客户端指定网关地址

domain-name

为客户端指明 DNS 名字

domain-name-servers

为客户端指明 DNS 服务器的 IP 地址

host-name

为客户端指定主机名称

broadcast-address

为客户端设定广播地址

ntp-server

为客户端设定网络时间服务器的 IP 地址

time-offset

为客户端设定格林威治时间的偏移时间,单位是秒

注意如上配置,须要修改为对应服务器网段 IP,而后重启 DHCP 服务,

/etc/init.d/dhcpd restart 便可。

客户端要从这个 DHCP 服务器获取 IP,须要作简单的设置,若是

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

相改为 dhcp 便可,windows 机器的话,须要修改本地链接,把它设置成自动获取 IP 便可。

BOOTPROTO=dhcp

3.1. 3 搭建 Samba 服务器

Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件,由服务器及客户端程序构成,

SMBServer Messages Block,信息服务块)是一种在局域网上

享文件和打印机的一种通讯协议,它为局域网内的不一样计算机之间提供文件及打印机等资源的共享服务。

SMB 协议是客户机/服务器型协议,客户机经过该协议能够访问服务器上的共享文件系统、打印机及其余资源。经过设置“NetBIOS over TCP/IP”使得 Samba 不但能与局域网络主机分享资源,还能与

全世界的电脑分享资源。安装 SAMBA 服务器:

Yum install samba –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

server string = Samba Server Version %v security = share passdb backend = tdbsam load printers = yes cups options = raw

[temp]

comment=Temporary file space path=/tmp read only=no public=yes

[data]

comment=Temporary file space path=/data read only=no public=yes

Shutting

[FAILED]

down

 

SMB

services:

Shutting

[FAILED]

down

 

NMB

services:

Starting

[ OK ]

 

SMB

 

services:

Starting

 

NMB

 

services:

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

[root@node1 ~]# /etc/init.d/smb restart

[ OK ]

workgroup =

WORKGROUP 设 Samba Server 所要加入的工做

 

组或者域。

server string = Samba Server

Version %v

Samba Server 的注释,能够是任何字符串,也能够不填。宏%v 表示显示 Samba 的版本号。

security = user

1.share:用户访问 Samba Server 不须要提供用户名和口令, 安全性能较低。

2. user:Samba Server 共享目录只能被受权的用户访问,由 Samba Server 负责检查帐号和密码的正确性。帐号和密码要在本 Samba Server 中创建。

3. server:依靠其余 Windows NT/2000 或 Samba

Server 来验证用户的帐号和密码,是一种代理验证。此种安全模式下,系统管理员能够把全部的

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

Windows NT 进行 Samba 认证, 远程服务器能够自动认证所有用户和口令,若是认证失败,Samba 将使用用户级安全模式做为替代的方式。

4. domain:域安全级别,使用主域控制器(PDC)来完成认证。

comment = test

是对该共享的描述,能够是任意字符串。

path =

/home/test

共享目录路径

browseable= yes/no

用来指定该共享是否能够浏览。

writable = yes/no

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

available = yes/no

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

admin users = admin

该共享的管理者

valid users = test

容许访问该共享的用户

invalid users = test

禁止访问该共享的用户

write list = test

容许写入该共享的用户

public = yes/no

public 用来指定该共享是否容许 guest 帐户访问。

在浏览器里面访问方式为:\\192.168.149.128(SMB 文件共享服务端 IP),如何没有权限访问,须要注意防火墙和 selinux 设置,能够使用以下命令关闭:

/etc/init.d/iptables stop ;sed –i ‘/SELINUX/s/enforcing/disabled’

/etc/sysconfig/selinux

clip_image056

3.1. 4 搭建 NFS 服务器

NFS 是 Network File System 的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是经过网络让不一样的机器、不一样的操做系统可以彼此分享个别的数据,让应用程序在客户端经过网络访问位于服务器磁盘中的数据,是在类 Unix 系统间实现磁盘文件共享的一种方法。

NFS 在文件传送或信息传送过程当中依赖于 RPC 协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其余系统中程序的一种机制。NFS自己是没有提供信息传输的协议和功能的。

NFS 应用场景,经常使用于高可用文件共享,多台服务器共享一样的数据,可扩展性比较差,自己高可用方案不完善,取而代之的数据量比较大的能够采用 MFS、TFS、HDFS 等等分布式文件系统。

NFS 安装配置:

Yum install nfs* portmap -y 以下图,安装成功便可。

clip_image058

NFS 安装完毕,须要建立共享目录,共享目录在/etc/exports 文件里面配置,可配置参数以下:

/data/ 192.168.149.129(rw,sync,no_hide,no_all_squash)

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

/etc/init.d/portmap restart ;/etc/init.d/nfs restart

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

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

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

ro 只读访问 rw 读写访问 sync 全部数据在请求时写入共享 hide 在 NFS 共享目录中不共享其子目录 no_hide 共享 NFS 目录的子目录 all_squash 共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录。

no_all_squash 保留共享文件的 UID 和 GID(默认) root_squash root 用户的全部请求映射成如 anonymous 用户同样的权限(默认)

no_root_squas root 用户具备根目录的彻底管理访问

权限

Linux 客户端,如何想使用这个 NFS 文件系统,须要在客户端挂载,挂载命令为:

Mount –t nfs 192.168.149.128:/data/ /mnt 便可。若是有报错根据错误信息排查。常见问题有 rpc 服务没有启动、防火墙没关闭、selinux 未关闭等问题。(拓展* 有兴趣的童鞋能够研究 MFS(分布式文件系统)。)

3.1. 5 搭建 FTP 服务器

FTP 是文件传输协议,正是因为这种协议使得主机间能够共享文件。 FTP 使用 TCP生成一个虚拟链接用于控制信息,而后再生成一个单独的 TCP 链接用于数据传输

vsftpd 是一款在 Linux 行版中最主流的 FTP 服务器程序;特色是小巧轻快,安全易用;能让其自身特色得发发挥和掌握。

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

ProFTPD、PureFTPd 和 wuftpd 等,这么多 FTP 服务器程序,关键在于本身熟练哪个就使用哪个。今天咱们来研究一下 VSFTPD 简单安装及使用。安装命令: yum install vsftpd* -y

clip_image060

修改配置文件以下:

#vsftpd config 2014 by wugk

anonymous_enable=NO //禁止匿名用户访问 local_enable=YES //容许本地用户登陆 FTP 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 //是否使用标准的 ftpd xferlog 日志文件

格式 listen=YES //使 vsftpd 处于独立启动监听端口模式 pam_service_name=vsftpd //设置 PAM 认证服务配置文件名称,文件存放在/etc/pam.d/目录 userlist_enable=YES //用户列表中的用户是否容许登陆FTP服务

器,默认是不容许

tcp_wrappers=YES //使用tcp_wrqppers做为主机访问控制方式

1) 第一种方法就是使用系统用户登陆 FTP,可是也是比较危险的,

先测试系统用户登陆 FTP,在 Linux 系统上建立 useradd test 用

户,并为其设置名,而后在 xp 客户端打开个人电脑资源里面访问

ftp://192.168.149.128输入用户名和密码便可访问,进行建立和删除操做。

2) 第二种方法比较安全,配置相对复杂一点,就是使用 vsftpd 虚拟用户登陆 FTP 服务器进行常见的操做。 Ø 首先安装 FTP 虚拟用户须要用到的软件及认证模块

yum install pam* db4* --skip-broken –y

建立并生成 vsftpd 数据库文件 vi /etc/vsftpd/ftpusers.txt,内容以下:

第一行为 FTP 虚拟用户,登陆用户名,第二行为密码,第三行为用户名,依次类推。

wugk

1

wugk1

1

Ø 生成数据库文件命令:

db_load -T -t hash -f /etc/vsftpd/ftpusers.txt

/etc/vsftpd/vsftpd_login.db chmod 700 /etc/vsftpd/vsftpd_login.db

Ø 配置 PAM 验证文件:

在配置文件 vi /etc/pam.d/vsftpd 行首加入以下两行认证语句:(若是是 32 位,lib64 需改为 lib,若是 RedHat,加入的语句不同,需注意)

auth sufficient /lib64/security/pam_userdb.so

db=/etc/vsftpd/vsftpd_login account sufficient /lib64/security/pam_userdb.so

db=/etc/vsftpd/vsftpd_login

Ø 建立 vsftpd 映射本地用户:

全部的 FTP 虚拟用户须要使用一个系统用户,这个系统用户不须要密码,也不须要登陆。主要用来作虚拟用户映射使用。

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

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

anonymous_enable=NO 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

保存重启,/etc/init.d/vsftpd restart 便可使用虚拟用户登陆,这时

候全部的虚拟用户共同使用/home/ftpuser 目录上传下载,若是想使

用本身独立的目录,能够在/etc/vsftpd/vsftpd_user_conf 目录建立各

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

vi /etc/vsftpd/vsftpd_user_conf/wugk ,内容以下,创建本身的 FTP

目录。

local_root=/home/ftpsite/wugk

write_enable=YES anon_world_readable_only=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES

重启,使用客户端登陆 FTP,测试便可。关于 FTP 讲解就到此,windows 还能够使用 Server-U 来搭建 FTP 服务器端,有兴趣的童鞋能够研究一下。

Ø FTP 主被动模式

FTP 主动模式:客户端从一个任意的非特权端口 N(N>1024)链接到 FTP 服务器的 port 21 命令端口。而后客户端开始监听端口 N+1,并发送 FTP 命令“port N+1”到 FTP 服务器。接着服务器会从它本身的数据端口(20)链接到客户端指定的数据端口(N+1)。

FTP 被动模式:客户端从一个任意的非特权端口 N(N>1024)链接到 FTP 服务器的 port 21 命令端口。而后客户端开始监听端口 N+1,同时客户端提交 PASV 命令。服务器会开启一个任意的非特权端口

(P >1024),并发送 PORT P 命令给客户端。而后客户端发起从本地端口 N+1 到服务器的端口 P 的链接用来传送数据。

3.1. 6 构建 Apache WEB 服务器

Apache 是世界使用排名第一的 Web 服务器软件。它能够运行在几

乎全部普遍使用的计算机平台上,因为其跨平台和安全性被普遍使用,是最流行的 Web 服务器端软件之一。Apache 工做模式有多种,其中最经常使用的有两种:

Prefork 模式:Prefork MPM 使用多个子进程,每一个子进程只有一个线程。每一个进程在某个肯定的时间只能维持一个链接。

在大多数平台上,Prefork MPM 在效率上要比 Worker MPM 要高,

可是内存使用大得多。prefork 的无线程设计在某些状况下将比 worker 更有优点:它能够使用那些没有处理好线程安全的第三方模块,而且对于那些线程调试困难的平台而言,它也更容易调试一些。

Worker 模式:Worker MPM 使用多个子进程,每一个子进程有多个线程。每一个线程在某个肯定的时间只能维持一个链接。一般来讲,在一个高流量的 HTTP 服务器上,Worker MPM 是个比较好的选择,由于 Worker MPM 的内存使用比 Prefork MPM 要低得多。

Worker MPM 也由不完善的地方,若是一个线程崩溃,整个进程就会连同其全部线程一块儿"死掉".因为线程共享内存空间,因此一个程序在运行时必须被系统识别为"每一个线程都是安全的"。

Ø 源码安装 Apache

官 方 下 载 目 前 稳 定版 本 , http://mirror.esocc.com/apache/httpd/httpd-2.2.27.tar.gz,解压安装以下,安装 apache 以前,须要先安装 apr apr-util。

clip_image062

而后启动 apache 服务: /usr/local/apache2/bin/apachectl start

clip_image063

查看 apache 进程及端口:

clip_image065

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

Ø Apache 基于域名虚拟主机配置

修改 vi /usr/local/apache2/conf/extra/httpd-vhosts.conf 虚拟主机

配置文件内容以下:

NameVirtualHost *:80

<VirtualHost *:80>

ServerAdmin wgkgood@163.com

DocumentRoot "/data/webapps/www1"

ServerName www.wugk1.com

<Directory "/data/webapps/www1">

AllowOverride All

Options -Indexes FollowSymLinks

Order allow,deny

Allow from all

</Directory>

ErrorLog logs/error_log

CustomLog logs/access_log common

</VirtualHost>

<VirtualHost *:80>

ServerAdmin wgkgood@163.com

DocumentRoot "/data/webapps/www2"

ServerName www.wugk2.com

<Directory "/data/webapps/www2">

AllowOverride All

Options -Indexes FollowSymLinks

Order allow,deny

Allow from all

</Directory>

ErrorLog logs/error_log

CustomLog logs/access_log common

</VirtualHost>

而后在/usr/local/apache2/conf/httpd.conf 最末尾加入以下配置:

Include conf/extra/httpd-vhosts.conf

从新加载 apache 便可,/usr/local/apache2/bin/apachectl graceful

效果演示以下:

clip_image067

Apache 基于 IP 虚拟主机一样跟域名一直,在服务器配置多个 IP,而后把域名改为 IP 便可。

Ø Apache Rewrite 规则讲解

Rewrite URL 重定向就是实现 URL 的跳转和隐藏真实地址,能够把复杂的 URL 变成简洁直观的 URL,对 seo 优化有很大的帮助。以下几个简单的举例:把全部配置的域名都跳转到一个域名:

RewriteEngine on //启用 rewrite 引擎

RewriteCond %{HTTP_HOST} ^wugk1.com [NC] // 匹配以

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

RewriteRule ^/(.*)$ http://www.wugk1.com/$1[L]

//匹配上面条件,而后跳转到 http://www.wugk1.com

1) R 强制外部重定向。

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

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

4) P 强制使用代理转发。

5) L 代表当前规则是最后一条规则,中止分析之后规则的重写。

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

7) C 与下一条规则关联。

3.1. 7 构建 MySQL 服务器

MySQL 是一个开放源码的小型关联式数据库管理系统,开发者为

瑞典 MySQL AB 司, 目前属于 Oracle 司,MySQL 被普遍地应用在 Internet 的中小型网站中。因为其体积小、速度快、整体拥有成本低,尤为是开放源码这一特色,许多中小型网站为了下降网站整体拥有成本而选择了 MySQL 做为网站数据库

对应目前主流的 LAMP 架构来讲,Mysql 更是获得各位 IT 运维、DBA 的青睐,目前 mysql 已被 orcacle 收购,不过好消息是原来 mysql 创始人已独立出来本身从新开发了一个 MariaDB,并且使用的人数愈来愈多。并且 MariaDB 兼容 mysql 全部的功能和相关参数。

Mysql 经常使用的两大引擎有 MyISAM 和 innoDB,那他们有什么明显的区别呢,什么场合使用什么引擎呢?

MyISAM 类型的表强调的是性能,其执行数 度比 InnoDB 类型更快,但不提供事务支持,若是执行大量的 SELECT 操做,MyISAM 是更好的选择,支持表锁。

InnoDB 提供事务支持事务,外部键等高级 数据库功能,执行大量的 INSERT 或 UPDATE,出于性能方面的考虑,应该使用 InnoDB 表,支持行锁。

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

Yum 安装方法很简单,执行命令以下便可 : yum install –y

mysql-server mysql-devel mysql

源码安装 MySQL 方式:

cd /usr/src ; wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz;tar

xzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure

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

clip_image069

配置 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 --add mysqld chkconfig --level 345 mysqld on

cd /usr/local/mysql useradd mysql chown -R mysql.mysql /usr/local/mysql

/usr/local/mysql/bin/mysql_install_db --user=mysql chown -R mysql var

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

MySQL 平常操做命令:

create database test_db; 建立名为 test_db 数据库 use test_db; 进入 test_db 数据库 show tables; 查看数据库里有多少张表。

clip_image071

create table test01 (id varchar(20),name varchar(20));建立名为 test01 表,

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

insert into test01 values ("001","wugk1"); 向表中插入数据。 select * from test01; 查看 test01 表数据内容。

clip_image073

grant all privileges on test_db.* to test@localhost identified by

'123456'; grant all on test_db.* to test@localhost identified by

'123456'; grant select,insert,update,delete on *.* to test@”%” identified by

‘123456’;

给 mysql 数据库受权。

flush privileges;刷新权限 mysqldump –uroot –p123456 test_db >/tmp/test.db.sql ;MySQL 备

份或导出

mysql –uroot –p123456 test_db < /tmp/test.db.sql ;MySQL 导

mysqladmin –uroot –p123456 password newpassword ;修改 MySQL root 密码 drop database test_db ; 删除数据库 drop table test01 ; 删除表 delete from test01 ; 清空表内容 show variables like '%char%'; 查看数据库字符集

修改 Mysql 字符集为 UTF-8 的方法:在/etc/my.cnf 对应以下配置段加入相应命令。

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

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

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

而后重启 MySQL 服务便可。

3.1. 8 LAMP 架构网站搭建

Linux+Apache+Mysql/MariaDB+Perl/PHP/Python 一组经常使用来搭建

态网站或者服务器的开源软件,自己都是各自独立的程序,可是由于常被放在一块儿使用,拥有了愈来愈高的兼容度,共同组成了一个强大的 Web 应用程序平台。

随着开源潮流的蓬勃发展,开放源代码的 LAMP 已经与 J2EE .Net 商业软件形成三足鼎立之势,而且该软件开发的项目在软件方面的投资成本较低,所以受到整个 IT 的关注。

目前 LAMP 架构是大多数中小企业最青睐的 PHP 架构选择,也是众多Linux SA喜欢选择的一套架构。那接下来咱们就实战来操做一下,若是来搭建这样一套架构,固然能够使用 yum 方法,安装命令很简单,一条命令搞定全部。

yum install httpd httpd-devel mysql-server mysql-devel php php-devel php-mysql –y

这一条命令 LAMP 环境便可安装成功,只须要重启 apache、mysql 服务便可。

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

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

Ø 源码安装 LAMP 之 Apache

yum install apr-devel apr-util-devel –y;

cd /usr/src ; wget

http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.27.tar.gz;tar xzf

httpd-2.2.27.tar.gz ;cd httpd-2.2.27 ;./configure

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

&&make install

Ø 源码安装 LAMP 之 MySQL

cd /usr/src ;wget

http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz;tar

xzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure

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

clip_image074

配置 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 --add mysqld chkconfig --level 345 mysqld on

cd /usr/local/mysql useradd mysql chown -R mysql.mysql /usr/local/mysql

/usr/local/mysql/bin/mysql_install_db --user=mysql chown -R mysql var

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

Ø 源码安装 LAMP 之 PHP

cd /usr/src ;wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2;tar jxf php-5.3.28.tar.bz2 ;cd php-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/

clip_image076

Ø 源码安装 Apache+PHP 整合整合 apache+php 环境,修改 httpd.conf 配置文件,而后加入以下语句:

LoadModule php5_module modules/libphp5.so (默认已存在)

AddType application/x-httpd-php .php

DirectoryIndex index.php index.html (把 index.php 加入 index.html 之

前) 而后在/usr/local/apache/htdocs 目录下建立 index.php 测试页面,执行

以下命令:

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

<?php phpinfo();

?> EOF

从新启动 apache 服务,经过 IP 访问界面以下图,即表明 LAMP 环境搭建成功。

clip_image078

Ø 源码安装 DISCUZ 论坛下载 discuz 源码包文件,而后解压:

cd /usr/src ;wget http://download.comsenz.com/DiscuzX/3.1/Discuz_X3.1_SC_UTF8.zip

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

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

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

777 -R data/ uc_server/ config/ uc_client/

而后访问 IP 安装 discuz 论坛,以下图,选择“我赞成”

clip_image079

进入以下界面,数据库安装,若是不存在则须要新建数据库并受权。

clip_image080

数据库建立及受权命令以下:

create database discuz charset=utf8; grant all on discuz.* to root@'localhost' identified by "123456"; clip_image082 点击下一步,直至安装完成,进入等待已久的论坛画面:

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

3.1. 9 Cacti 监控平台搭建

做为一名 Linux SA,平常最重要的就是保证网站正常稳定的运行,

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

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

Cacti 是用 php 语言实现的一个软件,它的主要功能是用 snmp 服务获取数据,而后用 rrdtool 存和更新数据,当用户须要查看数据的时候用 rrdtool 成图表呈现给用户。所以,snmp 和 rrdtool cacti 的关键。

Snmp 关系着数据的收集,rrdtool 关系着数据存储和图表的生成。 snmp 抓到数据不是存储在 mysql 中,而是存在 rrdtool 成的 rrd 文件中(在 cacti 根目录的 rra 文件夹下,通常以 rra 为后缀名称)。简

单原理图以下:

clip_image086

1) Cacti 服务器端安装

官网下载 cacti 相关软件,一共须要三个软件,下载地址分别以下:

http://www.cacti.net/downloads/cacti-0.8.8a.tar.gzhttp://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.5.tar.gzhttp://www.cacti.net/downloads/spine/cacti-spine-0.8.8a.tar.gz

2) 安装 LAMP 系统环境这里采用 yum 安装方式,安装命令:

yum install httpd mysql mysql-server php php-mysql php-json php-pdo -y

3) 安装 rrdtool 采集工具

安装 rrdtool 以前须要安装相应的 lib 库,以下安装:

yum install cairo-devel libxml2-devel pango pango-devel –y tar xzf rrdtool-1.4.5.tar.gz ;cd rrdtool-1.4.5 ; ./configure --prefix=/usr/ local/rrdtool/ make &&make install ;ln -s /usr/local/rrdtool/bin/* /usr/local/bin/

4) 安装 SNMP 服务

yum install net-snmp net-snmp-utils –y

5) 安装 cacti 主程序

tar xzf cacti-0.8.8a.tar.gz && mv cacti-0.8.8a /var/www/html/cacti/

6) 建立 cacti 数据库 mysql -uroot –p 输入你的密码进入数据库,而后建立数据库:

create database cacti;建立数据库 grant all on cacti.* to cacti@'localhost' identified by "123456";建立用户

并受权

flush privileges; 刷新权限

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

mysql -ucacti -p123456 cacti </var/www/html/cacti/cacti.sql

配置完 mysql 后,咱们须要设置 cacti rra、log 目录的权限,这里设置为 777:

chmod -R 777 /var/www/html/cacti/rra/ chmod -R 777 /var/www/html/cacti/log/

7) 修改 cacti 全局配置文件

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

clip_image088

8) 添加 Rrdtool 抓图任务计划

*/5 * * * * /usr/bin/php

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

9) Cacti 安装完毕,测试访问经过 http://ip/cacti/访问出现以下界面,点击 NEXT 下一步。

clip_image090

默认一直点击下一步:

clip_image092

进入登陆界面,第一次须要修改密码:

clip_image094 进入 Cacti 配置管理界面

clip_image096

点击 device,能够添加设备,默承认以看到 127.0.0.1 这台服务器。右上角 Add 能够增长设备。

clip_image098 点击 localhost 能够看到具体的设置,包括采用的 snmp 协议版本,监控的名称等:

clip_image100 若是出现 snmp error,检查 snmp 服务是否已启动,或者是否有权限。

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

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

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

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

3.1. 10 Nagios 监控平台搭建

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

Linux 和 Unix 的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

Nagios 和 cacti 有什么区别呢?简单的来讲 cacti 主要监控流量,服务器状态页面展现;nagios 主要监控服务,邮件及短信报警灯,固然也有简单的流量监控界面,两者综合使用效果更好。(附 Nagios 工做简单逻辑图)

Nagios 监控客户端须要借助插件及 NRPE 软件来实现,NRPE 做为中间的代理程序,接收 Nagios 服务器端发来的请求,另外一端在远程主机上指定的相关的监控信息。

clip_image104

1) Nagios 服务端安装

一样安装 nagios 服务须要安装 LAMP 环境,这里省略,能够参考以前的 cacti PHP 环境安装方法:官网下载 nagios 相应版本和插件:

wget http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.2.1/nag ios-3.2.1.tar.gz/downloadhttp://down1.chinaunix.net/distfiles/nagios-plugins-1.4.14.tar.gz/usr/sbin/useradd nagios tar zxvf nagios-3.2.1.tar.gz cd nagios-3.2.1

./configure --prefix=/usr/local/nagios --with-command-group=nagios make all

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

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

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

/usr/local/nagios/etc

make install-commandmode //来配置目录权限 make install-webconf // 配置 nagios 跟 apache 整合

2) 安装 Nagios-plugins

tar zxvf nagios-plugins-1.4.14.tar.gz cd nagios-plugins-1.4.14

./configure --prefix=/usr/local/nagios --with-nagios-user=nagios

--with-nagios-group=nagios make && make install

3) nagios 访问控制设置

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

输入两次密码便可,登陆页面的时候会用到这个密码.

4) Nagios 测试访问

重启 nagios ,/etc/init.d/nagios restart ;/etc/init.d/httpd restart ; http://localhost/nagios/ 以下图:

clip_image106

点击左侧的 Hosts 能够看到右侧默认 localhost 主机的监控,UP 表示主机目前运行正常:

clip_image108

点击左侧的 Services 能够看到右侧默认 localhost 监控的各个服务的状态,绿色 OK 表示正常:

clip_image110

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

种的功能以下:

bin

Nagios 可执行程序所在目录

etc

Nagios 配置文件所在目录

sbin

Nagios CGI 文件所在目录,也就是执行外部命令所需文件所在的目录

share

Nagios 网页文件所在的目录

libexec

Nagios 外部插件所在目录

var

Nagios 日志文件、lock 等文件所在的目录

var/archives

Nagios 日志自动归档目录

var/rw

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

这里先来了解 etc/objects 目录主要包括监控主机的配置、模板、监控时间段等配置文件。

clip_image112

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

cp localhost.cfg 192.168.149.128.cfg

把默认配置文件里面的 locahost、127.0.0.一、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 ; s#linux-servers#192.168.149.128#g '

192.168.149.128.cfg

在 nagios.cfg 36 行 后 加 入 cfg_file=/usr/local/nagios/etc/objects/192.168.149.128.cfg sed -i '36a cfg_file=/usr/local/nagios/etc/objects/192.168.149.128.cfg'

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

最 后 执 行 :/usr/local/nagios/bin/nagios -v

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

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

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

define service{ use local-service host_name 192.168.149.128 service_description Swap Usage check_command check_swap!20!10 }

clip_image114

这里注意* 若是没有配置 check_nrpe 监控,默认不能监控客户端例如 swap、disk、CPU、process 等状态,须要在配置文件里删除或者注释掉。

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

clip_image116

6) Nagios 客户端插件安装

Nagios 客户端安装须要安装两个软件,nagios-plugins-1.4.15.tar.gz 和 nrpe-2.13.tar.gz,安装方法以下:

useradd nagios ;tar -xzf nagios-plugins-1.4.15.tar.gz &&cd nagios-plugins-1.4.15 &&./configure – prefix=/usr/local/nagios

&&make &&make install tar -xzf nrpe-2.13.tar.gz && cd nrpe-2.13 &&./configure --enable-ssl --with-ssl-lib &&make all && make install-plugin && make install-daemon && make install-daemon-config chown -R nagios:nagios /usr/local/nagios/ ;cd .. ;cp nrpe.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 修改默认配置段的内容以下,

去掉#号,作相应修改。

-c 10command[check_users]=/usr/local/nagios/libexec/check_users -w 5

15,10,5 command[check_load]=/usr/local/nagios/libexec/check-c 30,25,20 _load -w

10 -p /dev/sda2command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20 -c

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

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

8) Nagios 服务器 Nrpe 配置

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

写 command.cfg 末尾便可:

define command{ command_name check_nrpe

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

}

9) Nagios 监控端客户机配置在 192.168.149.128.cfg 加入以下配置段,引用客户端 nrpe.cfg 里面配置的 check_load 命令,命令通常格式为:check_nrpe!command

define service{ use local-service host_name 192.168.149.128 service_description Current Load check_command check_nrpe!check_load

}

clip_image118

其余同理,添加的方法同样。只要在客户端 nrpe.cfg 里面添加的监控命令,均可以在服务端引用。

10) Nagios 监控端 HTTP 关键词

在真实的线上环境中,若是要监控 HTTP、web、tomcat 某个 URL 关键词,监控网站关键词是否被篡改,若是来实现呢? 这里能够使用默认监控命令 check_http 命令+相关的参数来实现,以下:在 command.cfg 添加以下关键词监控命令:check_http_word,参数解析:-I 指定 IP 或者主机名,-u 指定 URL,-p 指定端口,-s 指定关键词。

define command{ command_name check_http_word

command_line $USER1$/check_http -I

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

}

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

下: clip_image120 也能够在服务器端命令行执行以下命令来作测试,例如监控页面不存在 ATM 关键词,但 82 端口 web 服务能够访问,依然会发送报警。

/usr/local/nagios/libexec/check_http -I 192.168.149.129 -u /index.html

-p 82 -s "ATM"

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

CRITICAL 紧急。

11) Nagios 邮件及短信报警

使用 nagios 报警,之前能够用飞信发送报警,可是自从飞信更改接口后,就不方便了,那咱们要发短信报警怎么办呢,咱们能够 139 邮箱,机制是 nagios 给 139 邮箱发送信息,而后信息会自动发到咱们绑定的手机。提早在 139 上绑定好手机便可。除此以外还能够使用短信猫(收费)设备来发送报警。

默认 command.cfg 里面已经配置好了邮件报警设置,能够使用默认的配置,使用系统默认的 mail 发送邮件;还能够本身定义发送的内容格式及发送的邮件 smtp 服务器端软件。这里使用默认的配置文件,要能收到短信报警,除了在 139.com 界面绑定 139 邮箱以外,还须要在 nagios 服务器端配置文件修改邮件收件人以下:

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

clip_image124

一样也能够使用 sed 命令修改:cd /usr/local/nagios/etc/objects/ ; sed -i 's#nagios@localhost#wgkgood@139.com#g' contacts.cfg 如上配置完毕后,重启 nagios 服务,能够测试关闭某个服务,过一会就会收到 nagios 发来的报警邮件。

自此,Nagios 相关的配置就到此为止,固然有兴趣的童鞋还能够进一步研究,例如 nagios 跟 cacti 如何整合,nagios 如何优化等等。

3.1. 11 Kickstart 自动化安装平台

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

Linux 系统,而且要求 Linux 版本要一致,方便之后的维护和管理,每次人工安装 linux 系统会浪费掉更多时间,若是咱们有办法能节省一次一次的时间岂不更好呢?大中型互联网公司一次采购服务器上百台,若是采用人工手动一台一台的安装,一我的得搞坏 N 张光盘,得多少个加班加点才能完成这项”艰巨”的任务呢,咱们能够看到全人工来完成这样的工做太浪费人力了,有没有自动化安装平台呢,经过一台已存在的系统而后克隆或者复制到新的服务器呢。Kickstart 能够绝不费力的完成这项工做。

PXE(preboot execute environment,预启动执行环境)是由 Intel 公司

开发的最新技术,工做于 Client/Server 的网络模式,支持工做站通过网络从远端服务器下载映像,并由此支持经过网络启动操做系统,

启动过程当中,终端要求服务器分配 IP 址,再用 TFTPtrivial file transfer protocol)协议下载一个启动软件包到本机内存中执行。

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

Kickstart+DHCP+NFS+TFTP+PXE,从架构能够看出,大体须要安装的服务,例如 dhcp、tftp、nfs、kickstart/pxe 等。

1) DHCP、TFTP 安装

yum install -y dhcp* tftp*

首先配置 tftp 服务:

vi /etc/xinetd.d/tftp service tftp

{

disable = no socket_type = dgram protocol = udp

wait = yes user = root server = /usr/sbin/in.tftpd server_args = -u nobody -s /tftpboot per_source = 11 cps = 100 2 flags = IPv4

}

只须要把 disable = yes 改为 disable = no 便可。

2) TFTP+PXE 配置

要实现远程安装系统,首先须要在 TFTPBOOT 目录指定相关 PXE 内核模块及相关参数。配置步骤以下:

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

#若是系统是 5.x,默认 tftpboot 目录已经自动建立到/根目录下

#若是系统是 6.x,默认 tftpboot 目录在/var/lib/下,因此 centos6.x

须要作软连接到/根目录下。

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

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

mkdir -p pxelinux.cfg &&cp /mnt/isolinux/isolinux.cfg pxelinux. cfg/default

拷贝 isolinux.cfg 配置文件重命名,系统安装的时候会根据这个文件的配置启动相应的选项。

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

default linux prompt 1 timeout 10 display boot.msg F1 boot.msg

F2 options.msg

F3 general.msg

F4 param.msg F5 rescue.msg label centos5.8 kernel vmlinuz append ks=nfs:192.168.0.79:/centosinstall/ks.cfg ksdevice=eth0 initrd=initrd.img label text kernel vmlinuz append initrd=initrd.img text label ks kernel vmlinuz append ks initrd=initrd.img label local

localboot 1 label memtest86 kernel memtest append – 解析:192.168.0.79 是 kickstart 服务器,/centosinstall 是 nfs 共享 linux 镜像的目录,也是 linux 存放安装文件的路径,ks.cfg 是 kickstart 主配置文件;设置 timeout 10 /*超时时间为 10S */;ksdevice=etho 代

表当咱们有多块网卡的时候,要实现自动化须要设置从 eth0 安装。 TFTP 配置完毕,因为是 TFTP 是非独立服务,须要依赖 xinetd 服务来启动,启动命令为:

chkconfig tftp --level 35 on && service xinetd restart

3) NFS+KICKSTART 配置

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

用 NFS 或者 httpd 把镜像文件共享出来。

mkdir -p /centosinstall nohup cp -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 目录下,赋权限为 chmod 777 ks.cfg

以下我这里采用配置文件内容以下:vi ks.cfg

# Kickstart file automatically generated by anaconda.

install text nfs --server=192.168.0.79 --dir=/centosinstall key --skip lang zh_CN.UTF-8 keyboard us network --device eth0 --bootproto=dhcp --noipv6 rootpw 123456 firewall --disabled authconfig --enableshadow --enablemd5 selinux --disabled timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda --append="rhgb quiet" clearpart --all --initlabel part /boot --fstype ext3 --size=200 part swap --size=4000

part / --fstype ext3 --size=80000 part /data --fstype ext3 --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/sdb mklabel gpt

%end

为了实现 kickstart 安装完系统后,自动初始化系统等等工做,咱们能够在系统安装完后,自动执行定制的脚本,须要在 ks.cfg 末尾加入以下配置:

%post mount -t nfs 192.168.0.79:/centos/init /mnt cd /mnt/ ;/bin/sh auto_init.sh

%end

4) DHCP 配置及测试 Pxe+kickstart自动安装系统,须要用到DHCP分配的客户端的IP地址,这里直接上 dhcpd.conf 配置文件:

ddns-update-style interim; ignore client-updates; next-server 192.168.0.79; filename "pxelinux.0"; allow booting; allow bootp; subnet 192.168.0.0 netmask 255.255.255.0 {

# --- default gateway option routers 192.168.0.1; option subnet-mask 255.255.252.0; range dynamic-bootp 192.168.0.100 192.168.0.200; host ns { hardware ethernet 00:1a:a0:2b:38:81; fixed-address 192.168.0.101;}

}

最后重启全部服务,并关闭 iptables 和 selinux,而后找一台新服务器,接入网线与 kickstart 服务器在一个交换机或经过中继能获取到 IP 的网络便可。

service xinetd restart service nfs restart service dhcpd restart

注*KICKSTART 全部配置就此告一段落,真实环境须要注意,新服务器跟 kickstart 最后独立在一个网络,不要跟办公环境或者服务器机房网络混在一块儿,若是别的机器以网卡就会把它的系统重装成 Linux 系统。

4. Linux 编程篇

4.1 Linux Shell 编程
4.1. 1 Shell 编程简介

shell 是操做系统的最外层。shell 合并编程语言以控制进程和文件,

以及启动和控制其它程序。shell 经过提示您输入,向操做系统解释该输入,而后处理来自操做系统的任何结果输出来管理您与操做系统之间的交互。

Shell 是用户与 Linux 操做系统之间沟通的桥梁。用户能够输入命令执行,又能够利用 Shell 脚本编程去运行。随着 Linux 企业应用愈来愈多,维护 Linux 平常工做频繁,因此若是单靠手工去敲打命令是很是困难的,因此学会熟练使用 SHELL 编程是每一个 Linux SA 必备的功课。

Linux Shell 种类很是多,常见的有:Bourne Shell(/usr/bin/sh 或

/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell

(/usr/bin/ksh)、Shell for Root(/sbin/sh)等。不一样的 Shell 语言的语法有所不一样,因此不能交换使用。

最经常使用的 shell 是 Bash,也就是 Bourne Again Shell,因为易用和免费,Bash 在平常工做中被普遍使用,也是大多数 Linux 系统默认的 Shell。接下来咱们来写一个简单的 shell 脚本。(shell 脚本通常文件名以.sh 结尾,同时文件第一行定义该脚本为 shell 脚本)

vi first_shell.sh #!/bin/bash

#This is my First shell echo “Hello World !”

这就是咱们的第一个脚本,是否是很简单呢,注解以下:

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

#This is my First shell //这里的#号属于注解,没有任何的意义,SHELL

不会解析它。

echo “Hello World !” //shell 脚本主命令,咱们执行这个脚本讲看

到: Hello World ! 信息。

脚本编写完毕,如何来执行呢,首先执行 shell 脚本须要执行权限,赋予执行权限:

chmod o+x first_shell.sh 而后./first_shell.sh 执行便可;也能够直接使用命令执行: /bin/sh first_shell.sh,显示效果同样。

4.1. 2 Shell 变量设置

Shell 编程语言是非类型的解释型语言,不像 C++/JAVA 语言编程时须要事先声明变量,SHELL 给一个变量赋值,实际上就是定义了变量, 在 Linux 支持的全部 shell 中,均可以用赋值符号(=)为变量赋值。

SHELL 变量可分为两类:局部变量和环境变量。局部变量只在建立它们的 shell 脚本中使用。而环境变量则能够在建立它们的 shell 及其派生出来的任意子进程中使用。有些变量是用户建立的,其余的则是专用 shell 变量。

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

面是变量的值。

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

#!/bin/bash

#Author wugk 2014-06-10

A=123

echo “Printf variables equal is $A”

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

Printf variables equal is 123

简单的理解变量,至关于定义一个别名-名称,引用的时候加上$符号就能够了。

例如定义变量 name=wuguangke

执行 echo $name 将会显示 wuguangke

SHELL 常见的系统变量解析:

$0 当前程序的名称

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

$* 当前程序的全部参数(不包括程序自己)

$# 当前程序的参数个数(不包括程序自己)

$? 命令或程序执行完后的状态,通常返回 0 表示执行成功。

$UID 当前用户的 ID

$PWD 当前所在的目录

4.1. 3 Shell 流程控制语句

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

语句用的很是多,把这些学好,对提高脚本的功力有很是大的帮助。

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

Ø If 条件判断语句

If (表达式) #if ( Variable in Array )

语句 1

else

语句 2

fi

案例一,测试数字大小

#!/bin/sh

NUM=100

if (( $NUM > 4 )) ;then echo “this num is $NUM greater 4 !”

fi 案例二,测试目录是否存在,不存在则新建(注意,中括号之间必需要空格)

#!/bin/sh

#judge dir exist if [ ! -d /data/20140515 ];then mkdir -p /data/20140515 else echo “This DIR is exist,Please exit …..”

fi

逻辑运算符解析:

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

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

-eq 等于 应用于:整型比较

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

-lt 小于 应用于:整型比较

-gt 大于 应用于:整型比较

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

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

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

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

-z 空字符串

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

#!/bin/sh scores=80; if [[ $scores -gt 85 ]]; then echo "very good!"; elif [[ $scores -gt 75 ]]; then echo "good!"; elif [[ $scores -gt 60 ]]; then echo "pass!"; else echo "no pass!";

fi;

Ø 循环语句 for

For 变量 in 字符串

do

语句 1

done

案例一,打印 seq 多个数 #!/bin/sh for i in `seq 15`

do

echo “NUM is $i” done

案例二,找到相关 log,而后批量打包

#!/bin/sh for i in `find /var/log -name “*.log”`

do

tar –czf 2014log.tgz $i

done

Ø 循环语句 while while 条件语句

do

语句 1

done

案例一,while 条件判断数字

#!/bin/sh i=1; while [[ $i -lt 10 ]];do echo $i; ((i++)); done;

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

#!/bin/sh while read line do echo $line; done < /etc/hosts

Ø Until 循环语句

until 条件

do action done 直到知足条件,才退出。不然执行 action。

案例一,条件判断数字

#!/bin/sh a=10;

until [[ $a -lt 0 ]];do echo $a;

((a--));

done;

Ø Case 选择语句

case $arg in pattern1)

语句 1

;; pattern2)

语句 2

;;

*)

语句 3

;; esac 案例一,建立选择参数脚本

#!/bin/sh case $1 in

monitor_log) monitor_log ;; archive_log) archive_log

;;

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

;; esac

Ø select 选择语句

#!/bin/sh

PS3="What you like most of the open source system?" select i in CentOS RedHat Ubuntu do

echo "Your Select System: "$i

done

4.1. 4 Shell 脚本案例

a) 自动删除 test.txt 文件脚本脚本的功能实现从/root/目录cp拷贝test.txt到/tmp目录,而且在/tmp 目录建立一个目录 abc,而且删除原/root/下 test.txt。

首先命名脚本名称为 auto_cp.sh(名称能够本身定义),内容以下:

#!/bin/bash

#This is First shell for auto cp Files

#定义文件和目录变量

FILES=/root/test.txt DIR=/tmp cp $FILES $DIR cd $DIR ; mkdir –p abc rm -rf $FILES

echo “The Shell Scripts exec successfully !”

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

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

#!/bin/sh

#auto backup mysql

#wugk 2012-12-12

#Define PATH 定义变量

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

MYSQLDB=webapp

MYSQLPW=backup

MYSQLUSR=backup

#must use root user run scripts 必须使用 root 用户运行,$UID 为系

统变量

if

[ $UID -ne 0 ];then echo This script must use the root user ! ! !

sleep 2 exit 0

fi

#Define DIR and mkdir DIR 判断目录是否存在,不存在则新建

if

[ ! -d $BAKDIR ];then mkdir -p $BAKDIR else echo This is $BAKDIR exists....

fi

#Use mysqldump backup mysql 使用 mysqldump 备份数据库

/usr/bin/mysqldump -u$MYSQLUSR -p$MYSQLPW -d

$MYSQLDB >$BAKDIR/webapp_db.sql

echo "The mysql backup successfully "

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

#!/bin/sh

#auto tar czf shell to Files

#Author wugk 2014-05-15

SRC_DIR=/opt/

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

If

[ ! –d $DES_DIR ];then Mkdir –p $DES_DIR

fi

for i in `find $SRC_DIR -name “*.log”` do tar czf $i.tgz $i done echo “The scripts exec end, Files tar successfully !”

d) 自动拒绝恶意 IP 脚本

#!/bin/sh

#auto drop ssh failed IP address

#wugk 2013-1-2

#定义变量

SEC_FILE=/var/log/secure

#以下为截取 secure 文件恶意 ip 远程登陆 22 端口,大于等于 4 次就写入防火墙,禁止之后再登陆服务器的 22 端口

IP_ADDR=`tail -n 1000 /var/log/secure |grep "Failed password"| 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 <<EOF

++++++++++++++welcome to use ssh login drop failed ip+++++++++++++++++

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

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

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

+ EOF

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

for ((j=0;j<=4;j++)) ;do echo -n "----------";sleep 1 ;done echo for i in `echo $IP_ADDR`

do

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

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

if

[ $? -ne 0 ];then

#判断 iptables 配置文件里面是否存在已拒绝的 ip,如何不存在就再也不添加相应条目

sed -i "/lo/a -A INPUT -s $i -m state --state NEW -m tcp -p tcp

--dport 22 -j DROP" $IPTABLE_CONF else

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

echo "This is $i is exist in iptables,please exit ......"

fi

done

#最后重启 iptables 生效

/etc/init.d/iptables restart

4.1. 5 Shell 数组编程

数组,就是相同数据类型的元素按必定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,而后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。 clip_image126 今天这里咱们来探讨一维数组的定义、统计、引用和删除等操做。首先来定义一个一维数组:

A=( test1 test2 test3 ) ,定义数组通常以括号的方式来定义,数组的值能够随机定义。如何来引用呢?

echo ${A[0]},表明引用第一个数组变量,结果会显示 test1,数组引用从 0 开始,表明第一个数组,依次类推。

echo ${A[1]},表明引用第二个数组变量,结果会显示 test2,数组引用也是从 0 开始计算的。

如何显示该数组全部参数呢?echo ${A[@]} 将显示全部参数 test1 test2 test3 。

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

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

${A[@]/test2/test5}

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

${A[@]}查看效果。

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

#!/bin/sh

#Auto Make KVM Virtualization #Auto config bond scripts eth_bond()

{

NETWORK=(

HWADDR=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk '{print $1}'`

IPADDR=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk '{print $2}'`

NETMASK=`ifconfig eth0 |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<<EOF DEVICE=bond0

BOOTPROTO=static

${NETWORK[1]}

${NETWORK[2]}

${NETWORK[3]}

ONBOOT=yes

TYPE=Ethernet

NM_CONTROLLED=no

EOF

如上脚本为定义三个数组变量,而后分别来引用,这样让脚本可读性更强,更整洁。关于数组就简单的介绍到这里。

5. Linux 深刻篇

5. 1 构建 Nginx WEB 服务器

nginx [engine x]Igor Sysoev写的一个HTTP和反向代理服务器,另外它也能够做为邮件代理服务器。 它已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括 YandexMail.RuVKontakte以及 Rambler

据Netcraft统计,在2012年8月份,世界上最繁忙的网站中有11.48% 使用 Nginx 做为其服务器或者代理服务器。目前互联网主流公司 360、百度、新浪、腾讯、阿里等都在使用 nginx 做为本身的 web 服务器。

Nginx 由内核和模块组成,其中,内核的设计很是微小和简洁,完成的工做也很是简单,仅仅经过查找配置文件将客户端请求映射到一个 location block(location 是 Nginx 配置中的一个指令,用于 URL 匹配),而在这个 location 中所配置的每一个指令将会启动不一样的模块去完成相应的工做。

Nginx 相对于 Apache 优势:

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

2) 反向代理性能很是好。(可用于负载均衡)

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

4) 功能较 Apache 少(经常使用功能均有)

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

5.1. 1 Nginx WEB 安装

首先须要安装 pcre 库,而后再安装 Nginx:

#安装 pcre 支持 rewrite 库,也能够安装源码,注*安装源码时,指定 pcre 路径为解压

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

(make[1]: *** [/usr/local/pcre/Makefile] Error 127 错误) yum install pcre-devel pcre -y

#下载 Nginx 源码包

cd /usr/src ;wget -c http://nginx.org/download/nginx-1.4.2.tar.gz

#解压 Nginx 源码包

tar -xzf nginx-1.4.2.tar.gz

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

cd nginx-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 www ;./configure --user=www --group=www

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

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

make

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

make install

#自此 Nginx 安装完毕

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

OK 即正确。

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@localhost ~]#

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

已启动:

[root@localhost ~]# ps -ef |grep nginx nobody 5381 30285 0 May16 ? 00:04:31 nginx: worker process root 30285 1 0 2014 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx

root 32260 32220 0 12:34 pts/0 00:00:00 grep nginx

[root@localhost ~]#

5.1. 2 Nginx 虚拟主机配置

在真实的服务器环境,为了充分利用服务器资源,一台 nginx web 服务器同时会配置 N 个虚拟域名主机,即多个域名对于一样一个 80 端口。而后服务器 IP 数量不少,也能够配置基于多个 IP 对应同一个端口。

vi 修改 nginx.conf server 段配置内容以下:

#virtual hosts config 2014/5/18 server { listen 80; server_name www.a.com;

#access_log logs/host.access.log main;

location / { root html/a; index index.html index.htm;

}

server { listen 80; server_name www.b.com;

#access_log logs/host.access.log main;

location / { root html/b; index index.html index.htm;

}

建立两个不一样的目录 mkdir –p /usr/local/nginx/html/{a,b},而后分

别在两个目录建立两个不一样的 index.html 网站页面便可。经过客户端配置 hosts 指向两个域名,而后在 IE 浏览器访问测试效果。

5.1. 3 Nginx 性能优化

随着访问量的不断增长,须要对 Nginx 和内核作相应的优化来知足高并发用户的访问,那下面在单台 Nginx 服务器来优化相关参数。

1) Nginx.conf 配置优化:

worker_processes 8;

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

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000

00100000 01000000 10000000;

为每一个进程分配 cpu,上例中将 8 个进程分配到 8 个 cpu,固然能够写多个,或者将一

个进程分配到多个 cpu。

worker_rlimit_nofile 102400;

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

开文件数(ulimit -n)与 nginx 进程数相除,可是 nginx 分配请求并非那么均匀

,因此最好与 ulimit -n 的值保持一致。

use epoll;

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

poll,它能显著提升程序在大量并发链接中只有少许活跃的状况下的系统 CPU 利用

率。

worker_connections 102400;

每一个进程容许的最多链接数,理论上每台 nginx 服务器的最大链接数为

worker_processes*worker_connections。

keepalive_timeout 60;

keepalive 超时时间,客户端到服务器端的链接持续有效时间,当出现对服务器的后

继请求时,keepalive-timeout 功能可避免创建或从新创建链接。

client_header_buffer_size 4k;

客户端请求头部的缓冲区大小,这个能够根据你的系统分页大小来设置,通常一个请求的头部大小不会超过 1k,不过因为通常系统分页都要大于 1k,因此这里设置为

分页大小。分页大小能够用命令 getconf PAGESIZE 取得。

open_file_cache max=102400 inactive=20s;

这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指通过多长时间文件没被请求后删除缓存。

open_file_cache_valid 30s;

这个是指多长时间检查一次缓存的有效信息。

open_file_cache_min_uses 1;

open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,若是超过这个数字,文件描述符一直是在缓存中打开的,如上例,若是有一个文

件在 inactive

时间内一次没被使用,它将被移除。

2) Linux 内核参数优化:

net.ipv4.tcp_max_tw_buckets = 10000

timewait 的数量,默认是 180000。

net.ipv4.ip_local_port_range = 1024 65000

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

net.ipv4.tcp_tw_recycle = 1

启用 timewait 快速回收。

net.ipv4.tcp_tw_reuse = 1

开启重用。容许将 TIME-WAIT sockets 从新用于新的 TCP 链接。

net.ipv4.tcp_syncookies = 1

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

5.1. 4 Nginx 参数深刻理解

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

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

1) 轮询(默认 rr)

每一个请求按时间顺序逐一分配到后端不一样的服务器,若是后端某台服务器 down 掉,自动剔除,待恢复自动添加上。

2) Weight 权重

指定轮询权重,权重越高,处理的请求就越多,weight 和访问比率成正比,用于后端服务器性能不均的状况。

3) ip_hash

每一个请求根据访问的 IP 的 hash 结果分配,这样每一个访客固定访问一个后端服务器,能够解决 session 的问题,通常用于登陆会话。

4) fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5) url_hash(第三方) upstream 的 fail_timeout 和 max_fails 参数是用来判断负载均衡 upstream 中的某个 server 是否失效。

在 fail_timeout 的时间内,nignx 与 upstream 中某个 server 的链接尝试失败了 max_fails 次,则 nginx 会认为该 server 已经失效。在接下来的 fail_timeout 时间内,nginx 再也不将请求分发给失效的 server。

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

upstream tdt_app {

server 10.10.1.11:8080 weight=1 max_fails=2

fail_timeout=30s;

server 10.10.1.12:8080 weight=1 max_fails=2

fail_timeout=30s;

}

Tdt_app 均衡两台后端 JAVA 服务,在 30 秒内 nginx 会与后端的某个 server 通讯检测,若是检测链接失败 2 次,则 Nginx 会认为该 server 已经失效,而后踢出转发列表,而后在接下来的 30s 内,nginx 再也不讲请求转发给失效的 server。

另外,fail_timeout 设置的时间对响应时间没影响,这个响应时间

是用 proxy_connect_timeout 和 proxy_read_timeout 来控制的。 proxy_connect_timeout : Nginx 与后端服务器链接的超时时间,发起握手等候响应超时时间。

proxy_read_timeout:链接成功后_等候后端服务器响应时间,其实已经进入后端的排队之中等候处理(也能够说是后端服务器处理请求的时间)。

proxy_send_timeout :后端服务器数据回传时间,在规定时间以内后端服务器必须传完全部的数据。

keepalive_timout:一个http产生的tcp链接在传送完最后一个响应后,还须要等待多少秒后,才关闭这个链接。

5.1. 5 Nginx Rewrite 规则

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 地址不变。

a) 例如用户访问 www.test.com想直接跳转到网站下面的某个页面,

www.test.com/new.index.html 何来实现呢?

咱们能够使用 Nginx Rewrite 来实现这个需求,具体以下:在 server 中加入以下语句便可:

rewrite ^/$ http://www.wugk.com/index.html permanent;

*表明前面 0 或更多个字符

+表明前面 1 或更多个字符

?表明前面 0 或 1 个字符

^表明字符串的开始位置

$表明字符串结束的位置

。为通配符,表明任何字符

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

server

{

listen 80;

server_name www.wugk.com wugk.com; if ($host != ‘www.wugk.com’ ) { rewrite ^/(.*)$ http://www.wugk.com/$1permanent;

}

更多深刻的 rewrite 能够继续学习。

5. 2 构建 Rsync 同步服务器

Rsync 是 Unix/Linux 下的一款应用软件,利用它能够使多台服务器数据保持同步一致性,第一次同步时 rsync 会复制所有内容,但在下一次只传输修改过的文件。

Rsync 在传输数据的过程当中能够实行压缩及解压缩操做,所以能够使用更少的带宽。能够很容易作到保持原来文件的权限、时间、软硬连接等。

5.2. 1 Rsync 服务端配置

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

A 是源服务器,B、C 为客户端服务器,因需求,B、C 服务器须要从 A 某个同步某个目录到本地。正式安装,官网下载 rsync 稳定版本,而后进行安装编译。

cd /usr/src ;wget

http://rsync.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gztar xzf rsync-3.0.7.tar.gz && cd rsync-3.0.7 && ./configure -- prefix=/usr/local/rsync &&make &&make install

安装完毕,配置 rsync 配置文件,默认/etc/不存在 rsyncd.conf 配置文件,须要手动建立,配置内容为以下:cat rsyncd.conf

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

uid = nobody gid = nobody use chroot = no max connections = 30 pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log transfer logging = yes log format = %t %a %m %f %b

syslog facility = local3 timeout = 300

[www]

read only = yes path = /usr/local/webapps comment = www

auth users =test secrets file = /etc/rsync.pas hosts allow = 192.168.0.11,192.168.0.12

[web] read only = yes path = /data/www/web comment = web

auth users =test secrets file = /etc/rsync.pas hosts allow = 192.168.1.11,192.168.0.0/24

Rsync 配置参数说明:

[www] #要同步的模块名

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

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

read only = no # no 客户端可上传文件,yes 只读 write only = no # no 客户端可下载文件,yes 不能下载 list = yes #是否提供资源列表 auth users =test #登录系统使用的用户名,没有默认为匿名。

hosts allow = 192.168.0.10,192.168.0.20 #本模块容许经过的 IP

地址

hosts deny = 192.168.1.4 #禁止主机 IP secrets file=/etc/rsync.pas #密码文件存放的位置

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

--daemon ,监听端口 TCP 873

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

vi /etc/rsync.pas

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

test:test999

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

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

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

test999

保存便可开始同步:执行以下语句

Rsync -aP --delete test@192.168.0.100::www /usr/local/webapps

--password-file=/etc/rsync.pas

Rsync -aP --delete test@192.168.0.100::web /data/www/web

--password-file=/etc/rsync.pas

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

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

Rsync 经常使用参数解析:

-a, ––archive

归档模式,表示以递归方式传输文件,并保持全部文件属性。

––exclude=PATTERN

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

––exclude-from=FILE

从 FILE 中读取排除规则

––include=PATTERN

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

––delete

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

-P

等价于 ––partial ––progress

-v, ––verbose

详细输出模式

-q, ––quiet

精简输出模式

––rsyncpath=PROGRAM

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

––password-file=FILE

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

一般在 cron 中链接 rsync 服务器时使用

5.2. 2 Rsync 基于 SSH 同步

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

方法就是基于 linux ssh 来同步。具体方法以下:

rsync -aP --delete root@192.168.0.10:/data/www/webapps

/data/www/webapps ,若是想每次同步不输入密码,须要作 Linux 主机之间免密码登陆。

5.2. 3 Rsync 实时同步配置

在企业平常 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

;make install 便可。配置 auto_inotify.sh 同步脚本,内容以下:

#!/bin/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'

-e modify,delete,create,attrib ${src} | while read file do for i in $ip do

/usr/local/rsync/bin/rsync -aP --delete $src root@$ip:$des done done

在服务器端后台启动该脚本,nohup sh auto_inotify.sh & ,在服务器端目录新建或者删除,客户端都会实时进行相关操做。

5. 3 Tomcat/Resin JAVA 服务器

Tomcat 是由 Apache 软件基金会下属的 Jakarta 项目开发的一个 Servlet 器,按照 Sun Microsystems 供的技术规范,实现了对 Servlet JavaServer PageJSP的支持,Tomcat 自己也是一个 HTTP 服务器,能够单独使用,apache 是一个以 C 语言编写的 HTTP 服务器。Tomcat 主要用来解析 JSP 语言。目前最新版本为 8.0。

5.3. 1 Tomcat 安装配置

安装 tomcat 以前须要安装 jdk (Java Development Kit) 是 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 添加以下语句:

export JAVA_HOME=/usr/java/jdk1.6.0_18 export

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

PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin source /etc/profile //使环境变量马上生效。

java -version //查看 java 版本,显示版本为 1.6.0_18,证实安装成功。

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

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

/usr/local/tomcat 便可。

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

查看 ps -ef |grep tomcat 进程及端口是否存在,经过页面访问能够

看 到 tomcat 默 认 测 试 页 面 :

clip_image128

这个画面是默认网站,怎么来建立一个本身的网站页面呢,定义本身的发布目录,方法以下:在 server.xml 配置文件末尾加入以下行:(附截图)

<Context path="/" docBase="/data/webapps/www"

reloadable="true"/>

clip_image130 在/data/webapps/www 目录下,建立本身的 jsp 代码,重启 tomcat 便可访问。

5.3. 2 Tomcat 性能优化

线上环境使用默认 tomcat 配置文件,性能很通常,为了知足大量用户的访问,须要对 tomcat 进行参数性能优化,具体优化的地方以下:

Ø Linux 内核的优化

Ø 服务器资源配置的优化

Ø Tomcat 参数优化

Ø 配置负载集群优化

这里着重讲解 tomcat 参数的优化:server.xml 文件,关闭 DNS 查询、配置最大并发等参数。

maxThreads:tomcat 起动的最大线程数,即同时处理的任务个数,默认值为 200 acceptCount:当 tomcat 起动的线程数达到最大时,接受排队的请求个数,默认值为 100 固然这些值都不是越大越好,须要根据实际状况来设定。能够基于测试的基础上来不断的调优分析。

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" maxThreads="5000" minSpareThreads="20" acceptCount="1000" disableUploadTimeout="true" enableLookups="false" URIEncoding="UTF-8" />

Catalina.sh JVM 参数优化,添加以下内容:

CATALINA_OPTS="$CATALINA_OPTS –Xms4000M –Xmx4000M –Xmn1000M -XX:SurvivorRatio=4 -XX:+UseConcMarkSweepGC

-XX:CMSInitiatingOccupancyFraction=82 -DLOCALE=UTF-16LE

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

配置多个 tomcat 实例,方法也很简单,只须要在服务器上 cp 多个 tomcat,而后修改三个端口和发布目录便可,而后分别启动便可。为了提高整个网站的性能,还须要在 tomcat 前面架设 nginx web 反向代理服务器,用以提升用户高速访问。

5.3. 3 Resin 安装配置

Resin 是 CAUCHO 公司的产品,是一个很是流行的 application server,对 servlet 和 JSP 提供了良好的支持,性能也比较优良,resin 自身采用 JAVA 语言开发。 resin 普通版本和 pro 版本主要区别是 pro 支持缓存和负载均衡pro 由于有强大的 cache 功能,独立做为 web 服务器处理静态页面性能均可以和 apache 一比。但普通版本独立做为 web 服务器性能就要差一些。固然能够使用 apache+resin 的方案借助 apache 的缓存功能提升性能。

通常我的使用都使用开源免费版,若是想更高的性能,能够购买

使用企业版 resin,售后服务有保障。

wget http://www.caucho.com/download/resin-4.0.33.tar.gz tar –xzvf resin-4.0.33.tar.gz cd resin-4.0.33 &&./configure --prefix=/usr/local/resin

\--with-resin-log=/data/logs/resin/

--with-java-home=/usr/java/jdk1.6.0_18/ make &&make install

安装完毕后,修改/usr/local/resin/conf/resin.xml 配置文件发布目录,

如图:

clip_image132

而后启动 resin,/usr/local/resin/bin/resin.sh start 测试成功访问以下

图(发布目录未修改以前 resin 默认测试页面):

clip_image133

5.3. 4 Resin 性能优化

Resin 同 tomcat 同样,都须要优化 JVM 参数,resin 的 JVM 参数配置在 resin.xml 里面,配置最大最小内存,会话保持时间及并发数等以下所示:

<http address="*" port="8080"/>

<!-- SSL port configuration: -->

<http address="*" port="8443">

<jsse-ssl self-signed-certificate-name="resin@localhost"/>

</http>

<jvm-arg>-Xms4000m</jvm-arg>

<jvm-arg>-Xmx4000m</jvm-arg>

<jvm-arg>-Xmn1000m</jvm-arg>

<jvm-arg>-XX:PermSize=128m</jvm-arg>

<jvm-arg>-XX:MaxPermSize=256m</jvm-arg>

<thread-max>10000</thread-max>

<socket-timeout>30s</socket-timeout>

<keepalive-max>5000</keepalive-max>

<keepalive-timeout>60s</keepalive-timeout>

<jvm-arg>-agentlib:resin</jvm-arg>

Resin 参数优化一样包括最大内存、最小内存,年轻带,最大并发,会话超时时间等。根据实际的应用来调节不一样的参数。

5.3. 5 Resin 多实例配置

为了资源最大利用,单台服务器能够配置多个 resin 实例,配置 resin 多实例的方式跟 tomcat 大部分一致,但还有一些区别:

cd /usr/local/resin/conf 下,而后 cp resin.xml resin1.xml ;cp resin.xml resin2.xml

修改两个配置文件以下图所示:

HTTP 端口为 8080 Resin1.xml 配置以下:

clip_image135

HTTP 端口为 8081 Resin2.xml 配置以下:

clip_image137

建立两个发布目录 mkdir -p /data/webapps/{www1,www2}写入测

试 jsp 文件便可。最后以下方法启动两个 resin 实例: /usr/local/resin/bin/resin.sh -conf /usr/local/resin/conf/resin1.xml

-server 1 start

/usr/local/resin/bin/resin.sh -conf /usr/local/resin/conf/resin2.xml

-server 2 start

clip_image139

真实环境,须要调整 jvm 参数,须要在 resin.xml 里面配置,同时须要开启启动 resin,只须要把上述脚本加入/etc/rc.local 便可。

5. 4 Nginx Tomcat 动静分离

Nginx 动静分离简单来讲就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动

态请求跟静态请求分开,能够理解成使用 Nginx 处理静态页面,Tomcat、

Resin 出来动态页面。

动静分离从目前实现角度来说大体分为两种,一种是纯粹的把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另一种方法就是动态跟静态文件混合在一块儿发布,经过 nginx 来分开。这样也是本次课程要讲解的,具体怎么来实现呢,以下图,经过 location 指定不一样的后缀名实现不一样的请求转发。

经过 expires 参数设置,能够使浏览器缓存过时时间,减小与服务器以前的请求和流量。具体 Expires 定义:是给一个资源设定一个过时时间,也就是说无需去服务端验证,直接经过浏览器自身确认是否过时便可,因此不会产生额外的流量。

此种方法很是适合不常常变更的资源。(若是常常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天以内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,若是有修改,则直接从服务器从新下载,返回状态码 200。

clip_image140 以下为nginx.conf里面server 配置段,直接添加在nginx.conf 里便可。

####www.wuguangke.cn

server { listen 80; server_name www.wuguangke.cn; index index.html index.htm;

#配置发布目录为/data/www/wugk

root /data/www/wugk; location / { proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For

$proxy_add_x_forwarded_for; proxy_pass http://tdt_wugk; expires 3d;

}

#动态页面交给http://tdt_wugk,也即咱们以前在nginx.conf定义的upstream tdt_wugk 均衡 location ~ .*\.(php|jsp|cgi)?$

{

proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For

$proxy_add_x_forwarded_for; proxy_pass http://tdt_wugk;

}

#配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取。

location

~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$

{ root /data/www/wugk;

#expires定义用户浏览器缓存的时间为3天,若是静态页面不常更新,能够设置更长,这样能够节省带宽和缓解服务器的压力

expires 3d;

}

#定义Nginx输出日志的路径

access_log /data/logs/nginx_wugk/access.log main; error_log /data/logs/nginx_wugk/error.log crit;

}

真实环境网站程序包只有一个,须要把这个程序包在 nginx 前端放一份,同时须要在 Tomcat、Resin 后端也放置一份,若是服务器涉及数量不少,那每台服务器都须要更新,能够使用批量更新方法。

5. 5 LNAMP 高性能架构配置

LNAMP(Linux+Nginx+Apache+Mysql+PHP)架构受到不少IT企业的青睐,取代了原来认为很好的 LNMP(Linux+Nginx+Mysql+PHP)架构,那咱们说 LNAMP 到底有什么优势呢,还得从 Nginx 和 apache 的优缺点提及。

Nginx 处理静态文件能力很强,Apache 处理动态文件很强并且很稳定,把两者综合在一块,性能提高不少倍。可能不少 Linux SA 在从事 LNMP 运维中,会发现 PHP(FastCGI)模式会出现一些 502 错误的现象,这是由于 Nginx+PHP(FastCGI)组合不稳定的缘由形成的。

Ø 源码安装 LNAMP 之 Nginx yum install prce-devel –y ;cd /usr/src ;wget http://nginx.org/download/nginx-1.6.0.tar.gz;cd

nginx-1.6.0 ;./configure –prefix=/usr/local/nginx && make &&make

install

Ø 源码安装 LNAMP 之 Apache

yum install apr-devel apr-util-devel –y;

cd /usr/src ; wget

http://mirror.bit.edu.cn/apache/httpd/httpd-2.2.27.tar.gz;tar xzf

httpd-2.2.27.tar.gz ;cd httpd-2.2.27 ;./configure

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

&&make install

Ø 源码安装 LNAMP 之 MySQL

cd /usr/src ;wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.63.tar.gz;tar

xzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure

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

clip_image141

配置 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 --add mysqld chkconfig --level 345 mysqld on

cd /usr/local/mysql useradd mysql chown -R mysql.mysql /usr/local/mysql

/usr/local/mysql/bin/mysql_install_db --user=mysql chown -R mysql var

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

Ø 源码安装 LNAMP 之 PHP

cd /usr/src ;wget http://mirrors.sohu.com/php/php-5.3.28.tar.bz2;tar jxf php-5.3.28.tar.bz2 ;cd php-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/

clip_image142

Ø 源码安装 Apache+PHP 整合整合 apache+php 环境,修改 httpd.conf 配置文件,而后加入以下语句:

LoadModule php5_module modules/libphp5.so (默认已存在)

AddType application/x-httpd-php .php

DirectoryIndex index.php index.html (把 index.php 加入 index.html 之

前) 而后在/usr/local/apache/htdocs 目录下建立 index.php 测试页面,执行

以下命令:

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

<?php phpinfo();

?>

EOF

从新启动 apache 服务,经过 IP 访问界面以下图,即表明 LAMP 环境搭建成功。

clip_image143

Ø 源码安装 DISCUZ 论坛下载 discuz 源码包文件,而后解压:

cd /usr/src ;wget http://download.comsenz.com/DiscuzX/3.1/Discuz_X3.1_SC_UTF8.zip

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

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

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

777 -R data/ uc_server/ config/ uc_client/

而后访问 IP 安装 discuz 论坛,以下图,选择“我赞成”

clip_image079[1] 进入以下界面,数据库安装,若是不存在则须要新建数据库并受权。

clip_image080[1] 数据库建立及受权命令以下:

create database discuz charset=utf8;

grant all on discuz.* to root@'localhost' identified by "123456";

clip_image144

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

clip_image145

自此 LAMP 环境整合并搭建成功,那如何使用 Nginx 来整合 LAMP 呢?

Ø 源码安装 Nginx+LAMP 整合先修改 apache 访问端口为 8080,Nginx 端口为 80。

而后修改 nginx 配置文件: vi /usr/local/nginx/conf/nginx.conf,server

配置段内容以下:

(定义 upstream 均衡模块,配置动静分离,动态转发至 apache,静态文件直接本地响应)

upstream app_lamp { server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;

} server { listen 80; server_name localhost;

location / { root /usr/local/apache/htdocs; index index.php index.html index.htm;

} location ~ .*\.(php|jsp|cgi)?$

{ proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For

$proxy_add_x_forwarded_for; proxy_pass http://app_lamp;

} location

~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$

{

root /usr/local/apache/htdocs; expires 3d;

}

}

测试,访问 nginx ip+port 以下图所示:

clip_image147

查看系统启动的端口及进程以下图:

clip_image149

自此,LNAMP 所有整合完毕,接下来就是对系统内核、各个服务、架构进行优化,一样优化是一项长期的任务。

5. 6 LVS+Keepalived 负载均衡

Ø LVS 简介及工做原理

LVS 是 Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。本项目在 1998 年 5 月由章文嵩博士成立,是中国国内最先出现的自由软件项目之一。

LVS 简单工做原理:用户请求 LVS VIP,LVS 根据转发方式和算法,将请求转发给后端服务器,后端服务器接受到请求,返回给用户。对于用户来讲,看不到 WEB 后端具体的应用。

LVS 转发方式有三种,分别是 NAT、DR、TUN 模式,经常使用算法:

RR、LC、WRR、WLC 模式等(RR 为轮询模式,LC 为最少链接模式)

LVS NAT 原理:用户请求 LVS 到达 director,director 将请求的报文的目标地址改为后端的 realserver 地址,同时将报文的目标端口也改为后端选定的 realserver 相应端口,最后将报文发送到 realserver, realserver 将数据返给 director,director 再把数据发送给用户。(两次请求都通过 director,因此访问大的话,director 会成为瓶颈)

LVS DR 原理:用户请求 LVS 到达 director,director 将请求的报文的

目标 MAC 地址改为后端的 realserver MAC 地址,目标 IP 为 VIP(不变),源 IP 为用户 IP 地址(保持不变),而后 Director 将报文发送到 realserver, realserver 检测到目标为本身本地 IP,若是在同一个网段,而后将请求直接返给用户。若是用户跟 realserver 不在一个网段,则经过网关返回用户。(此种转发效率最高)

LVS TUN 原理:跟 LVS DR 相似,也是改变封装 MAC 地址,多了一层隧道加密。实施环境复杂,比 LVS DR 模式效率略低。

Ø LVS 环境安装配置下载 LVS 所需软件 ipvsadm-1.2.4.tar.gz 软件,编译安装:

wget -c

http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar. gzln -s /usr/src/kernels/2.6.* /usr/src/linux //IPVS 模块编译进内核里,

须要作软链接

tar xzvf ipvsadm-1.24.tar.gz &&cd ipvsadm-1.24 && make && make

install

LVS 安装完毕以后,须要进行配置,配置的步骤有两步,第一步为定

义端口服务,第二步为添加 realserver 后端服务。

ipvsadm -A -t 192.168.149.129:80 -s rr ipvsadm -a -t 192.168.149.129:80 -r 192.168.149.130 -m -w 2 ipvsadm -a -t 192.168.149.129:80 -r 192.168.149.131 -m -w 2

参数说明:

-A 增长一台虚拟服务器地址。

-t 虚拟服务器提供的是 tcp 服务。

-s 使用的调度算法

-a 在虚拟服务器中增长一台后端真实服务器。

-r 指定真实服务器地址。

-m 设置当前转发方式为 NAT 模式;-g 为直接路由模式;-i 模式为隧道模式

-w 后端真实服务器的权重。

查看 LVS 转发列表命令为:ipvsadm –Ln

clip_image151 咱们会发现,若是这台 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 相应稳定版本:

cd /usr/src ;wget -c

http://www.keepalived.org/software/keepalived-1.1.15.tar.gztar -xzvf keepalived-1.1.15.tar.gz &&cd keepalived-1.1.15 && ./configure

&& make && make install

安装完毕,配置 keepalived 服务为系统服务。

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 上/etc/keepalived/目录建立 keepalived.conf 配置文件,并

写入以下内容:

! Configuration Filefor keepalived global_defs { notification_email {

wgkgood@163.com

}

notification_email_from wgkgood@163.com smtp_server 127.0.0.1 smtp_connect_timeout 30

router_id LVS_DEVEL

}

# VIP1 vrrp_instance VI_1 { state MASTER interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 51 priority 100 advert_int 5 authentication { auth_type PASS auth_pass 1111

}

virtual_ipaddress {

192.168.149.129

}

}

#REAL_SERVER_1 virtual_server 192.168.149.129 80 { delay_loop 6 lb_algo wlc

lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.149.130 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80

}

}

#REAL_SERVER_2

real_server 192.168.149.131 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80

}

}

}

如上配置文件,红色标记的地方须要注意,state 状态主服务器设置 MASTER,从设置为 BACKUP,优先级备机设置比 MASTER 小,例如设置 90,使用 TCP 端口检测。在 LVS BACKUP 服务器写入以下配置,须要注意的是客户端的配置要修改优先级及状态:

! Configuration Filefor keepalived global_defs { notification_email {

wgkgood@163.com

}

notification_email_from wgkgood@163.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL

}

# VIP1 vrrp_instance VI_1 { state BACKUP interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 51

priority 90 advert_int 5 authentication { auth_type PASS auth_pass 1111

}

virtual_ipaddress {

192.168.149.129

}

}

#REAL_SERVER_1 virtual_server 192.168.149.129 80 { delay_loop 6 lb_algo wlc lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.149.130 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3

delay_before_retry 3 connect_port 80

}

}

#REAL_SERVER_2

real_server 192.168.149.131 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80

}

}

}

如上设置,LVS 主备配置完毕,接下来须要在 realserver 配置 LVS VIP,为何要在 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 脚本内容:

#!/bin/sh

#LVS Client Server VIP=192.168.149.118 case $1 in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP

/sbin/route add -host $VIP dev lo: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/null 2>&1 echo "RealServer Start OK" exit 0

;; stop) ifconfig lo:0 down route del $VIP >/dev/null 2>&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 "RealServer Stoped OK" exit 1

;;

*) echo "Usage: $0 {start|stop}"

;;

esac

LVS 网站故障排查经验:若是发现主网站没法访问,首先第一步 ping 网站域名是否能 ping 通,若是域名没法访问,试着使用 IP 能不能访问,若是 IP 能访问,首先排查到域名解析问题。

若是 IP 也没法访问,登陆 LVS 服务器,使用命令 ipvsadm –Ln 查看当前链接状态和查看/var/log/messages 日志信息,能够在 LVS 上访

问 realserver ip,进行排查。

若是 LVS 服务正常,后端 realserver 服务异常,而后查看 nginx 日志信息,是否有大量恶意访问,临时重启看是否能访问。

若是有恶意 ip 访问,找出恶意 ip,经确承认以关闭后,使用 iptables 防火墙临时关闭便可。

5. 7 Squid 缓存服务器配置

随着网站访问人数愈来愈多,对体验的要求也愈来愈高,网站承受的并发和压力也愈来愈大,因此须要对网站和架构进行优化,优化的策略有很大,系统内核、程序、配置均衡、加入缓存等,那今天咱们来讨论使用 Squid 对架构进行缓存优化。

Squid cache(简称为 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 安装,根据实际经验使用,squid 2.6 系列的 squid 比较稳定,能够考虑采用。

安装命令:yum install -y squid

建立 squid.conf 配置文件,内容以下:

http_port 80 accel vhost vport cache_peer 192.168.149.130 parent 80 0 originserver name=wugk1 cache_peer 192.168.149.131 parent 80 0 originserver name=wugk2 cache_peer_domain wugk1 www.wugk1.com cache_peer_domain wugk2 www.wugk2.com visible_hostname localhost forwarded_for off

via off

cache_vary on #acl config acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl SSL_ports port 443 acl Safe_ports port 80 8080 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl all src 0.0.0.0/0

acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localnet http_access allow localhost http_access allow all acl PURGE method PURGE http_access allow PURGE localhost http_access deny PURGE #squid config 2014-03-25 cache_dir aufs /data/cache1 10240 16 256 cache_mem 4000 MB maximum_object_size 8 MB maximum_object_size_in_memory 256 KB

hierarchy_stoplist cgi-bin ?

coredump_dir /var/spool/squid refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern \.(jpg|png|gif|mp3|xml|html|htm|css|js)

1440 50% 2880 ignore-reload refresh_pattern . 0 20% 4320

Ø Squid 参数详解

#vhost和vport表示支持虚拟主机和虚拟端口,若是再加上transparent

表示支持透明代理

http_port 80 accel vhost vport

#cache_peer 表示若是本机缓存中找不到客户端请求的数据,则与后端主机联系,以 parent 类型进行联系;使用 HTTP 协议进行联系,联系端口是 80,orginserver 表示此服务器是源服务器,name 表示别名。

cache_peer 192.168.149.128 parent 80 0 originserver name=wugk1 cache_peer 192.168.149.129 parent 80 0 originserver name=wugk2

#设置别名所对应的域名,若是 cache_peer 中使用域名而不是 IP 的话;那么 cache_peer_domain 中必定要用相同的域名,不然没法访问。 cache_peer_domain wugk1 www.wugk1.com cache_peer_domain wugk2 www.wugk2.com

#设置缓存服务器名称

visible_hostname localhost forwarded_for off

via off

cache_vary on #acl config acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl SSL_ports port 443 acl Safe_ports port 80 8080 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl all src 0.0.0.0/0

acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localnet http_access allow localhost

##设置访问控制,容许全部客户端访问上面设置的两个网站

http_access allow all

#支持 purge 方式清除缓存

acl PURGE method PURGE http_access allow PURGE localhost http_access deny PURGE

#squid config 2014-03-25

#设置缓存文件夹的路径和参数,缓存机制为 aufs,10240 表示 10G,目录下面分为 16 级,每级有 256 个目录

cache_dir aufs /data/cache1 10240 16 256

#设置缓存内存大小,最大内存为 4g

cache_mem 4000 MB

#设置硬盘中可缓存的最大文件大小

maximum_object_size 8 MB

#设置内存中可缓存的最大文件大小

maximum_object_size_in_memory 256 KB

hierarchy_stoplist cgi-bin ?

#当 squid 忽然挂掉的时候,或者忽然出现什么故障的时候,将 squid 在内存中的资料写到硬盘中

coredump_dir /var/spool/squid

#<refresh_pattern> <regex> <最小时间> <百分比> <最大时间>

#refresh_pattern 用于肯定缓存的类型,缓存过时时间,及百分比。 #若是但愿内容缓存 cache 后不删除,直到被主动用 purge 清除,可

以加 ignore-reload 选项

refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern \.(jpg|png|gif|mp3|xml|html|htm|css|js) 1440 50%

2880 ignore-reload refresh_pattern . 0 20% 4320

5. 8 MySQL 高可用架构

MySQL 是一个开放源码的小型关联式数据库管理系统,开发者为

瑞典 MySQL AB 司, 目前属于 Oracle 司,MySQL 被普遍地应用在 Internet 的中小型网站中。因为其体积小、速度快、整体拥有成本低,尤为是开放源码这一特色,许多中小型网站为了下降网站整体拥有成本而选择了 MySQL 做为网站数据库

对应目前主流的 LAMP 架构来讲,Mysql 更是获得各位 IT 运维、DBA 的青睐,目前 mysql 已被 orcacle 收购,不过好消息是原来 mysql 创始人已独立出来本身从新开发了一个 MariaDB,并且使用的人数愈来愈多。并且 MariaDB 兼容 mysql 全部的功能和相关参数。

Mysql 经常使用的两大引擎有 MyISAM 和 innoDB,那他们有什么明显的区别呢,什么场合使用什么引擎呢?

MyISAM 类型的表强调的是性能,其执行数 度比 InnoDB 类型更快,但不提供事务支持,若是执行大量的 SELECT 操做,MyISAM 是更好的选择,支持表锁。

InnoDB 提供事务支持事务,外部键等高级 数据库功能,执行大量的 INSERT 或 UPDATE,出于性能方面的考虑,应该使用 InnoDB 表,支持行锁。

随着访问量的不断增长,Mysql 数据库压力不断增长,须要对 mysql 进行优化和架构改造,能够使用高可用、主从复制、读写分离来、拆分库、拆分表进行优化。下面咱们来学习 MySQL 主从复制高可用如何来实现。

Ø MySQL 数据库主从复制原理

Mysql 主从同步实际上是一个异步复制的过程,要实现复制首先须要在 master 上开启 bin-log 日志功能,整个过程须要开启 3 个线程,分别是 Master 开启 IO 线程,slave 开启 IO 线程和 SQL 线程。

a) 在从服务器执行 slave start,从服务器上 IO 线程会经过受权的用户链接上 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 文件中,以便在下一次读取的时候可以清楚的告诉Master“我须要从某个bin-log的哪 个位置开始日后的日志内容,请发给我”;

d) Slave 的 Sql 进程检测到 relay-log 中新增长了内容后,会立刻解析 relay-log 的内容成为在 Master 端真实执行时候的那些可执行的内容,并在自身执行。

Ø MySQL 数据库主从配置

环境准备:192.168.149.128 为 master 主服务器,192.168.149.129 为 slave 从服务器。

在主和从服务器都安装 mysql 相关软件,命令以下:

yum install -y mysql mysql-devel mysql-server mysql-libs

安装完毕后,在 Master 修改 vi /etc/my.cnf 内容为以下:

[mysqld]

datadir=/data/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

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/mysqld restart

而后修改 slave Mysql 数据库 my.cnf 配置文件内容以下:

[mysqld]

datadir=/data/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

log-bin=mysql-bin

server-id = 2

auto_increment_offset=2

auto_increment_increment=2

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

master-host =192.168.149.128

master-user=tongbu

master-pass=123456

master-port =3306

master-connect-retry=60

replicate-do-db =all

在 Master 数据库服务器上设置权限,执行以下命令:

grant replication slave on *.* to 'tongbu'@'%' identified by

'123456';

在 Master 数据库执行以下命令: mysql> show master status;

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB

|

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

| mysql-bin.000006 | 98 | |

|

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

1 row in set (0.00 sec)

而后在 slave 服务器指定 master IP 和同步的 pos 点:

change master to 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 启动 slave start,并执行 show slave status\G 查看 Mysql 主

从状态:

clip_image153

Slave_IO_Running: Yes

Slave_SQL_Running: Yes 两个状态为 YES,表明 slave 已经启动两个

线程,一个为 IO 线程,一个为 SQL 线程。

而后在 Master 服务器建立一个数据库和表,命令以下:

clip_image155 而后去 slave 服务器查看是否有 mysql_ab_test 数据库和相应 t0 的表,若是存在则表明 Mysql 主从同步搭建成功:

clip_image157 一样还能够测试在 master 服务器插入两条数据,在 slave 查看 insert 数据是否已同步:

128 master 上执行以下图:

clip_image159

129 slave 上执行以下图,在 master 插入的数据已经同步到 slave

上:

clip_image161 自此 Mysql 主从搭建完毕,如今有一个问题,若是 master 服务器 down 机了,如何快速恢复服务呢?

能够经过两种方法:

第一种方法,若是程序链接的是 master 的 IP,直接在 slave 服务器上添加 master 的 IP 便可。这个手动去操做,并且须要花费时间比较长,可能还会出现误操做的状况,不推荐。

第二种方法,能够使用 keepalived、heartbeat 做为 HA 检测软件,

检查 MySQL 服务是否正常,不正常则自动切换到 slave 上,推荐使用。

Ø Mysql+keepalived 高可用配置

继上一章节 MySQL 主从配置完毕后,接着配置 keepalived 服务,主要用于 Mysql 故障自动切换。

Keepalived 安装配置:

tar zxf keepalived-1.2.1.tar.gz

cd keepalived-1.2.1 &&./configure --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686 &&make && make install

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 ! Configuration File for keepalived global_defs { notification_email { wgkgood@139.com

} notification_email_from wgkgood@139.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL

} # VIP1 vrrp_instance VI_1 { state BACKUP interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 151 priority 100 advert_int 5 nopreempt authentication { auth_type PASS auth_pass 2222

} virtual_ipaddress {

192.168.149.100

} } virtual_server 192.168.149.100 3306 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.149.128 3306 { weight 100 notify_down /data/sh/mysql.sh TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306

}

}

}

Mysql 从服务器配置 keepalived.conf 跟 master 同样,只须要把

Realserver IP 修改为 real_server 192.168.149.129 ;优先级从 100

改为 90 便可。

在 master、slave 数据库上建立/data/sh/mysql.sh 脚本,内容为:

pkill keepalived

而后分别重启两台数据库上 keepalived 服务便可。最后测试中止

master Mysql 服务,是否会自动切换到 Backup 上。

关于 Mysql 集群高可用就在此告一段落,固然除了 keepalived 高可用以外,Mysql 优化还能够进行读写分离、Mysql+DRBD、拆分表等等优化,有兴趣的童鞋能够继续深刻研究。

6. Linux 运维职业规划

对于从事 Linux 岗位的童鞋们,最关注的问题莫过于这个行业到底怎么样,能不能挣钱?我之后能作什么?

对于第一个问题:

随着互联网飞速的发展,用户对网站体验各方面都要求很高,因此做为网站底层承载的 linux 系统来讲,获得大批量的应用,能够说大中型互联网公司 Linux 在服务器领域已经占到 7-80%,并且 Android 手机也是基于 Linux 来研发定制的。将来 Linux 会在各行各业获得广泛的应用。

这里讨论 Linux 运维,若是是 Linux 开发的话,薪资更高,因此只要你技术熟练、精通,薪资根本不是问题,初级薪资通常都在 4-5K 以上,中间 6-8K,高级 Linux 运维薪资通常都在 10K+。对应 Linux 岗位管理方面薪资则 20K+左右。全部不要再问能给有多少钱,关键是你有多熟练,你的能力在哪里?从 Linux 运维领域来讲,能够努力学习的方向有:

1) 熟练 Linux 系统的性能优化、网络平常管理。

2) 高性能集群架构部署及优化等。

3) 大并发网站运维及管理。

4) Mysql、Oracle 数据库集群管理。

5) 自动化运维平台开发与管理

6) 网站架构 GSLB、CDN 缓存等。

一个行业要想熟练、甚至精通至少要花上 5-10 年的时间,作一件事重在专注,即便如今不会,只要天天进步一点点,天天实践一点点,改变一点点,相信将来更美好。只有专一才能成功。

相关文章
相关标签/搜索