linux入门到高级

目  录php

1. Linux入门篇.............................................................................................................. 3css

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

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

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

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

2. Linux系统篇............................................................................................................. 20mysql

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

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

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

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

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

3. Linux服务篇............................................................................................................. 25

3.1 Linux服务部署................................................................................................ 25

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

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

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

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

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

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

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

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

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

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

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

4. Linux编程篇............................................................................................................. 60

4.1 Linux Shell编程............................................................................................. 60

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

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

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

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

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

5. Linux深刻篇............................................................................................................. 72

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

5.1. 1 Nginx WEB安装.................................................................................... 73

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

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

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

5.1. 5 Nginx Rewrite规则............................................................................. 78

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

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

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

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

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

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

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

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

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

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

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

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

5. 6 构建DNS域名解析服务器................................................................................ 99

5. 7 MySQL主从高可用架构.................................................................................. 102

5. 8 LVS+Keepalived负载均衡............................................................................. 110

5. 9 Squid缓存服务器配置.................................................................................. 116

6. Linux下高并发系统内核优化.................................................................................. 122

7. Nginx负载均衡机制及常见问题............................................................................... 124

8. Linux运维职业规划................................................................................................ 127

9. Linux运维面试总结................................................................................................ 127

1) 面试技巧总结............................................................................................ 127

2) 面试题目总结............................................................................................ 128

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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,能力强的薪资更高。

 

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

 

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 workstation10.0

ü  CentOS 5.8x86_i386.iso

安装图解以下:

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

 

第二步,选择相关选项,以下图:

 

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

 

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

 

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

 

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

 

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

 

自此,虚拟机新建完成,接下来点击“启动此虚拟机”进行Linux系统安装,Linux系统安装图解以下:

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

 

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

 

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

 

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

 

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

 

 

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

 

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

 

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

 

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

 

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

 

第十步,系统安装包选择,左侧选择“开发“----右侧选择”开发工具“和“开发库”,语言选择“支持中文“,其余一律不选择。

 

安装完毕会提示“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目录结构以下: (附图表)

 

/ 根目录 
/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:21monitor_log.sh

[root@node1 ~]#

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

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

每一个Linux文件具备四种访问权限:可读(r)、可写(w)、可执行(x)和无权限(-)。
利用ls -l命令能够看到某个文件或目录的权限,它以显示数据的第一个字段为
 准。第一个字段由10个字符组成,以下:
    [root@node1 ~]# ls -lmonitor_log.sh

-rw-r--r-- 1 rootroot 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.33.10

NETMASK=255.255.255.0

GATEWAY=192.168.33.1
网卡参数详解以下:

DEVICE=eth0   #物理设备名
ONBOOT=yes   # [yes|no](重启网卡是否激活设备)
BOOTPROTO=static #[none|static|bootp|dhcp](不使用协议|静态分配|BOOTP协议|DHCP协议)

TYPE=Ethernet  #网卡类型

IPADDR=192.168.33.10 #IP 地址
NETMASK=255.255.255.0 #子网掩码
GATEWAY=192.168.33.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 看看效果:

 

IP配置完毕后,咱们能够经过远程工具来链接Linux服务器,常见的Linux远程链接工具备:putty、secureCRT(主流)、xshell、xmanger等工具。

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

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

 

弹出输入密码框:

 

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

 

经过这几章的学习,咱们已经熟练了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 nopeernoquery

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.log2>&1

3.1.2    构建DHCP服务器

DHCP(Dynamic HostConfiguration 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;

optionsubnet-mask      255.255.252.0;

#   optionnis-domain       "domain.org";

#  optiondomain-name "192.168.0.10";

#   optiondomain-name-servers  192.168.0.11;

#   optionntp-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协议的一个免费软件,由服务器及客户端程序构成,

SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通讯协议,它为局域网内的不一样计算机之间提供文件及打印机等资源的共享服务。

SMB协议是客户机/服务器型协议,客户机经过该协议能够访问服务器上的共享文件系统、打印机及其余资源。经过设置“NetBIOS overTCP/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=Temporaryfile space

     path=/tmp

     read only=no

     public=yes

 

[data]

     comment=Temporaryfile space

     path=/data

     read only=no

     public=yes

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

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

Shutting down SMB services:                                [FAILED]

Shutting down NMB services:                                [FAILED]

Starting SMB services:                                     [ OK  ]

Starting NMB services:                                     [ 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.33.10(SMB文件共享服务端IP),如何没有权限访问,须要注意防火墙和selinux设置,能够使用以下命令关闭:

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

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 以下图,安装成功便可。

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

/data/     192.168.33.11(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.33.10:/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

修改配置文件以下:

#vsftpd config2014 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.33.10,输入用户名和密码便可访问,进行建立和删除操做。

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模式:PreforkMPM 使用多个子进程,每一个子进程只有一个线程。每一个进程在某个肯定的时间只能维持一个链接。

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

Worker模式:WorkerMPM 使用多个子进程,每一个子进程有多个线程。每一个线程在某个肯定的时间只能维持一个链接。一般来讲,在一个高流量的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。

 

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

 

查看apache进程及端口:

 

源码包安装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最末尾加入以下配置:

Includeconf/extra/httpd-vhosts.conf

从新加载apache便可,/usr/local/apache2/bin/apachectlgraceful效果演示以下:

 

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 ;tarxzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure--prefix=/usr/local/mysql    --enable-assembler &&make &&make install

配置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; 查看数据库里有多少张表。

 

create table test01 (id varchar(20),namevarchar(20));建立名为test01表,并建立两个字段,id、name、数据长度(用字符来定义长度单位。)

insert into test01 values("001","wugk1"); 向表中插入数据。

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

 

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-servermysql-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 ;tarxzf  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 ;tarxzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure  --prefix=/usr/local/mysql--enable-assembler &&make &&make install

配置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 ;tarjxf  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/

 

Ø  源码安装Apache+PHP整合

整合apache+php环境,修改httpd.conf配置文件,而后加入以下语句:

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

AddType     application/x-httpd-php .php

DirectoryIndex  index.phpindex.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环境搭建成功。

 

Ø  源码安装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论坛,以下图,选择“我赞成”

 

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

 

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

create database discuz charset=utf8;

grant all on discuz.* toroot@'localhost' identified by "123456";

 

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

 

自此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为后缀名称)。简单原理图以下:

1)   Cacti服务器端安装

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

http://www.cacti.net/downloads/cacti-0.8.8a.tar.gz

http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.5.tar.gz

http://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为以下配置:

8)   添加Rrdtool抓图任务计划

*/5  * * * * /usr/bin/php /var/www/html/cacti/poller.php>>/tmp/cacti_rrdtool.log 2 >&1

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

经过http://ip/cacti/ 访问出现以下界面,点击NEXT下一步。

 

 默认一直点击下一步:

 

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

进入Cacti配置管理界面

 

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

 

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

 

若是出现snmp error,检查snmp服务是否已启动,或者是否有权限。出现如上信息则表示正常。

点击左上角第二个按钮,graphs查看cacti图像—选择localhost主机—右边会显示cacti每5分钟的监控图像。

 

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

3.1.10  Nagios监控平台搭建

Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

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

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

 

1)   Nagios服务端安装

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

wget http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.2.1/nagios-3.2.1.tar.gz/download

http://down1.chinaunix.net/distfiles/nagios-plugins-1.4.14.tar.gz

 

/usr/sbin/useraddnagios

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.usersnagiosadmin

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

4)   Nagios测试访问

重启nagios ,/etc/init.d/nagios restart;/etc/init.d/httpd restart ;

http://localhost/nagios/ 以下图:

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

 

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

 

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目录主要包括监控主机的配置、模板、监控时间段等配置文件。

 

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

cplocalhost.cfg  192.168.33.10.cfg

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

sed -i's#localhost#192.168.33.10#g;s#127.0.0.1#192.168.33.10#g;s#check_local#check#g;s#linux-servers#192.168.33.10#g' 192.168.33.10.cfg

在nagios.cfg36行后加入cfg_file=/usr/local/nagios/etc/objects/192.168.33.10.cfg

sed -i'36a cfg_file=/usr/local/nagios/etc/objects/192.168.33.10.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等监控配置段:

defineservice{

        use                             local-service        

        host_name                       192.168.33.10

        service_description                 Swap Usage

        check_command                   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,安装方法以下:

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 -xzfnrpe-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 修改默认配置段的内容以下,去掉#号,作相应修改。

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

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

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

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

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

8)   Nagios服务器Nrpe配置

Nagios 服务器端也须要安装nrpe,同时须要定义Nrpe监控命令,写command.cfg末尾便可:

define command{

        command_namecheck_nrpe

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

        }

9)   Nagios监控端客户机配置

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

define service{

       use                             local-service     

       host_name                      192.168.33.10

       service_description                Current Load

       check_command                  check_nrpe!check_load

       }

 

其余同理,添加的方法同样。只要在客户端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$pARG1$−p

ARG2$ -s $ARG3$

 

       }

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

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

/usr/local/nagios/libexec/check_http -I192.168.33.11 -u /index.html -p 82 -s "ATM"

 

 如上截图表示,关键词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内容以下:

 

 

一样也能够使用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地址,再用TFTP(trivial 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

servicetftp

{

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 = 1002

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内容以下:

defaultlinux

prompt 1

timeout 10

displayboot.msg

F1boot.msg

F2options.msg

F3general.msg

F4param.msg

F5rescue.msg

labelcentos5.8

kernelvmlinuz

appendks=nfs:192.168.0.79:/centosinstall/ks.cfg ksdevice=eth0 initrd=initrd.img

label text

kernelvmlinuz

appendinitrd=initrd.img text

label ks

kernelvmlinuz

append ksinitrd=initrd.img

labellocal

localboot1

labelmemtest86

kernelmemtest

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     LinuxShell编程

4.1.1    Shell编程简介

shell是操做系统的最外层。shell合并编程语言以控制进程和文件,以及启动和控制其它程序。shell 经过提示您输入,向操做系统解释该输入,而后处理来自操做系统的任何结果输出来管理您与操做系统之间的交互。

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

Linux Shell种类很是多,常见的有:BourneShell(/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 isexist,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 sourcesystem?"

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 cpFiles

#定义文件和目录变量

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

#autobackup mysql

#wugk  2012-12-12

#DefinePATH定义变量

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

MYSQLDB=webapp

MYSQLPW=backup

MYSQLUSR=backup

#mustuse root user run scripts 必须使用root用户运行,$UID为系统变量

if            

   [ $UID -ne 0 ];then

   echo This script must use the root user ! !!

   sleep 2

   exit 0

fi

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

if

   [ ! -d $BAKDIR ];then

   mkdir -p $BAKDIR

else

   echo This is $BAKDIR exists....

fi

#Usemysqldump 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

#autotar czf shell to Files

#Authorwugk 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 “Thescripts exec end, Files tar successfully !”

 

d)  自动拒绝恶意IP脚本

 #!/bin/sh

#autodrop 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

++++++++++++++welcometo 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 --dport22 -j DROP" $IPTABLE_CONF

else

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

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

fi

done

#最后重启iptables生效

/etc/init.d/iptablesrestart

 

4.1.5    Shell数组编程

数组,就是相同数据类型的元素按必定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,而后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。

 

今天这里咱们来探讨一维数组的定义、统计、引用和删除等操做。首先来定义一个一维数组:

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

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

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

如何显示该数组全部参数呢?echo  ${A[@]} 将显示全部参数test1test2 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    NginxWEB安装

首先须要安装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 0000010000001000 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=2fail_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    NginxRewrite规则

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/$1  permanent;

}

更多深刻的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.gz 

tar  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 --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  --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/ResinJAVA服务器

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对ServletJavaServer 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 添加以下语句:

exportJAVA_HOME=/usr/java/jdk1.6.0_18 

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

exportPATH=$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  ;mvapache-tomcat-6.0.30  /usr/local/tomcat便可。

 

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

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

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

<Context path="/"docBase="/data/webapps/www" reloadable="true"/>

 

在/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,售后服务有保障。

wgethttp://www.caucho.com/download/resin-4.0.33.tar.gz

tar –xzvf  resin-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/

make&&make install

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

 

而后启动resin,/usr/local/resin/bin/resin.shstart 测试成功访问以下图(发布目录未修改以前resin默认测试页面):

 

5.3.4    Resin性能优化

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

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

     <!-- SSL port configuration: -->

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

        <jsse-sslself-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 配置以下:

 

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

建立两个发布目录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

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

5.4   NginxTomcat动静分离

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

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

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

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

 

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

####www.wuguangke.cn

server

  {

   listen       80;

   server_name  www.wuguangke.cn;

    indexindex.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 ;tarxzf  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 ;tarxzf mysql-5.1.63.tar.gz ;cd mysql-5.1.63 ;./configure  --prefix=/usr/local/mysql--enable-assembler &&make &&make install

配置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 ;tarjxf  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/

 

Ø  源码安装Apache+PHP整合

整合apache+php环境,修改httpd.conf配置文件,而后加入以下语句:

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

AddType     application/x-httpd-php .php

DirectoryIndex  index.phpindex.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环境搭建成功。

 

Ø  源码安装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论坛,以下图,选择“我赞成”

 

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

 

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

create database discuz charset=utf8;

grant all on discuz.* toroot@'localhost' identified by "123456";

 

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

 

自此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=1max_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以下图所示:

 

 查看系统启动的端口及进程以下图:

 

自此,LNAMP所有整合完毕,接下来就是对系统内核、各个服务、架构进行优化,一样优化是一项长期的任务。

5.6   构建DNS域名解析服务器

咱们天天打开的网站,他是如何来解析,而且咱们怎么能获得网站的内容反馈的界面呢?那什么是DNS呢(DNS(Domain Nameservice,域名服务,主要用于因特网上做为域名和IP地址相互映射)那今天咱们未来学习DNS服务器的构建,DNS服务能够算是Linux服务中比较难的一个了,尤为是配置文件书写,少一个字符都有可能形成错误。

那什么是DNS呢?简单的说就是完成域名到IP的解析过程。简洁的域名能让人们更方便记忆,不须要记那么长的IP访问某一个网站。

DNS解析过程究竟是怎样的呢?

第一步:客户机访问某个网站,请求域名解析,首先查找本地HOSTS文件,若是有对应域名、IP记录,直接返回给客户机。若是没有则将该请求发送给本地的域名服务器:

第二步:本地DNS服务器可以解析客户端发来的请求,服务器直接将答案返回给客户机。

第三步:本地DNS服务器不能解析客户端发来的请求,分为两种解析方法

一、采用递归解析:本地DNS服务器向根域名服务器发出请求,根域名服务器对本地域名服务的请求进行解析,获得记录再给本地DNS服务器,本地DNS服务器将记录缓存,并将记录返给客户机。

二、采用迭代解析:本地DNS服务器向根域名服务器发出请求,根域名服务器返回给本地域名服务器一个可以解析请求的根的下一级域名服务器的地址,本地域名服务器再向根返回的IP地址发出请求,最终获得域名解析记录。

如上只是简单介绍了一下DNS相关知识,言归正传,那接下来咱们正式来搭建一下DNS服务器。

1)  首先安装bind,执行yum  install  bind* -y

2)  安装完毕修改bind配置文件/etc/named.conf内容以下:

options {

        listen-on port 53 { any; };

        listen-on-v6 port 53 { any; };

        directory       "/var/named";

        dump-file      "/var/named/data/cache_dump.db";

        statistics-file"/var/named/data/named_stats.txt";

        memstatistics-file"/var/named/data/named_mem_stats.txt";

        allow-query     { any; };

        recursion yes;

        dnssec-enable yes;

        dnssec-validation yes;

        dnssec-lookaside auto;

        /* Path to ISC DLV key */

        bindkeys-file"/etc/named.iscdlv.key";

        managed-keys-directory"/var/named/dynamic";

};

logging {

        channel default_debug {

                file"data/named.run";

                severity dynamic;

        };

};

 

zone "." IN {

        type hint;

        file "named.ca";

};

include "/etc/named.rfc1912.zones";

include"/etc/named.root.key";

3)  修改vi /etc/named.rfc1912.zones配置文件(用于定义根区域和自定义区域),添加以下两段内容:

#add named by wugk

zone "wugk.com" IN {

        type master;

        file "wugk.com.zone";

        allow-update { none; };

};

zone "188.92.182.in-addr.arpa"IN {

        type master;

        file "wugk.com.arpa";

        allow-update { none; };

};

4)   在/var/named/目录添加以下文件:

Wugk.com.zone正向解析文件内容以下:

$TTL 86400

@   IN SOA  ns.wugk.com. root (

                    42  ; serial

                    3H  ; refresh

                    15M ; retry

                    1W  ; expire

                    1D )    ; minimum

@               IN NS           ns.wugk.com.

ns               IN A             182.92.188.163

www             IN A            182.92.188.163

@               IN MX 10         mail.wugk.com.

mail            IN A              182.92.188.163

Wugk.com.arpa反向解析文件内容以下:

$TTL 86400

@   IN SOA  ns.wugk.com. root (

                    42  ; serial

                    3H  ; refresh

                    15M ; retry

                    1W  ; expire

                    1D )    ; minimum

 

@   IN NS      ns.wugk.com.

163 IN PTR      mail.wugk.com.

163 IN PTR      ns.wugk.com.

163 IN PTR      www.wugk.com.

 

5)   测试DNS服务器:

找一台客户端,PC或者其余服务器,将客户端的DNS修改成服务器端DNS,访问解析的域名能正常访问即证实DNS服务器搭建成功。

5.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数据库压力不断增长,须要对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.33.10为master主服务器,192.168.33.11为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.33.10 

 

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 masterstatus;

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

| File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |

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

| mysql-bin.000006|       98 |              |                  |

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

1 row inset (0.00 sec)

而后在slave服务器指定master IP和同步的pos点:

change master to

master_host='192.168.33.10',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=98;

在slave启动slave start,并执行show slave status\G查看Mysql主从状态:

 

Slave_IO_Running: Yes

Slave_SQL_Running: Yes两个状态为YES,表明slave已经启动两个线程,一个为IO线程,一个为SQL线程。

而后在Master服务器建立一个数据库和表,命令以下:

 

而后去slave服务器查看是否有mysql_ab_test数据库和相应t0的表,若是存在则表明Mysql主从同步搭建成功:

 

 一样还能够测试在master服务器插入两条数据,在slave查看insert数据是否已同步:

 128 master上执行以下图:

 

129 slave上执行以下图,在master插入的数据已经同步到slave上:

 

 自此Mysql主从搭建完毕,如今有一个问题,若是master服务器down机了,如何快速恢复服务呢?

能够经过两种方法:

第一种方法,若是程序链接的是master的IP,直接在slave服务器上添加master的IP便可。这个手动去操做,并且须要花费时间比较长,可能还会出现误操做的状况,不推荐。

第二种方法,能够使用keepalived、heartbeat做为HA检测软件,检查MySQL服务是否正常,不正常则自动切换到slave上,推荐使用。

Ø  MySQL+keepalived高可用配置

继上一章节MySQL主从配置完毕后,接着配置keepalived服务,主要用于Mysql故障自动切换。那说到keepalived,keepalived究竟是什么呢?

keepalived是一个相似于layer3, 4& 7交换机制的软件,也就是咱们平时说的第3层、第4层和第7层交换。

Keepalived的做用是检测web服务器的状态,若是有一台web服务器、Mysql服务器宕机,或工做出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工做正常后Keepalived自动将web、Mysql服务器加入到服务器群中,这些工做所有自动完成,不须要人工干涉,须要人工作的只是修复故障的WEB和Mysql服务器。

Keepalived安装配置:

tar zxfkeepalived-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

! ConfigurationFile 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_instanceVI_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.33.100 

    } 

virtual_server192.168.33.100 3306 { 

    delay_loop 6    

    lb_algo wrr    

    lb_kind DR   

    persistence_timeout 60    

    protocol TCP         

    real_server 192.168.33.10 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.33.11 ;优先级从100改为90便可。

在master、slave数据库上建立/data/sh/mysql.sh脚本,内容为:

pkill  keepalived

而后分别重启两台数据库上keepalived服务便可。最后测试中止master Mysql服务,是否会自动切换到Backup上。

关于Mysql集群高可用就在此告一段落,固然除了keepalived高可用以外,Mysql优化还能够进行读写分离、Mysql+DRBD、拆分表等等优化,有兴趣的童鞋能够继续深刻研究。

5.8   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为最少链接模式)

LVSNAT原理:用户请求LVS到达director,director将请求的报文的目标地址改为后端的realserver地址,同时将报文的目标端口也改为后端选定的realserver相应端口,最后将报文发送到realserver,realserver将数据返给director,director再把数据发送给用户。(两次请求都通过director,因此访问大的话,director会成为瓶颈)

LVSDR原理:用户请求LVS到达director,director将请求的报文的目标MAC地址改为后端的realserver MAC地址,目标IP为VIP(不变),

源IP为用户IP地址(保持不变),而后Director将报文发送到realserver,realserver检测到目标为本身本地IP,若是在同一个网段,而后将请求直接返给用户。若是用户跟realserver不在一个网段,则经过网关返回用户。(此种转发效率最高)

LVSTUN原理:跟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.gz

ln -s/usr/src/kernels/2.6.* /usr/src/linux //IPVS模块编译进内核里,须要作软链接

tar xzvfipvsadm-1.24.tar.gz &&cd ipvsadm-1.24 && make && make install

LVS安装完毕以后,须要进行配置,配置的步骤有两步,第一步为定义端口服务,第二步为添加realserver后端服务。

ipvsadm -A -t192.168.33.188:80 -s rr

ipvsadm -a -t192.168.33.188:80 -r 192.168.33.12 -m -w 2

ipvsadm -a -t192.168.33.188:80 -r 192.168.33.13 -m -w 2

参数说明:

-A 增长一台虚拟服务器地址。

-t 虚拟服务器提供的是tcp服务。

-s 使用的调度算法

-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相应稳定版本:

cd /usr/src ;wget -c  http://www.keepalived.org/software/keepalived-1.1.15.tar.gz

tar -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 File forkeepalived

 

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 100

    advert_int 5

    nopreempt

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.33.188  

    }

}

 

virtual_server192.168.33.188 80 {

    delay_loop 6   

    lb_algo wrr   

    lb_kind DR  

#    persistence_timeout 60    

    protocol TCP        

 

    real_server 192.168.33.12 80 {

        weight 100       

        TCP_CHECK {

        connect_timeout 10

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

    real_server 192.168.33.13 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.33.11

  }

}

#REAL_SERVER_1

virtual_server 192.168.33.11 80 {

  delay_loop 6

  lb_algo wlc

  lb_kind DR

  persistence_timeout 60

  protocol TCP

  real_server 192.168.33.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.33.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

#LVSClient Server

VIP=192.168.33.188

case  $1 in                                                                                                                                                                                                                                                   

start)                                                                                                                                                                                                                                           

    ifconfig lo:0 $VIP netmask 255.255.255.255broadcast $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防火墙临时关闭便可。

LVS+keepalived+Nginx+Apache+PHP+MySQL+Memcached+Redis

 

 

 

5.9   Squid缓存服务器配置

随着网站访问人数愈来愈多,对体验的要求也愈来愈高,网站承受的并发和压力也愈来愈大,因此须要对网站和架构进行优化,优化的策略有不少,系统内核、程序、配置均衡、加入缓存等,目前主流缓存服务器主要有squid、varnish、nginx_cache,那今天咱们来讨论使用老牌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安装,根据实际经验使用,squid 2.6系列的squid比较稳定,能够考虑采用。

CentOS5.8上yum安装squid 2.6方法:

yum install -y squid

其余系统源码安装squid 2.6.24版本:squid-2.6.STABLE24.tar.bz2

tar -jxfsquid-2.6.STABLE24.tar.bz2 ;cd squid-2.6.STABLE24

./configrue--prefix=/usr/local/squid/ --enable-storeio=ufs,diskd ;make ;make install

源码安装的配置文件内容以下:

http_port 80 accelvhost vport

cache_peer192.168.33.12 parent 80 0 originserver name=wugk1

cache_peer192.168.33.13 parent 80 0 originserver name=wugk2

cache_peer_domain wugk1www.wugk1.com

cache_peer_domain wugk2www.wugk2.com

visible_hostnamelocalhost

forwarded_for off

via off

cache_vary on

acl manager protocache_object

acl localhost src 127.0.0.1/32

acl to_localhost dst127.0.0.0/8 0.0.0.0/32

acl localnet src10.0.0.0/8

acl localnet src172.16.0.0/12

acl localnet src192.168.0.0/16

acl all src 0.0.0.0/0

acl CONNECT methodCONNECT

http_access allowmanager localhost

http_access deny manager

http_access allowlocalnet

http_access allowlocalhost

http_access allow all

acl PURGE method PURGE

http_access allow PURGElocalhost

http_access deny PURGE

cache_mem 1000 MB

maximum_object_size 8MB

maximum_object_size_in_memory256 KB

hierarchy_stoplistcgi-bin ?

coredump_dir/usr/local/squid/var/cache

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

Yum安装squid.conf配置文件,内容以下:

http_port 80 accel vhost vport

cache_peer 192.168.33.130 parent 80 0originserver name=wugk1

cache_peer 192.168.33.131 parent 80 0originserver 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 dst127.0.0.0/8 0.0.0.0/32

acl localnet src10.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 808080         # http

acl Safe_ports port21          # ftp

acl Safe_ports port443         # 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 16256

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.33.10 parent 80 0originserver name=wugk1

cache_peer 192.168.33.11 parent 80 0originserver 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 # RFC1918possible 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

 

Squid经常使用命令使用:

Squidclient能够用来清理squid缓存,查看squid状态等功能。

使用方法:
*取得squid运行状态信息: squidclient -p80 mgr:info
*取得squid内存使用状况: squidclient -p80 mgr:mem
*取得squid已经缓存的列表: squidclient -p80 mgr:objects
*取得squid的磁盘使用状况: squidclient -p80 mgr:diskd
*强制更新某个url:

squidclient -p 80 -m PURGE http://www.wugk1.com/static/image/common/nv_a.png

查看缓存命中率:squidclient -p 80mgr:info |egrep "(Request Hit Ratios|Byte Hit Ratios)"

 

6.  Linux下高并发系统内核优化

1)  优化Linux文件打开最大数:

vi  /etc/security/limits.conf

* soft nproc 65535

* hard nproc 65535

* soft nofile 65535

* hard nofile 65535

为了防止失控的进程破坏系统的性能,Unix和Linux跟踪进程使用的大部分资源,容许用户和系统管理员使用对进程的资源限制,设置的限制有两种: 硬限制和软限制:

hard硬限制是能够在任什么时候候任何进程中设置  但硬限制只能由超级用户修改。

soft软限制是内核实际执行的限制,任何进程均可以将软限制设置为任意小于等于对进程限制的硬限制的值,(noproc)最大线程数和(nofile)文件数。

2)  内核参数的优化

vi /etc/sysctl.conf

net.ipv4.tcp_max_tw_buckets = 6000

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来处理。

net.core.somaxconn = 262144

web应用中listen函数的backlog默认会给咱们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,因此有必要调整这个值。

net.core.netdev_max_backlog = 262144

每一个网络接口接收数据包的速率比内核处理这些包的速率快时,容许送到队列的数据包的最大数目。

net.ipv4.tcp_max_orphans = 262144

系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。若是超过这个数字,孤儿链接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,不能过度依靠它或者人为地减少这个值,更应该增长这个值(若是增长了内存以后)。

net.ipv4.tcp_max_syn_backlog = 262144

记录的那些还没有收到客户端确认信息的链接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。

net.ipv4.tcp_timestamps = 0

时间戳能够避免序列号的卷绕。一个1Gbps的链路确定会遇到之前用过的序列号。时间戳可以让内核接受这种“异常”的数据包。这里须要将其关掉。

net.ipv4.tcp_synack_retries = 1

为了打开对端的链接,内核须要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃链接以前发送SYN+ACK包的数量。

net.ipv4.tcp_syn_retries = 1

在内核放弃创建链接以前发送SYN包的数量。

net.ipv4.tcp_fin_timeout = 1

若是套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端能够出错并永远不关闭链接,甚至意外当机。缺省值是60秒。2.2 内核的一般值是180秒,你能够按这个设置,但要记住的是,即便你的机器是一个轻载的WEB服务器,也有由于大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,由于它最多只能吃掉1.5K内存,可是它们的生存期长些。

net.ipv4.tcp_keepalive_time = 30

当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。

完整的内核优化脚本:

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter= 1

net.ipv4.conf.default.accept_source_route= 0

kernel.sysrq = 0

kernel.core_uses_pid =1

net.ipv4.tcp_syncookies= 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

net.ipv4.tcp_max_tw_buckets= 10000

net.ipv4.tcp_sack = 1

net.ipv4.tcp_window_scaling= 1

net.ipv4.tcp_rmem = 4096        87380   4194304

net.ipv4.tcp_wmem = 4096        16384   4194304

net.core.wmem_default= 8388608

net.core.rmem_default= 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.core.netdev_max_backlog= 262144

net.core.somaxconn = 262144

net.ipv4.tcp_max_orphans= 3276800

net.ipv4.tcp_max_syn_backlog= 262144

net.ipv4.tcp_timestamps= 0

net.ipv4.tcp_synack_retries= 1

net.ipv4.tcp_syn_retries= 1

net.ipv4.tcp_tw_recycle= 1

net.ipv4.tcp_tw_reuse= 1

net.ipv4.tcp_mem = 94500000915000000927000000

net.ipv4.tcp_fin_timeout= 1

net.ipv4.tcp_keepalive_time= 30

net.ipv4.ip_local_port_range= 1024    65530

net.ipv4.icmp_echo_ignore_all= 1

3)  常见内核报错解析

Ø  net.ipv4.tcp_max_tw_buckets错误:

Sep23 04:45:54 localhost kernel: possible SYN flooding on port 80. Sendingcookies.

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

Sep 23 04:45:55localhost kernel: TCP: time wait bucket table overflow

如上错误是因为net.ipv4.tcp_max_tw_buckets设置太小致使,若是内核有如上错误,咱们须要增长net.ipv4.tcp_max_tw_buckets的值。

Ø  Too many open files错误:

 

若是后台报错,大量的too many openfiles错误,通常主要是JAVA应用出现这类错误比较多。咱们须要设置内核打开文件最大数。

ulimit -SHn 51200 临时生效,若是想永久生效,须要写入到系统内核里面:

vi /etc/security/limits.conf

* soft nproc 65535

* hard nproc 65535

* soft nofile 65535

* hard nofile 65535

而后exit退出,从新登陆即生效,也能够写在/etc/profile文件里。

 

7.    Nginx负载均衡机制及常见问题

Nginx 是目前主流的WEB服务器发布软件,不只能够做为强大的web服务器,也能够做为一个反向代理服务器,并且nginx还能够按照调度规则实现动静分离,能够按照轮询、ip_hash、URL哈希、权重等多种方式对后端服务器作负载均衡,同时还支持后端服务器的健康检查。

upstream tdt_wugk {

    server  10.10.141.32:8080 weight=1 max_fails=2 fail_timeout=30s;

    server  10.10.141.32:8081 weight=1 max_fails=2 fail_timeout=30s;

}

一、upstream的 fail_timeout和max_fails,用来判断负载均衡upstream中的某个server是否失效。在fail_timeout的时间内,nignx与upstream中某个server的链接尝试失败了max_fails次,则nginx会认为该server已经失效。在接下来的fail_timeout时间内,nginx再也不将请求分发给失效的server。

二、fail_timeout默认为10秒,max_fails默认为1。是指在10秒内nginx与后端server链接失败一次,若是在10秒内nginx与后端的链接失败达到一次,nginx认为这个server已失效,在接下来的10秒内,nginx将不会分发请求到这台后端。

三、若是max_fails=0,即关闭后端服务器健康检查,若是权重同样,那么每次请求都会有机会发到后端不可用的服务器。另外,fail_timeout设置的时间对响应时间没影响,这个响应时间是用接下来的proxy_connect_timeout和proxy_read_timeout来控制。

四、proxy_connect_timeout

nginx与后端链接的超时时间,单位为秒,默认为60秒。咱们在nginx错误日志里面看到的(110: Connection timedout),就是指nginx与后端链接已经超时。

五、proxy_read_timeout

创建链接后,nginx等候读取后端服务器响应的时间,默认为60秒。在一些比较繁忙的后端,好比线程数常常达到峰值了的tomcat,这个值注意不要设得过低,虽然线程数已经用光,但请求已经进入待队列之中。

六、proxy_send_timeout

nginx转发请求到后端的超时时间,默认为60秒,在这段时间内nginx没将请求数据发到后端将关闭链接。这个在网站有比较多像表单(post)之类的须要留意一下.

七、keepalive_timout时间值意味着:一个http产生的tcp链接在传送完最后一个响应后,还须要等待keepalive_timeout秒后,才开始关闭这个链接。

1)  Nginx配置文件优化参数:

worker_processes 8;

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

worker_cpu_affinity 00000001 00000010 00000100 0000100000010000 00100000 01000000 10000000;

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

worker_rlimit_nofile 102400;

 这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,可是nginx分配请求并非那么均匀,因此最好与ulimit -n的值保持一致。

use epoll;

 使用epoll的I/O模型。

worker_connections 102400;

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

keepalive_timeout 60;

 keepalive超时时间。

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)  Nginx 浏览器缓存优化:

浏览器缓存(Browser Caching) 是为了加速浏览并节约网络资源,浏览器在用户磁盘上对最近请求过的文档进行存储。

nginx能够经过expires 指令来设置浏览器的Header。

Expires 指令设置:

location~ \.(gif|jpg|jpeg|png|bmp|ico|txt|png|js|css|swf|doc)${

           expires30d;

}

3)  系统fstab系统性能优化

当文件被建立,修改和访问时,Linux系统会记录这些时间信息。当系统的读文件操做频繁时,记录文件最近一次被读取的时间信息,将是一笔很多的开销。

因此,为了提升系统的性能,能够在读取文件时不修改文件的atime属性。能够经过在加载文件系统时使用notime选项来作到这一点。

当以noatime选项加载(mount)文件系统时,对文件的读取不会更新文件属性中的atime信息。设置noatime的重要性是消除了文件系统对文件的写操做,文件只是简单地被系统读取。

通常添加在/etc/fstab里面,以下配置:

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                  /proc                   proc    defaults,noatime        0 0

 

 

 

8.    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年的时间,作一件事重在专注,即便如今不会,只要天天进步一点点,天天实践一点点,改变一点点,相信将来更美好。只有专一才能成功。

9.     Linux运维面试总结

1)  面试技巧总结

经过全面具体的学习,咱们已经正式遨游进入了Linux运维世界,接下来咱们就须要正式的找一份Linux岗位的工做,不少人谈到找工做就惧怕,为何呢,惧怕面试不上、面试紧张、知识准备不充分等等。

    经过这样一个完整的Linux高级运维的学习,咱们了解了目前企业里面使用的技术和架构信息,那接下来咱们来总结一下企业通常问什么问题?以及面试的过程当中要注意哪些细节?

总结平常面试的技巧(以正式讲课为准):

1)   首先穿着要得体,最好标准的职业装面试,不能随意穿着;简单一点就是要让人一看你,就感受清爽、能干、有活力。

2)   要准备充分,尽可能提早15分钟到面试公司,提早翻阅资料了解公司的简单背景及相关文化。

3)   保持微笑,不要太古板,要随和,保持心态放松,不要抢话抢答;要懂礼貌,有时候细节决定成败。

4)   在回答问题上要简单明了,不要阐述一个问题绕来绕去,把本身都绕迷糊了;要说到恰到好处。该回答的回答,不应说尽可能别说,作到有的放矢。

5)   要保持谦逊,遇到不会的题目,不知道就是不知道,不要非懂装懂;

6)   面试一般开始会让你作自我介绍,自我介绍说些什么?多长合适?

通常自我介绍,就介绍本身叫什么名字,毕业时间学校,已经以前工做经验,本身比较熟练的技能和本身的性格和优势等等;注 介绍完毕,最后说声介绍完毕,谢谢。

7)  面试要有自信,不要低着头,面试是双向的,你选择公司,公司也在选择你。机会是很是的多的,关键是看你本身是否能把握住,是否以前已经准备好。

8)  面试的心态必定要保持平静,不要由于一次面试不上,就以为本身处处都是缺点,要总结本身上次面试的不足,而后下一次改变掉,相信坚持不懈必定能找到满意的工做。

9)  最后总结一点,作什么事情自信很重要,相信本身能够作到,而后勇敢的去作,结果必定让你倍感惊喜。

2)  面试题目总结

经过不断的面试,咱们会总结到更多的知识和技巧,这里总结一下平常面试到的问题及简单回答方法:

1)  你平时在公司主要作什么?

 

2)  大家原来公司的网站架构是怎样的?

 

3)  你对哪一块比较熟练或者精通?

 

4)  Squid、varnish等缓存服务器维护过吗?squid缓存代理的原理是什么?缓存命中率怎么查看及清空缓存?

 

5)  LVS的工做原理是什么?有哪些算法?

 

6)  Nginx平常的优化的参数都有哪些?Nginx动静分离作过吗?描述简单的步骤。

 

7)  Linux内核优化,你都优化哪些参数?

 

 

8)  你在维护网站的过程当中,曾经遇到过什么重大的问题?怎么解决的?

 

9)  Shell编程熟练吗?编写一个自动化备份Mysql数据库的脚本?

 

10)  Mysql主从架构的原理是什么?若是主从不一样步,报错了,怎么恢复?

 

11)  若是备份大数据Mysql数据文件?Mysql优化有哪些步骤?

 

12)  FTP主被动模式的区别是什么?

 

13)  Apache两种工做模式的区别及优化?

 

14)  Nagios、cacti维护过吗?平时都监控些什么?

 

15)  大家公司的网络出口带宽是多少?天天网站的PV、UV是多少?

 

16)  你以为Linux运维工程师的职责是什么?

 

 

17)  你为何离职,离职的缘由是什么?

 

 

18)  你将来5-10年的职业规划是什么样的?

相关文章
相关标签/搜索