加了两个监控摄像头不显示图像没图像只显示conf.LoginErrorNo-18什么原因

博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Linux运维入门到高级全套常用要点
时间: 06:56:38
&&&& 阅读:1037
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&Linux运维入门到高级全套常用要点
目 录 1. Linux 入门篇..................................................................... 4
1. 1 Linux 操作系统简介........................................................... 4
1. 2 Linux 发展趋势................................................................... 5
1. 3 Linux 系统安装................................................................... 6
1. 4 Linux 学习技巧................................................................. 21
2. Linux 系统篇................................................................................ 22
2.1 Linux 系统管理.................................................................. 22
2.1. 1 Linux 目录初识........................................................... 22
2.1. 2 Linux 常用命令........................................................... 24
2.1. 3 Linux 用户权限........................................................... 26
2.1. 4 Linux 网络配置........................................................... 28
3. Linux 服务篇................................................................................ 32
3.1 Linux 服务部署.................................................................. 32
3.1. 1 构建 NTP 时间服务器.............................................. 32
3.1. 2 构建 DHCP 服务器.................................................... 34
3.1. 3 搭建 Samba 服务器.................................................. 37
3.1. 4 搭建 NFS 服务器...................................................... 42
3.1. 5 搭建 FTP 服务器....................................................... 44
3.1. 6 构建 Apache WEB 服务器........................................ 49
3.1. 7 构建 MySQL 服务器................................................. 54
3.1. 8 LAMP 架构网站搭建.................................................. 59
3.1. 9 Cacti 监控平台搭建................................................... 65
3.1. 10 Nagios 监控平台搭建............................................... 70
3.1. 11 Kickstart 自动化安装平台........................................ 80
4. Linux 编程篇................................................................................ 89
4.1 Linux Shell 编程................................................................. 89
4.1. 1 Shell 编程简介........................................................... 89
4.1. 2 Shell 变量设置........................................................... 90
4.1. 3 Shell 流程控制语句.................................................... 92
4.1. 4 Shell 脚本案例........................................................... 99
4.1. 5 Shell 数组编程......................................................... 103
5. Linux 深入篇.............................................................................. 106
5. 1 构建 Nginx WEB 服务器.................................................. 106
5.1. 1 Nginx WEB 安装........................................................ 107
5.1. 2 Nginx 虚拟主机配置................................................ 109
5.1. 3 Nginx 性能优化........................................................ 110
5.1. 4 Nginx 参数深入理解................................................ 113
5.1. 5 Nginx Rewrite 规则................................................... 115
5. 2 构建 Rsync 同步服务器.................................................. 117
5.2. 1 Rsync 服务端配置.................................................... 117
5.2. 2 Rsync 基于 SSH 同步.............................................. 121
5.2. 3 Rsync 实时同步配置................................................ 121
5. 3 Tomcat/Resin JAVA 服务器............................................. 123
5.3. 1 Tomcat 安装配置...................................................... 123
5.3. 2 Tomcat 性能优化...................................................... 125
5.3. 3 Resin 安装配置......................................................... 127
5.3. 4 Resin 性能优化......................................................... 128
5.3. 5 Resin 多实例配置..................................................... 129
5. 4 Nginx Tomcat 动静分离.................................................. 131
5. 5 LNAMP 高性能架构配置................................................ 135
5. 6 LVS+Keepalived 负载均衡............................................... 143
5. 7 Squid 缓存服务器配置................................................... 154
5. 8 MySQL 高可用架构........................................................ 160
6. Linux 运维职业规划.................................................................. 170
1. Linux 入门篇
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 手机、
Linux 发展趋势 随着 IT 产业的不断发展,用户对网站体验要求也越来越高,而目前主流网站后端承载系统都是 Linux 系统,目前 Android 手机全部基于 Linux 内核研发。企业大数据、云存储、虚拟化等先进技术都是基于 Linux 系统。
2010 年据有关权威部门统计:将来几年内我国软件行业的从业机会十分庞大,中国每年对软件人才的需求将达到 50 万人左右。而对于 Linux 专业人才的就业前景,更是广阔;据悉在未来 5-10 年内 Linux 专业人才的需求将达到 120 万+!尤其是有经验的资深的
Linux 工程师目前非常的缺乏,薪资也是非常诱人,平均月薪都是 15-20K,能力强的薪资更高。
所以机会对每个人都是公平的,关键是我们每个人如何去行动,选择大于努力。
Linux 系统安装 在安装 Linux 系统之前,先来了解 windows 系统结构,windows 系统一般是安装在 C 盘系统盘,同样 Linux 也有类似的系统盘(/根分区),Linux 通常分区为(根分区/、swap 分区),Linux 系统以文件的存储方式,所有的文件都是存储在某个目录下的,类似于 windows 的文件夹。
对于文件系统的属性来说,windows 文件系统类型一般是 ntfs、 fat32 等,而 Linux 文件系统类型则为 ext2、ext3、ext4 等(文件系统:于明确分区上的文件的方法和文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需数据结构。)
安装 Linux 系统是每一个初学者的第一个门槛。在这个过程中间,
最大的困惑莫过于给硬盘进行分区。虽然现在各种发行版本的 Linux 已经提供了友好的图形交互界面,但是很多人还是感觉无从下手。这其中的原因主要是不清楚 Linux 的分区规定。就好比如果我们了解了 windows 分区的规则,系统盘 C、数据盘 D 等,就很好分区了。
在 Linux 中规定,每一个硬盘设备最多只能有 4 个主分区(其中
包含扩展分区)构成,任何一个扩展分区都要占用一个主分区号码,也就是在一个硬盘中,主分区和扩展分区一共最多是 4 个。 下面正式来安装 Linux 系统,安装系统前需要准备如下软件:
ü VMware workstation 10.0
ü CentOS 5.8 x86_i386.iso 安装图解如下:第一步,新建虚拟机如下图:
第二步,选择相关选项,如下图:
第三步选择“稍后安装操作系统”,如下图:
第四步,选择客户机操作系统类型如下图:
第五步,设置虚拟机硬盘大小为 20G,最低不能小于 5G,如下图:
第六步,虚拟机新建完成,如下图:
第七步,修改虚拟机内存为 512M,并添加 ISO 镜像,如下图:
自此,虚拟机新建完成,接下来点击“启动此虚拟机”进行 Linux 系统安装,Linux 系统安装图解如下:第一步,进入安装界面,直接按 Enter 回车键即可。
第二步,光盘检测,选择 SKIP 跳过。
第三步,选择安装过程中的语言,初学者可以选择“简体中文”。
第四步,选择初始化整个硬盘,清除所有数据。
第五步,选择分区方式为“自定义分区“。
第五步,点击“新建“-首先创建一个 swap 交换分区,大小为物理内存的 2 倍(1024M)。
第六步,继续创建分区,选择“新建“,然后创建根分区/,如下图选择,大小为剩余所有空间即可。
第七步,默认点击下一步,同时默认 DHCP 配置,时钟选择上海,去掉 UTC 勾,点击下一步。
第八步,设置 root 密码,至少六位,点击下一步。
第九步,系统安装包选择,这里选择“现在定制“。
第十步,系统安装包选择,左侧选择“开发“----右侧选择”开发工具“和“开发库”,语言选择“支持中文“,其他一概不选择。
安装完毕会提示“reboot“,直接回车即可。
Linux 学习技巧 初学者可以自己安装虚拟机,然后把 linux 常用命令例如 cd、ls、
chmod、useradd、vi 等等多练习几十遍,把自己敲打命令的熟练程度提升上来。
然后根据文档搭建 Linux 下常见的各种服务(DHCP、SAMBA、DNS、
Apache、Mysql 等),遇到问题后可以在 google 搜索,搜索的时候多看几篇文章,综合最好的文章来解决问题。
能够熟练的搭建服务后,理解每个服务的完整配置和优化,可以拓展思维。例如 LAMP,我们一般是把所有服务放在一台机器上,如果分开多台该如何部署呢?等等。平时多积累shell编程,可以在网上查找前辈们写的非常好的shell,自己下载下来多练习几遍,从中吸取,不断提高。
建立一个自己的学习博客,把平时工作学习中的知识都记录在里面,这样也可以供别人来参考同时也能提高自己的编写文档及方案的能力。
通过以上学习能够满足企业的一般应有,需要达到资深级别,还
需要深入学习集群架构、负载均衡、自动化运维、运维开发等知识。
最后还是一句话:多练习才是硬道理!实践出真知!
Linux 系统篇
Linux 系统管理 通过前两章的学习,我们已经能够独立安装 Linux 系统,已经掌握了 Linux 学习的技巧,那接下来,我们将系统的来了解 Linux 系统各目录、权限及常用命令的使用。
Linux 目录初识 通过前面的学习,我们已经能够独立安装完一个 linux 系统,那接下来我们来熟悉一下 Linux 系统里面的各个目录文件夹的大致功能:主要的目录树的有/、/root、/home、/usr、/bin 等目录。下面是一个典型的 linux 目录结构如下: (附图表)
/bin 存放必要的命令
/boot 存放内核以及启动所需的文件
存放设备文件
/etc 存放系统配置文件
/home 普通用户的宿主目录,用户数据存放在其主目录中
/lib 存放必要的运行库
/mnt 存放临时的映射文件系统,通常用来挂载使用。
/proc 存放存储进程和系统信息
/root 超级用户的主目录
/sbin 存放系统管理程序
/tmp 存放临时文件
/usr 存放应用程序,命令程序文件、程序库、手册和其它文档。
/var 系统默认日志存放目录
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 字符,不覆盖原文件里的内容。
初学者常见的命令就如上所示,当然还有很多深入的命令需要学习,后面的课程会讲解。
Linux 用户权限 在 Linux 操作系统中,root 的权限是最高的,相当于 windows 的 administrator,拥有最高权限,能执行任何命令和操作。在系统中,通过 UID 来区分用户的权限级别,UID 等于 0,表示此用户具有最高权限,也就是管理员。其他的用户 UID 依次增加,通过/etc/passwd 用户密码文件可以查看到每个用户的独立的 UID。
每一个文件或者目录的权限,都包含一个用户权限、一个组的权限、其他人权限,例如下:
标红第一个 root 表示该文件所有者是 root 用户,第二个 root 代表该文件的所属的组为 root 组,其他用户这里默认不标出。
[root@node1 ~]# ls -l monitor_log.sh
-rw-r--r-- 1 root root 91 May 7 20:21 monitor_log.sh
[root@node1 ~]#
如果我们想改变某个文件的所有者或者所属的组,可以使用命令
chown chown –R test:test monitor_log.sh 即可。
每个 Linux 文件具有四种访问权限:可读(r)、可写(w)、可执行(x)和
无权限(-)。
利用 ls -l 命令可以看到某个文件或目录的权限,它以显示数据的第一个字段为 准。第一个字段由 10 个字符组成,如下:
[root@node1 ~]# ls -l monitor_log.sh
-rw-r--r-- 1 root root 91 May 7 20:21 monitor_log.sh
[root@node1 ~]#
第一位表示文件类型,-表示文件,d 表示目录;后面每三位为一
第一组:2-4 位表示文件所有者的权限,即用户 user 权限,简称 u 第二组:5-7 位表示文件所有者所属组成员的权限,group 权限,简
称 g 第三组:8-10 位表示所有者所属组之外的用户的权限,other 权限,简称 o 从上面这个文件,我们可以看出,monito_log.sh 文件对应的权限为: root 用户具有读和写的权限,root 组具有读的权限,其他人具有读的权限。
为了能更简单快捷的使用和熟悉权限,rwx 权限可以用数字来表
示,分别表示为 r(4)、w(2)、x(1)。
Monitor_log.sh 权限可以表示为:644 如果给某个文件授权,命令为 chmod:chmod 777 monitor_log.sh
Linux 网络配置 熟悉了常用的命令和 Linux 权限,那接下来如何让所在的 Linux 系统上网呢?管理 linux 服务器网络有哪些命令呢?
Linux 服务器默认网卡配置文件在/etc/sysconfig/network-scripts/下,命名的名称一般为:ifcfg-eth0 ifcfg-eth1 ,eth0 表示第一块网卡,eth1
表示第二块网卡,依次类推。一般 DELL R720 标配有 4 块千兆网卡。
修 改 网 卡 的 IP , 可 以 使 用 命 令 : vi
/etc/sysconfig/network-scripts/ifcfg-eth0 如果是 DHCP 获取的 IP,默认
配置如下:
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=00:0c:29:52:c7:4e
ONBOOT=yes TYPE=Ethernet
如果是静态配置的 IP,ifcfg-eth0 网卡配置内容如下:
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=static
HWADDR=00:0c:29:52:c7:4e
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.149.128 NETMASK=255.255.255.0 GATEWAY=192.168.149.1
网卡参数详解如下:
DEVICE=eth0 #物理设备名
ONBOOT=yes # [yes|no](重启网卡是否激活设备)
BOOTPROTO=static #[none|static|bootp|dhcp](不使用协议|静态分配
|BOOTP 协议|DHCP 协议)
TYPE=Ethernet #网卡类型
IPADDR=192.168.149.128 #IP 地址
NETMASK=255.255.255.0 #子网掩码 GATEWAY=192.168.149.1 #网关地址网卡配置完毕,重启网卡,命令: /etc/init.d/network restart 即可。
查看 ip 命令:ifconfig 查看当前服务器所有网卡的 IP,可以单独指定,
ifconfig eth0 查看 eth0 的 IP 地址。
网卡配置完毕,如果来配置 DNS,首先要知道 DNS 配置在哪个目录
文件下,vi /etc/resolv.conf 文件:
在该文件里面添加如下两条: nameserver 202.106.0.20
nameserver 8.8.8.8
从上到下,分别表示主DNS,备DNS。配置完毕后,不需要重启网卡,DNS 立即生效。
可以 ping 看看效果:
IP 配置完毕后,我们可以通过远程工具来连接 Linux 服务器,常见的
Linux 远程连接工具有:putty、secureCRT(主流)、xshell、xmanger 等工具。
下载安装 secureCRT,打开工具,然后如图配置:
点击左上角 quick connect 快速连接,弹出界面,然后输入 IP,用户名,端口默认是 22,然后点击下方的 connect 连接,会提示输入密码,输入即可。
弹出输入密码框:
进入远程界面,与服务器真实登录一样,然后可以执行命令:
通过这几章的学习,我们已经熟练了 Linux 常用命令的操作,权限网络、网络配置、远程连接等知识,那接下来我们还能做什么呢?我们已经差不多入门了,接下来就是更进一步的服务配置,Linux 系统到底用来做什么呢?接下来的章节将跟大家一起来学习。
Linux 系统的应用,我们最开始介绍的时候简单介绍过,目前大中型企业都用它来承载 web 网站、数据库、虚拟化平台等,那接下来我们将在 Linux 系统安装各种服务和软件来实现 Linux 真正的价值。
Linux 服务篇
Linux 服务部署
构建 NTP 时间服务器 NTP 服务器是用于局域网服务器时间同步使用的,可以保证局域网所有的服务器与时间服务器的时间保持一致,某些应用对时间实时性要求高的必须统一时间。
互联网的时间服务器也有很多,例如 ntpdate ntp.fudan.edu.cn 复
旦大学的 NTP 免费提供互联网时间同步。
NTP 服务器监听端口为 UDP 的 123,那就需要在本地防火墙开启
运行客户端访问 123 端口,vi /etc/sysconfig/iptables 添加如下规则:
-A INPUT -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT
NTP 时间服务器配置:
yum install ntp ntpdate -y 即可!
修改 ntp.conf 配置文件
cp /etp/ntp.conf /etc/ntp.conf.bak
vi /etc/ntp.conf 只修改如下两行,把#号去掉即可!
server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10
以守护进程启动 ntpd
/etc/init.d/ntpd start 即可
(注意*: ntpd 启动后,客户机要等几分钟再与其进行时间同步,否则会提示“no server suitable for synchronization found”错误。)
配置时间同步客户机
crontab -e
增加一行,在每天的 6 点 10 分与时间同步服务器进行同步
10 06 * * * /usr/sbin/ntpdate ntp-server 的
ip &&/usr/local/logs/crontab/ntpdate.log
备注:如果客户机没有 ntpdate,可以 yum –y install ntp 即可!
以下是 ntp 服务器配置文件内容(局域网 NTP,如果需要跟外网同步,
添加外网 server 即可)
driftfile /var/lib/ntp/drift restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6 ::1 server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 includefile /etc/ntp/crypto/pw keys /etc/ntp/keys
下面是参数详解:
restrict default ignore
# 关闭所有的 NTP 要求封包
restrict 127.0.0.1
# 开启内部递归网络接口 lo
restrict 192.168.0.0 mask
#在内部子网里面的客户端可以进行
255.255.255.0 nomodify
网络校时,但不能修改 NTP 服务器的时间参数。
server 198.123.30.132
#198.123.30.132 作为上级时间服务器参考
restrict 198.123.30.132
#开放server 访问我们ntp服务的权限
driftfile /var/lib/ntp/drift
在与上级时间服务器联系时所花费
的时间,记录在 driftfile 参数后面的文件内
broadcastdelay 0.008
#广播延迟时间 自此 NTP 服务搭建完毕,然后在所有客户端 crontab 里面添加如下语句:
0 0 * * * /usr/sbin/ntpdate 10.0.0.155 &&/data/logs/ntp.log
构建 DHCP 服务器 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是
议工作,主要用途:给内部网络或应商自动分配
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- ignore client- next-server 192.168.0.79; filename "pxelinux.0"; subnet 192.168.0.0 netmask 255.255.255.0 {
# --- default gateway option routers 192.168.0.1; option subnet-mask 255.255.252.0;
# option nis-domain "domain.org";
# option domain-name "192.168.0.10";
# option domain-name-servers 192.168.0.11;
# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don‘t
change this unless
# -- you understand Netbios very well # option netbios-node-type 2; range dynamic-bootp 192.168.0.100 192.168.0.200; host ns { hardware ethernet 00:1a:a0:2b:38:81; fixed-address 192.168.0.101;}
参数解析如下:
ddns-update-style interim|ad-hoc|none
参数用来设置DHCP服务器与DNS
服务器的动态信息更新模式:
interim 为 DNS 互动更新模式,
ad-hoc为特殊DNS更新模式,none 为不支持动态更新模式。
next-server ip
pxeclient 远程安装系统,指定 tftp server 地址
开始启动文件的名称,应用于无盘安装,可以是 tftp 的相对或绝对路径
ignore client-updates
为忽略客户端更新
subnet-mask
为客户端设定子网掩码
option routers
为客户端指定网关地址
domain-name
为客户端指明 DNS 名字
domain-name-servers
为客户端指明 DNS 服务器的 IP 地址
为客户端指定主机名称
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
搭建 Samba 服务器 Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件,由服务器及客户端程序构成,
Server Messages Block,信息服务块)是一种在共
享文件和打印机的一种它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。
SMB 协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、其他资源。通过设置“NetBIOS over TCP/IP”使得 Samba 不但能与局域网络主机分享资源,还能与
全世界的电脑分享资源。安装 SAMBA 服务器:
Yum install samba –y
安装完毕,然后做如下设置(过滤#号行、空行如下命令)
cp /etc/samba/smb.conf /etc/samba/smb.conf.egrep -v "#|^$"
/etc/samba/smb.conf.bak |grep -v "^;" &/etc/samba/smb.conf
查看 smb.conf 配置文件如下:
workgroup = MYGROUP
server string = Samba Server Version %v security = share passdb backend = tdbsam load printers = yes cups options = raw
comment=Temporary file space path=/tmp read only=no public=yes
comment=Temporary file space path=/data read only=no public=yes
services: 根据需求修改之后重启服务:
[root@node1 ~]# /etc/init.d/smb restart
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
是对该共享的描述,可以是任意字符串。
/home/test
共享目录路径
browseable= yes/no
用来指定该共享是否可以浏览。
writable = yes/no
writable 用来指定该共享路径是否可写。
available = yes/no
available 用来指定该共享资源是否可用
admin users = admin
该共享的管理者
valid users = test
允许访问该共享的用户
invalid users = test
禁止访问该共享的用户
write list = test
允许写入该共享的用户
public = yes/no
public 用来指定该共享是否允许 guest 账户访问。 在浏览器里面访问方式为:\\192.168.149.128(SMB 文件共享服务端 IP),如何没有权限访问,需要注意防火墙和 selinux 设置,可以使用如下命令关闭:
/etc/init.d/sed –i ‘/SELINUX/s/enforcing/disabled’
/etc/sysconfig/selinux
搭建 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.149.129(rw,sync,no_hide,no_all_squash)
在配置文件中添加如上一行,然后重启Portmap,NFS服务即可,
/etc/init.d//etc/init.d/nfs restart
第一列/data/表示需要共享的目录。
IP 表示允许哪个客户端访问。
IP 后括号里的设置表示对该共享文件的权限。
ro 只读访问 rw 读写访问 sync 所有数据在请求时写入共享 hide 在 NFS 共享目录中不共享其子目录 no_hide 共享 NFS 目录的子目录 all_squash 共享文件的 UID 和 GID 映射匿名用户 anonymous,适合公用目录。
no_all_squash 保留共享文件的 UID 和 GID(默认) root_squash root 用户的所有请求映射成如 anonymous 用户一样的权限(默认)
no_root_squas root 用户具有根目录的完全管理访问
Linux 客户端,如何想使用这个 NFS 文件系统,需要在客户端挂载,挂载命令为:
Mount –t nfs 192.168.149.128:/data/ /mnt 即可。如果有报错根据错误信息排查。常见问题有 rpc 服务没有启动、防火墙没关闭、selinux 未关闭等问题。(拓展* 有兴趣的童鞋可以研究 MFS(分布式文件系统)。)
搭建 FTP 服务器 FTP 是文件传输协议,正是由于这种协议使得可以共享文件。 FTP 使用 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于
vsftpd 是一款在
行版中最主流的 FTP 服务器程序;特点是小巧轻快,安全易用;能让其自身特点得发发挥和掌握。
目前在开源操作系统中常用的 FTP 服务器程序主要有 vsftpd、
ProFTPD、PureFTPd 和 wuftpd 等,这么多 FTP 服务器程序,关键在于自己熟练哪一个就使用哪一个。今天我们来研究一下 VSFTPD 简单安装及使用。安装命令: yum install vsftpd* -y
修改配置文件如下:
#vsftpd config 2014 by wugk
anonymous_enable=NO //禁止匿名用户访问 local_enable=YES //允许本地用户登录 FTP write_enable=YES //运行用户在 FTP 目录有写入的权限 local_umask=022 //设置本地用户的文件生成掩码为 022,默认是 077 dirmessage_enable=YES //激活目录信息,当远程用户更改目录时,
将出现提示信息
xferlog_enable=YES //启用上传和下载日志功能 connect_from_port_20=YES //启用 FTP 数据端口的连接请求 xferlog_std_format=YES //是否使用标准的 ftpd xferlog 日志文件
格式 listen=YES //使 vsftpd 处于独立启动监听端口模式 pam_service_name=vsftpd //设置 PAM 认证服务配置文件名称,文件存放在/etc/pam.d/目录 userlist_enable=YES //用户列表中的用户是否允许登录FTP服务
器,默认是不允许
tcp_wrappers=YES //使用tcp_wrqppers作为主机访问控制方式
1) 第一种方法就是使用系统用户登录 FTP,但是也是比较危险的,
先测试系统用户登录 FTP,在 Linux 系统上创建 useradd test 用
户,并为其设置名,然后在 xp 客户端打开我的电脑资源里面访问
ftp://192.168.149.128,输入用户名和密码即可访问,进行创建和删除操作。
2) 第二种方法比较安全,配置相对复杂一点,就是使用 vsftpd 虚拟用户登录 FTP 服务器进行常见的操作。 ? 首先安装 FTP 虚拟用户需要用到的软件及认证模块
yum install pam* db4* --skip-broken –y
创建并生成 vsftpd 数据库文件 vi /etc/vsftpd/ftpusers.txt,内容如下:
第一行为 FTP 虚拟用户,登录用户名,第二行为密码,第三行为用户名,依次类推。
? 生成数据库文件命令:
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 的连接用来传送数据。
构建 Apache WEB 服务器 Apache 是世界使用排名第一的 Web 件。它可以运行在几
乎所有广泛使用的,由于其安全性被广泛使用,是最流行的 Web 服务器端软件之一。Apache 工作模式有多种,其中最常用的有两种:
Prefork 模式:Prefork MPM 使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。
在大多数平台上,Prefork MPM 在效率上要比 Worker MPM 要高,
但是内存使用大得多。prefork 的无线程设计在某些情况下将比 worker 更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。
Worker 模式:Worker MPM 使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的 HTTP 服务器上,Worker MPM 是个比较好的选择,因为 Worker MPM 的内存使用比 Prefork MPM 要低得多。
Worker MPM 也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉".由于线程共享内存空间,所以一个程序在运行时必须被系统识别为"每个线程都是安全的"。
? 源码安装 Apache
官 方 下 载 目 前 稳 定版 本 , ,解压安装如下,安装 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
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
DocumentRoot "/data/webapps/www2"
ServerName www.wugk2.com
&Directory "/data/webapps/www2"&
AllowOverride All
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
&/Directory&
ErrorLog logs/error_log
CustomLog logs/access_log common
&/VirtualHost&
然后在/usr/local/apache2/conf/httpd.conf 最末尾加入如下配置:
Include conf/extra/httpd-vhosts.conf
重新加载 apache 即可,/usr/local/apache2/bin/apachectl graceful
效果演示如下:
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 ^/(.*)$ [L]
//匹配上面条件,然后跳转到
1) R 强制外部重定向。
2) F 禁用 URL,返回 403HTTP 状态码。
3) G 强制 URL 为 GONE,返回 410HTTP 状态码。
4) P 强制使用代理转发。
5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。
6) N 重新从第一条规则开始运行重写过程。
7) C 与下一条规则关联。
构建 MySQL 服务器 MySQL 是一个小型关联式数据库管理开发者为
司, 目前属于
司,MySQL 被广泛地 的中小型网站中。由于其、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 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/tar
xzf mysql-5.1.63.tar.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_ 创建名为 test_db 数据库 use test_ 进入 test_db 数据库 查看数据库里有多少张表。
create table test01 (id varchar(20),name varchar(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 数据库授权。
刷新权限 mysqldump –uroot –p123456 test_db &/tmp/test.db.MySQL 备
mysql –uroot –p123456 test_db & /tmp/test.db.MySQL 导
mysqladmin –uroot –p123456 p修改 MySQL root 密码 drop database test_ 删除数据库 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 服务即可。
LAMP 架构网站搭建 Linux+Apache+Mysql/MariaDB+Perl/PHP/Python 一组常用来搭建
者服务器的本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的 Web 台。
随着开源潮流的蓬勃发展,开放源 LAMP 已经与
成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个
目前 LAMP 架构是大多数中小企业最青睐的 PHP 架构选择,也是众多Linux SA喜欢选择的一套架构。那接下来我们就实战来操作一下,如果来搭建这样一套架构,当然可以使用 yum 方法,安装命令很简单,一条命令搞定所有。
yum install httpd httpd-devel mysql-server mysql-devel php php-devel php-mysql –y
这一条命令 LAMP 环境即可安装成功,只需要重启 apache、mysql 服务即可。
如果想要更多功能和自定义模块,需要使用源码包的方式来安装
LAMP 架构。如下我们使用源码包来实现 LAMP 架构安装与配置:
? 源码安装 LAMP 之 Apache
yum install apr-devel apr-util-devel –y;
cd /usr/ wget
httpd-2.2.27.tar.cd httpd-2.2.27 ;./configure
--prefix=/usr/local/apache --enable-so --enable-rewrite &&make
&&make install
? 源码安装 LAMP 之 MySQL
cd /usr/wget
xzf mysql-5.1.63.tar.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/tar jxf php-5.3.28.tar.bz2 ;cd php-5.3.28 ;./configure --prefix=/usr/local/php5
--with-config-file-path=/usr/local/php/etc
--with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql/
? 源码安装 Apache+PHP 整合整合 apache+php 环境,修改 httpd.conf 配置文件,然后加入如下语句:
LoadModule php5_module modules/libphp5.so (默认已存在)
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html (把 index.php 加入 index.html 之
前) 然后在/usr/local/apache/htdocs 目录下创建 index.php 测试页面,执行
如下命令:
cat &&/usr/local/apache/htdocs/index.php &&EOF
&?php phpinfo();
重新启动 apache 服务,通过 IP 访问界面如下图,即代表 LAMP 环境搭建成功。
? 源码安装 DISCUZ 论坛下载 discuz 源码包文件,然后解压:
cd /usr/wget
解 压 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.* to root@‘localhost‘ identified by "123456";
点击下一步,直至安装完成,进入等待已久的论坛画面:
自此 LAMP 环境整合并搭建成功,通过 IP 直接访问即可。
Cacti 监控平台搭建 作为一名 Linux SA,日常最重要的就是保证网站正常稳定的运行,
我们需要实时监控网站、服务器的运行状态,这时需要借助开源软件
(cacti、nagios、zabbix 等)监控来实现。
Cacti 是用 php 语言实现的一个它的主要功能是用 snmp 服务获取数据,然后用
存和更新数据,当用户需要查看数据的时候用
成图表呈现给用户。因此,snmp 和
cacti 的关键。
Snmp 关系着数据的收集,rrdtool 关系着图表的生成。 snmp 抓到数据不是存储在 mysql 中,而是存在
成的 rrd 文件中(在 cacti 根目录的 rra 文件夹下,一般以 rra 为后缀名称)。简
单原理图如下:
1) Cacti 服务器端安装
官网下载 cacti 相关软件,一共需要三个软件,下载地址分别如下:
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.cd rrdtool-1.4.5 ; ./configure --prefix=/usr/ local/rrdtool/ make &&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 输入你的密码进入数据库,然后创建数据库:
c创建数据库 grant all on cacti.* to cacti@‘localhost‘ identified by "123456";创建用户
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 安装完毕,测试访问通过 访问出现如下界面,点击 NEXT 下一步。
默认一直点击下一步:
进入登录界面,第一次需要修改密码:
进入 Cacti 配置管理界面
点击 device,可以添加设备,默认可以看到 127.0.0.1 这台服务器。右上角 Add 可以增加设备。
点击 localhost 可以看到具体的设置,包括采用的 snmp 协议版本,监控的名称等:
如果出现 snmp error,检查 snmp 服务是否已启动,或者是否有权限。
出现如上信息则表示正常。
点击左上角第二个按钮,graphs 查看 cacti 图像—选择 localhost 主机
—右边会显示 cacti 每 5 分钟的监控图像。
更多 cacti 深入知识,根据需求深入讲解。
Nagios 监控平台搭建 Nagios 是一款开源的免费网络监视工具,能有效监控 Windows、
Linux 和 Unix 态,交换机网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
Nagios 和 cacti 有什么区别呢?简单的来说 cacti 主要监控流量,服务器状态页面展示;nagios 主要监控服务,邮件及短信报警灯,当然也有简单的流量监控界面,二者综合使用效果更好。(附 Nagios 工作简单逻辑图)
Nagios 监控客户端需要借助插件及 NRPE 软件来实现,NRPE 作为中间的代理程序,接收 Nagios 服务器端发来的请求,另一端在远程主机上指定的相关的监控信息。
1) Nagios 服务端安装
同样安装 nagios 服务需要安装 LAMP 环境,这里省略,可以参考之前的 cacti PHP 环境安装方法:官网下载 nagios 相应版本和插件:
wget /usr/sbin/useradd nagios tar zxvf nagios-3.2.1.tar.gz cd nagios-3.2.1
./configure --prefix=/usr/local/nagios --with-command-group=nagios make all
make install //来安装主程序,CGI 和 HTML 文件
make install-init //在/etc/rc.d/init.d 安装启动脚本
make install-config // 来安装示例配置文件 , 安装的路径是
/usr/local/nagios/etc
make install-commandmode //来配置目录权限 make install-webconf // 配置 nagios 跟 apache 整合
2) 安装 Nagios-plugins
tar zxvf nagios-plugins-1.4.14.tar.gz cd nagios-plugins-1.4.14
./configure --prefix=/usr/local/nagios --with-nagios-user=nagios
--with-nagios-group=nagios make && make install
3) nagios 访问控制设置
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
输入两次密码即可,登录页面的时候会用到这个密码.
4) Nagios 测试访问
重启 nagios ,/etc/init.d//etc/init.d/ http://localhost/nagios/ 如下图:
点击左侧的 Hosts 可以看到右侧默认 localhost 主机的监控,UP 表示主机目前运行正常:
点击左侧的 Services 可以看到右侧默认 localhost 监控的各个服务的状态,绿色 OK 表示正常:
5) Nagios 案例配置默认安装完 nagios,配置文件主目录在/usr/local/nagios/下,目录各
种的功能如下:
Nagios 可执行程序所在目录
Nagios 配置文件所在目录
Nagios CGI 文件所在目录,也就是执行外部命令所需文件所在的目录
Nagios 网页文件所在的目录
Nagios 外部插件所在目录
Nagios 日志文件、lock 等文件所在的目录
var/archives
Nagios 日志自动归档目录
用来存放外部命令文件的目录 这里先来了解 etc/objects 目录主要包括监控主机的配置、模板、监控时间段等配置文件。
简单来添加一个客户端监控的步骤:
cp localhost.cfg 192.168.149.128.cfg
把默认配置文件里面的 locahost、127.0.0.1、check_local 替换成最新
‘s#localhost#192.168.149.128#g;s#127.0.0.1#192.168.149.128#g;s#chec
k_local#check#g ; s#linux-servers#192.168.149.128#g ‘
192.168.149.128.cfg
在 nagios.cfg 36 行 后 加 入 cfg_file=/usr/local/nagios/etc/objects/192.168.149.128.cfg sed -i ‘36a cfg_file=/usr/local/nagios/etc/objects/192.168.149.128.cfg‘
/usr/local/nagios/etc/nagios.cfg
最 后 执 行 :/usr/local/nagios/bin/nagios -v
/usr/local/nagios/etc/nagios.cfg 没有报错即可。
默认有报错,因为没有在客户端安装 nagios 插件及 NRPE,需删掉配
置文件里 disk、swap、process、user、cpu 等监控配置段:
define service{ use local-service host_name 192.168.149.128 service_description Swap Usage check_command check_swap!20!10 }
这里注意* 如果没有配置 check_nrpe 监控,默认不能监控客户端例如 swap、disk、CPU、process 等状态,需要在配置文件里删除或者注释掉。
如下是刚刚添加的默认的客户端监控图:
6) Nagios 客户端插件安装
Nagios 客户端安装需要安装两个软件,nagios-plugins-1.4.15.tar.gz 和 nrpe-2.13.tar.gz,安装方法如下:
tar -xzf nagios-plugins-1.4.15.tar.gz &&cd nagios-plugins-1.4.15 &&./configure – prefix=/usr/local/nagios
&&make &&make install tar -xzf nrpe-2.13.tar.gz && cd nrpe-2.13 &&./configure --enable-ssl --with-ssl-lib &&make all && make install-plugin && make install-daemon && make install-daemon-config chown -R nagios:nagios /usr/local/nagios/ ;cd .. ;cp nrpe.cfg
/usr/local/nagios/etc/nrpe.cfg
启动 nrpe 客户端命令:/usr/local/nagios/bin/nrpe -c
/usr/local/nagios/etc/nrpe.cfg –d
7) Nrpe 客户端配置修改 vi /usr/local/nagios/etc/nrpe.cfg 修改默认配置段的内容如下,
去掉#号,做相应修改。
-c 10command[check_users]=/usr/local/nagios/libexec/check_users -w 5
15,10,5 command[check_load]=/usr/local/nagios/libexec/check-c 30,25,20 _load -w
10 -p /dev/sda2command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20 -c
50 -c 100 command[check_procs]=/usr/local/nagios/libexec/check_procs -w
20 -c 10command[check_swap]=/usr/local/nagios/libexec/check_swap -w
8) Nagios 服务器 Nrpe 配置
Nagios 服务器端也需要安装 nrpe,同时需要定义 Nrpe 监控命令,
写 command.cfg 末尾即可:
define command{ command_name check_nrpe
$ARG1$ command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c
9) Nagios 监控端客户机配置在 192.168.149.128.cfg 加入如下配置段,引用客户端 nrpe.cfg 里面配置的 check_load 命令,命令一般格式为:check_nrpe!command
define service{ use local-service host_name 192.168.149.128 service_description Current Load check_command check_nrpe!check_load
其他同理,添加的方法一样。只要在客户端 nrpe.cfg 里面添加的监控命令,都可以在服务端引用。
10) Nagios 监控端 HTTP 关键词
在真实的线上环境中,如果要监控 HTTP、web、tomcat 某个 URL 关键词,监控网站关键词是否被篡改,如果来实现呢? 这里可以使用默认监控命令 check_http 命令+相关的参数来实现,如下:在 command.cfg 添加如下关键词监控命令:check_http_word,参数解析:-I 指定 IP 或者主机名,-u 指定 URL,-p 指定端口,-s 指定关键词。
define command{ command_name check_http_word
command_line $USER1$/check_http -I
$HOSTADDRESS$ -u $$ARG1$ -p $$ARG2$ -s $ARG3$
然后在服务器端监控主机的配置文件里面引用即可,引用的方法如
也可以在服务器端命令行执行如下命令来做测试,例如监控页面不存在 ATM 关键词,但 82 端口 web 服务可以访问,依然会发送报警。
/usr/local/nagios/libexec/check_http -I 192.168.149.129 -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##g‘ contacts.cfg 如上配置完毕后,重启 nagios 服务,可以测试关闭某个服务,过一会就会收到 nagios 发来的报警邮件。
自此,Nagios 相关的配置就到此为止,当然有兴趣的童鞋还可以进一步研究,例如 nagios 跟 cacti 如何整合,nagios 如何优化等等。
Kickstart 自动化安装平台 随着公司业务不断增加,经常需要采购新服务器,并要求安装
Linux 系统,并且要求 Linux 版本要一致,方便以后的维护和管理,每次人工安装 linux 系统会浪费掉更多时间,如果我们有办法能节省一次一次的时间岂不更好呢?大中型互联网公司一次采购服务器上百台,如果采用人工手动一台一台的安装,一个人得搞坏 N 张光盘,得多少个加班加点才能完成这项”艰巨”的任务呢,我们可以看到全人工来完成这样的工作太浪费人力了,有没有自动化安装平台呢,通过一台已存在的系统然后克隆或者复制到新的服务器呢。Kickstart 可以毫不费力的完成这项工作。
PXE(preboot execute environment,预启动执行环境)是由
开发的最新技术,工作于 Client/Server 的网络模式,支持过网络从远端服务器下载映像,并由此支持通过网络启动在
启动过程中,终端要求服务器分配
址,再用 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 service tftp
disable = no socket_type = dgram protocol = udp
wait = yes user = root server = /usr/sbin/in.tftpd server_args = -u nobody -s /tftpboot per_source = 11 cps = 100 2 flags = IPv4
只需要把 disable = yes 改成 disable = no 即可。
2) TFTP+PXE 配置
要实现远程安装系统,首先需要在 TFTPBOOT 目录指定相关 PXE 内核模块及相关参数。配置步骤如下:
mount /dev/cdrom /mnt 挂载本地光盘
#如果系统是 5.x,默认 tftpboot 目录已经自动创建到/根目录下
#如果系统是 6.x,默认 tftpboot 目录在/var/lib/下,所以 centos6.x
需要做软链接到/根目录下。
cp /usr/lib/syslinux/pxelinux.0 ./
cp /mnt/images/pxeboot/{vmlinuz,initrd.img} ./ 拷贝内核至 tftpboot 目录下
mkdir -p pxelinux.cfg &&cp /mnt/isolinux/isolinux.cfg pxelinux. cfg/default
拷贝 isolinux.cfg 配置文件重命名,系统安装的时候会根据这个文件的配置启动相应的选项。
修改 pexlinux.cfg/default 内容如下:
default linux prompt 1 timeout 10 display boot.msg F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg F5 rescue.msg label centos5.8 kernel vmlinuz append ks=nfs:192.168.0.79:/centosinstall/ks.cfg ksdevice=eth0 initrd=initrd.img label text kernel vmlinuz append initrd=initrd.img text label ks kernel vmlinuz append ks initrd=initrd.img label local
localboot 1 label memtest86 kernel memtest append – 解析:192.168.0.79 是 kickstart 服务器,/centosinstall 是 nfs 共享 linux 镜像的目录,也是 linux 存放安装文件的路径,ks.cfg 是 kickstart 主配置文件;设置 timeout 10 /*超时时间为 10S */;ksdevice=etho 代
表当我们有多块网卡的时候,要实现自动化需要设置从 eth0 安装。 TFTP 配置完毕,由于是 TFTP 是非独立服务,需要依赖 xinetd 服务来启动,启动命令为:
chkconfig tftp --level 35 on && service xinetd restart
3) NFS+KICKSTART 配置
远程系统安装,客户端需要下载系统所需的软件包,所以需要使
用 NFS 或者 httpd 把镜像文件共享出来。
mkdir -p /centosinstall nohup cp -rf /mnt/* /centosinstall & echo “/centosinstall *(rw,sync)” &&/etc/exports
在 NFS 配置文件/etc/exports 中加入如上语句:
/centosinstall *(rw,sync),表示允许任何主机访问/centosinstall 目录,
有读写权限。
配置 kickstart,可以使用 system-kickstart 系统软件包来配置,也可以直接拷贝/root/目录下 anaconda-ks.cfg 重命名为 ks.cfg,并把 ks.cfg 拷贝至刚共享的/centosinstall 目录下,赋权限为 chmod 777 ks.cfg
如下我这里采用配置文件内容如下:vi ks.cfg
# Kickstart file automatically generated by anaconda.
install text nfs --server=192.168.0.79 --dir=/centosinstall key --skip lang zh_CN.UTF-8 keyboard us network --device eth0 --bootproto=dhcp --noipv6 rootpw 123456 firewall --disabled authconfig --enableshadow --enablemd5 selinux --disabled timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda --append="rhgb quiet" clearpart --all --initlabel part /boot --fstype ext3 --size=200 part swap --size=4000
part / --fstype ext3 --size=80000 part /data --fstype ext3 --size=1 --grow
@admin-tools
@development-libs
@development-tools
@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
为了实现 kickstart 安装完系统后,自动初始化系统等等工作,我们可以在系统安装完后,自动执行定制的脚本,需要在 ks.cfg 末尾加入如下配置:
%post mount -t nfs 192.168.0.79:/centos/init /mnt cd /mnt/ ;/bin/sh auto_init.sh
4) DHCP 配置及测试 Pxe+kickstart自动安装系统,需要用到DHCP分配的客户端的IP地址,这里直接上 dhcpd.conf 配置文件:
ddns-update- ignore client- next-server 192.168.0.79; filename "pxelinux.0"; 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 系统。
Linux 编程篇
Linux Shell 编程
Shell 编程简介 shell 最外层。shell 合并编程语言以控制进程和文件,
以及启动和控制其它程序。shell 通过提示您输入,向释该输入,然后处理来自操作系统的任何结果输出来管理您与操作系统之间的交互。
Shell 是用户与 Linux 操作系统之间沟通的桥梁。用户可以输入命令执行,又可以利用 Shell 脚本编程去运行。随着 Linux 企业应用越来越多,维护 Linux 日常工作频繁,所以如果单靠手工去敲打命令是非常困难的,所以学会熟练使用 SHELL 编程是每个 Linux SA 必备的功课。
Linux Shell 种类非常多,常见的有:Bourne Shell(/usr/bin/sh 或
/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell
(/usr/bin/ksh)、Shell for Root(/sbin/sh)等。不同的 Shell 语言的语法有所不同,所以不能交换使用。
最常用的 shell 是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用,也是大多数 Linux 系统默认的 Shell。接下来我们来写一个简单的 shell 脚本。(shell 脚本一般文件名以.sh 结尾,同时文件第一行定义该脚本为 shell 脚本)
vi first_shell.sh #!/bin/bash
#This is my First shell echo “Hello World !”
这就是我们的第一个脚本,是不是很简单呢,注解如下:
#!/bin/bash //表示定义该脚本是一个 shell 脚本(固定格式)。
#This is my First shell //这里的#号属于注解,没有任何的意义,SHELL
不会解析它。
echo “Hello World !” //shell 脚本主命令,我们执行这个脚本讲看
到: Hello World ! 信息。
脚本编写完毕,如何来执行呢,首先执行 shell 脚本需要执行权限,赋予执行权限:
chmod o+x first_shell.sh 然后./first_shell.sh 执行即可;也可以直接使用命令执行: /bin/sh first_shell.sh,显示效果一样。
Shell 变量设置 Shell 编程语言是非类型的解释型语言,不像 C++/JAVA 语言编程时需要事先声明变量,SHELL 给一个变量赋值,实际上就是定义了变量, 在 Linux 支持的所有 shell 中,都可以用赋值符号(=)为变量赋值。
SHELL 变量可分为两类:局部变量和环境变量。局部变量只在创建它们的 shell 脚本中使用。而环境变量则可以在创建它们的 shell 及其派生出来的任意子进程中使用。有些变量是用户创建的,其他的则是专用 shell 变量。
例如在脚本里面定义 A=123 ,定义这样一个变量,前面变量名,后
面是变量的值。
引用变量可以使用$A,把变量放在脚本里面会出现什么样的效果呢?如下:
#!/bin/bash
#Author wugk
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 当前所在的目录
Shell 流程控制语句 在 Linux Shell 编程中,if、for、while、case等条件流程控制
语句用的非常多,把这些学好,对提升脚本的功力有非常大的帮助。
下面将逐个来讲解具体的用法:
? If 条件判断语句
If (表达式) #if ( Variable in Array )
案例一,测试数字大小
if (( $NUM & 4 )) ;then echo “this num is $NUM greater 4 !”
fi 案例二,测试目录是否存在,不存在则新建(注意,中括号之间必须要空格)
#judge dir exist if [ ! -d /data/ ];then mkdir -p /data/ else echo “This DIR is exist,Please exit …..”
逻辑运算符解析:
-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!";
? 循环语句 for
For 变量 in 字符串
案例一,打印 seq 多个数 #!/bin/sh for i in `seq 15`
echo “NUM is $i” done
案例二,找到相关 log,然后批量打包
#!/bin/sh for i in `find /var/log -name “*.log”`
tar –czf 2014log.tgz $i
? 循环语句 while while 条件语句
案例一,while 条件判断数字
#!/bin/sh i=1; while [[ $i -lt 10 ]];do echo $i; ((i++));
案例二,while 逐行读取某个文件
#!/bin/sh while read line do echo $ done & /etc/hosts
? Until 循环语句
until 条件
do action done 直到满足条件,才退出。否则执行 action。
案例一,条件判断数字
#!/bin/sh a=10;
until [[ $a -lt 0 ]];do echo $a;
? Case 选择语句
case $arg in pattern1)
;; pattern2)
;; esac 案例一,创建选择参数脚本
#!/bin/sh case $1 in
monitor_log) monitor_; archive_log) archive_log
* ) echo "Usage:{$0 monitor_log | archive_log |help }"
? select 选择语句
PS3="What you like most of the open source system?" select i in CentOS RedHat Ubuntu do
echo "Your Select System: "$i
Shell 脚本案例 a) 自动删除 test.txt 文件脚本脚本的功能实现从/root/目录cp拷贝test.txt到/tmp目录,并且在/tmp 目录创建一个目录 abc,并且删除原/root/下 test.txt。
首先命名脚本名称为 auto_cp.sh(名称可以自己定义),内容如下:
#!/bin/bash
#This is First shell for auto cp Files
#定义文件和目录变量
FILES=/root/test.txt DIR=/tmp cp $FILES $DIR cd $DIR ; mkdir –p abc rm -rf $FILES
echo “The Shell Scripts exec successfully !”
“自动 CP 并删除文件”的脚本编写完毕,保存退出即可。
b) 自动备份 Mysql 数据库脚本
#auto backup mysql
#Define PATH 定义变量
BAKDIR=/data/backup/mysql/`date +%Y-%m-%d`
MYSQLDB=webapp
MYSQLPW=backup
MYSQLUSR=backup
#must use root user run scripts 必须使用 root 用户运行,$UID 为系
[ $UID -ne 0 ];then echo This script must use the root user ! ! !
sleep 2 exit 0
#Define DIR and mkdir DIR 判断目录是否存在,不存在则新建
[ ! -d $BAKDIR ];then mkdir -p $BAKDIR else echo This is $BAKDIR exists....
#Use mysqldump backup mysql 使用 mysqldump 备份数据库
/usr/bin/mysqldump -u$MYSQLUSR -p$MYSQLPW -d
$MYSQLDB &$BAKDIR/webapp_db.sql
echo "The mysql backup successfully "
c) 自动打包 tar 目录下 log 文件脚本
#auto tar czf shell to Files
#Author wugk
SRC_DIR=/opt/
DES_DIR=/opt/backup/`date +%Y%m%d`
[ ! –d $DES_DIR ];then Mkdir –p $DES_DIR
for i in `find $SRC_DIR -name “*.log”` do tar czf $i.tgz $i done echo “The scripts exec end, Files tar successfully !”
d) 自动拒绝恶意 IP 脚本
#auto drop ssh failed IP address
SEC_FILE=/var/log/secure
#如下为截取 secure 文件恶意 ip 远程登录 22 端口,大于等于 4 次就写入防火墙,禁止以后再登录服务器的 22 端口
IP_ADDR=`tail -n 1000 /var/log/secure |grep "Failed password"| egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort -nr | uniq -c |awk ‘ $1&=4
{print $2}‘`
IPTABLE_CONF=/etc/sysconfig/iptables echo cat &&EOF
++++++++++++++welcome to use ssh login drop failed ip+++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++
++++++++++++++++------------------------------------+++++++++++++++++
echo -n "请等待 5 秒后开始执行 "
for ((j=0;j&=4;j++)) ;do echo -n "----------";sleep 1 ;done echo for i in `echo $IP_ADDR`
#查看 iptables 配置文件是否含有提取的 IP 信息
cat $IPTABLE_CONF |grep $i &/dev/null
[ $? -ne 0 ];then
#判断 iptables 配置文件里面是否存在已拒绝的 ip,如何不存在就不再添加相应条目
sed -i "/lo/a -A INPUT -s $i -m state --state NEW -m tcp -p tcp
--dport 22 -j DROP" $IPTABLE_CONF else
#如何存在的话,就打印提示信息即可
echo "This is $i is exist in iptables,please exit ......"
#最后重启 iptables 生效
/etc/init.d/iptables restart
Shell 数组编程 数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。
今天这里我们来探讨一维数组的定义、统计、引用和删除等操作。首先来定义一个一维数组:
A=( test1 test2 test3 ) ,定义数组一般以括号的方式来定义,数组的值可以随机定义。如何来引用呢?
echo ${A[0]},代表引用第一个数组变量,结果会显示 test1,数组引用从 0 开始,代表第一个数组,依次类推。
echo ${A[1]},代表引用第二个数组变量,结果会显示 test2,数组引用也是从 0 开始计算的。
如何显示该数组所有参数呢?echo ${A[@]} 将显示所有参数 test1 test2 test3 。
如何显示该数组参数个数呢?echo ${#A[@]} 将显示该数组的参数个数 3。
如果替换某个数组呢?例如替换第二个 test2 数组为 test5:echo
${A[@]/test2/test5}
如何删除一个数组呢?例如删除 test3 数组命令为:unset A[2] ;echo
${A[@]}查看效果。
那输入如何在编程来使用呢?请看下面例子:
#Auto Make KVM Virtualization #Auto config bond scripts eth_bond()
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
如上脚本为定义三个数组变量,然后分别来引用,这样让脚本可读性更强,更整洁。关于数组就简单的介绍到这里。
Linux 深入篇
构建 Nginx WEB 服务器 nginx [engine x]写的一个HTTP和反向代理服务器,另外它也可以作为邮件代理服务器。 它已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括 以及
据Netcraft统计,在2012年8月份,使用 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 方式。
Nginx WEB 安装 首先需要安装 pcre 库,然后再安装 Nginx:
#安装 pcre 支持 rewrite 库,也可以安装源码,注*安装源码时,指定 pcre 路径为解压
源码的路径,而不是编译后的路径,否则会报错
(make[1]: *** [/usr/local/pcre/Makefile] Error 127 错误) yum install pcre-devel pcre -y
#下载 Nginx 源码包
cd /usr/wget -c
#解压 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
./configure --user=www --group=www
--prefix=/usr/local/nginx --with- http_stub_status_module --with-http_ssl_module
#.configure 预编译成功后,执行 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
0 May16 ? 00:04:31 nginx: worker process root
2014 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
0 12:34 pts/0 00:00:00 grep nginx
[root@localhost ~]#
Nginx 虚拟主机配置 在真实的服务器环境,为了充分利用服务器资源,一台 nginx web 服务器同时会配置 N 个虚拟域名主机,即多个域名对于同样一个 80 端口。然后服务器 IP 数量很多,也可以配置基于多个 IP 对应同一个端口。
vi 修改 nginx.conf server 段配置内容如下:
#virtual hosts config
server { listen 80; server_name www.a.
#access_log logs/host.access.
location / { root html/a; index index.html index.
server { listen 80; server_name www.b.
#access_log logs/host.access.
location / { root html/b; index index.html index.
创建两个不同的目录 mkdir –p /usr/local/nginx/html/{a,b},然后分
别在两个目录创建两个不同的 index.html 网站页面即可。通过客户端配置 hosts 指向两个域名,然后在 IE 浏览器访问测试效果。
Nginx 性能优化 随着访问量的不断增加,需要对 Nginx 和内核做相应的优化来满足高并发用户的访问,那下面在单台 Nginx 服务器来优化相关参数。
1) Nginx.conf 配置优化:
worker_processes 8;
nginx 进程数,建议按照 cpu 数目来指定,一般为它的倍数。
worker_cpu_affinity 00 10000
为每个进程分配 cpu,上例中将 8 个进程分配到 8 个 cpu,当然可以写多个,或者将一
个进程分配到多个 cpu。
worker_rlimit_nofile 102400;
这个指令是指当一个 nginx 进程打开的最多文件描述符数目,理论值应该是最多打
开文件数(ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不是那么均匀
,所以最好与 ulimit -n 的值保持一致。
使用 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 =
允许系统打开的端口范围。
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 来处理。
Nginx 参数深入理解 Nginx 常用配置参数有 upstream,主要用于均衡后端多个实例:
Nginx 的 upstream 目前支持 5 种算法分配方式:
1) 轮询(默认 rr)
每个请求按时间顺序逐一分配到后端不同的服务器,如果后端某台服务器 down 掉,自动剔除,待恢复自动添加上。
2) Weight 权重
指定轮询权重,权重越高,处理的请求就越多,weight 和访问比率成正比,用于后端服务器性能不均的情况。
3) ip_hash
每个请求根据访问的 IP 的 hash 结果分配,这样每个访客固定访问一个后端}

我要回帖

更多关于 大华监控conf.longin 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信