Linux题目第九关

Posted Zoe233

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux题目第九关相关的知识,希望对你有一定的参考价值。

前言:项目整合

企业项目实战考试:

1. 全网备份解决方案实战

2. NFS集群后段共享存储搭建优化

3. 解决NFS单点实现实时数据同步。

 

环境:

服务器角色 外网ip 内网ip 主机名
web 10.0.0.8 192.168.0.8 web01
nfs 10.0.0.31 192.168.0.31 nfs
backup 10.0.0.41 192.168.0.41 backup


注意:下面的环境准备是基于所有的三个项目的整合,前面的每个blog都是基于模版机之后再模拟的环境。此处相当于做一个提纲总结。

环境准备:

系统基础优化脚本(所有服务器执行)

参考文档:https://www.cnblogs.com/zoe233/p/11958652.html中的5虚拟机环境准备,模版机准备内容。

也可以整合成一个优化脚本:

#!/bin/bash

# stop selinux
# permanent
sed -i \'s#SELINUX=enforcing#SELINUX=disabled#g\' /etc/selinux/config
# temporary
setenforce 0


#iptables off
/etc/init.d/iptables stop
chkconfig iptables off


#services
chkconfig|egrep -v "crond|sshd|network|rsyslog|sysstat"|awk \'{print "chkconfig",$1,"off"}\'|bash


#add users
useradd oldboy
echo "123456"|passwd --stdin oldboy
\\cp /etc/sudoers /etc/sudoers.ori
echo "oldboy ALL=(ALL) NOPASSWD:ALL " >>/etc/sudoers
tail -1 /etc/sudoers
visudo -c


#ntpdate
ntpdate times.aliyun.com
echo \'# time sync\' >>/var/spool/cron/root
echo \'*/5 * * * * /usr/sbin/ntpdate times.aliyun.com >/dev/null 2>&1\' >>/var/spool/cron/root
crontab -l


# ulimit 调整连接数
echo \'* - nofile 65535\' >>/etc/security/limits.conf
tail -1 /etc/security/limits.conf



#kernel
cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000    65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
#以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
EOF

sysctl -p


#yumrepo
yum install wget -y
系统基础优化脚本

 

执行sh -x /server/scripts/envpre.sh可以调试脚本。 确认脚本执行成功后,可以在所有机器上执行。如果是在模版机上设置好的,则直接克隆模版机即可,若是新增的机器,则可以执行脚本。

【Linux系统基础优化】

1. 关闭selinux防火墙

临时关闭selinux
setenforce 0 将状态设置为permissive,给出警告提示,但不会阻止操作,相当于disable
getenforce 查看
永久关闭,修改配置文件/etc/selinux/config
2. 关闭iptables

/etc/init.d/iptables stop 最好执行两遍,确保成功关闭
chkconfig iptables off 
3. 精简开机自启动服务

chkconfig|egrep -v "crond|sshd|network|rsyslog|sysstat"|awk \'{print "chkconfig",$1,"off"}\'
export LANG=en
chkconfig --list|grep 3:on
4. 授权用户oldboy可以sudo

复制代码
[root@oldboy ~]# useradd oldboy
[root@oldboy ~]# \\cp /etc/sudoers /etc/sudoers.ori  # 备份
[root@oldboy ~]# echo "oldboy ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers  # 添加授权语句,oldboy授权无密码登陆,所有权限所有主机
[root@oldboy ~]# tail -1 /etc/sudoers
oldboy ALL=(ALL) NOPASSWD:ALL

[root@oldboy ~]# visudo -c  # 语法检查
/etc/sudoers: parsed OK
复制代码
5. 中文字符集【可选】

cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori
echo  \'LANG=zh_CN.UTF-8\' >/etc/sysconfig/i18n
source /etc/sysconfig/i18n
echo $LANG
6. 时间同步

echo "#time sync" >>/var/spool/cron/root
echo \'*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1\' >> /var/spool/cron/root
crontab -l #  检查
7. 命令行安全

复制代码
[root@oldboy ~]# echo \'export TIMEOUT=300\' >>/etc/profile
[root@oldboy ~]# echo \'export HISTSIZE=50\' >>/etc/profile
[root@oldboy ~]# echo \'export HISTFILESIZE=5\' >>/etc/profile
[root@oldboy ~]# tail -3 /etc/profile
export TIMEOUT=300
export HISTSIZE=50
export HISTFILESIZE=5
[root@oldboy ~]# source /etc/profile
复制代码
8. 调整文件描述符数量(加大)

[root@oldboy ~]# echo \'*       -   nofile    65535 \'>>/etc/security/limits.conf
[root@oldboy ~]# tail -1 /etc/security/limits.conf
*       -   nofile    65535 
9. 内核优化

优化方法是,执行vi /etc/sysctl.conf命令到文件结尾,然后拷贝如下内容并保存。

复制代码
cat >>/etc/sysctl.conf << EOF
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000    65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384

# iptables arguments 
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
EOF
复制代码
sysctl -p命令检查输入的参数是否有误,生效。
系统基础优化的细节说明

 

 

主机名解析(/etc/hosts文件统一):

cat >>/etc/hosts<<EOF
192.168.0.5 lb01
192.168.0.6 lb02
192.168.0.7 web02
192.168.0.8 web01
192.168.0.51 db01
192.168.0.31 nfs01
192.168.0.41 backup
192.168.0.61 m01
EOF

 

目录规划(三个项目所有涉及到的目录):

web01:

  • /var/www/html
  • /app/logs
  • /backup 
  • /server/scripts

nfs:

  • /backup
  • /data/r_shared
  • /data/w_shared
  • /service

backup:

  • /server/scripts
  • /nfsbackup
  • /backup
  • /data/r_aaron
  • /data/w_aaron

 


 1.全网备份解决方案实战

一直三台服务器,分别为web01,backup,nfs。

要求:

  • 每天晚上00点整在Web服务器上打包备份系统配置文件、网站程序目录以及访问日志
  • 并通过rsync命令推送到服务器backup上备份保留(备份思路可以是先在本地按日期打包,然后再利用rsync推送到备份服务器上)。

具体要求如下:

  • Web服务器和备份服务器的备份目录都必须为/backup
  • 系统配置文件包括但不限于:
    • 定时开机服务的配置文件/var/spool/cron/root
    • 开机自启动的配置文件/etc/rc.local
    • 日常脚本的目录/server/scripts
    • 防火墙iptables的配置文件/etc/sysconfig/iptables
    • 更多的配置文件...
  • Web服务器站点目录假定为/var/www/html
  • Web服务器A的日志路径为/app/logs
  • Web服务器本地仅保留7天内的备份(本地保留不能多于7天,因为太多硬盘会满)。
  • 备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本。
  • 备份服务器上要按照备份服务器的IP为目录保存备份,备份的文件按照时间保留。

实施:

部署rsync服务-Rsync服务器端
1. 确认是否安装了rsync服务:
[root@backup-41 tmp]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
2. 创建rsyncd.conf文件,并添加如下内容(文件默认不存在)
注意:man rsyncd.conf可以查询里面的参数。

复制代码
[root@backup-41 tmp]# cat /etc/rsyncd.conf
# rsync_config____start
# created by zoe 
## rsyncd.conf start ##

uid = rsync  # 用户
gid = rsync   # 用户组

use chroot = no # 程序安全设置
max connections = 200  # 客户端连接数
timeout = 300 # 超时时间
pid file = /var/run/rsyncd.pid  # 进程号文件位置
lock file = /var/run/rsync.lock   # 锁文件
log file = /var/log/rsyncd.log  # 日志文件位置

######
[backup] # 模块名称
path = /backup/   # 服务器端提供访问的目录
ignore errors  # 忽略错误
read only = false  # 只读false,即:可读,可写
list = false   # 阻止远程列表(不让通过远程方式查看服务端有啥,不让使用ls这样的命令)
hosts allow = 192.168.0.31/24   # 允许IP
hosts deny = 0.0.0.0/32  # 禁止IP ,如果冲突导致ip连接失败,可以注释掉hosts deny
auth users = rsync_backup  # 虚拟用户,不是系统内真正创建的虚拟用户,是用来客户端和服务端传输数据,创建socket时的虚拟用户,相当于字符串约定的口令
secrets file = /etc/rsync.password  # 虚拟用户,存放用户和密码的文件

##rsync_config____end ## 
复制代码
 3. 添加rsync程序用户
复制代码
[root@backup-41 tmp]# useradd -M -s /sbin/nologin rsync
[root@backup-41 tmp]# tail -1 /etc/passwd
rsync:x:503:503::/home/rsync:/sbin/nologin
[root@backup-41 tmp]# id rsync
uid=503(rsync) gid=503(rsync) 组=503(rsync)
复制代码
4. 创建共享目录/backup,更改属主和数组
[root@backup-41 tmp]# mkdir /backup
[root@backup-41 tmp]# chown rsync.rsync /backup/  # 更改属主和数组,确保客户端通过rsync用户连接时对/backup目录有相关权限  
[root@backup-41 tmp]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 4096 Nov 30 19:14 /backup/
 

5. 启动服务:rsync --daemon
 

复制代码
[root@backup-41 tmp]# rsync --daemon # 启动服务
[root@backup-41 tmp]# ps -ef|grep rsync|grep -v grep  # 查看进程是否存在
root      4637     1  0 19:10 ?        00:00:00 rsync --daemon
[root@backup-41 tmp]# netstat -lntup|grep rsync  # 查看网络状态
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      4637/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      4637/rsync          
复制代码
注意:可以加启动服务,加入到rc.local,开机自启动。

如何重启rsync服务?

pkill rsync #关闭rsync服务
rsync --daemon #启动rsync服务
6. 创建虚拟用户rsync_backup
复制代码
[root@backup-41 tmp]# echo "rsync_backup:123456" >/etc/rsync.password # 将虚拟用户和密码以此格式写入密码配置文件

[root@backup-41 tmp]# ll /etc/rsync.password 
-rw-r--r-- 1 root root 20 Nov 30 19:25 /etc/rsync.password
[root@backup-41 tmp]# chmod 600 /etc/rsync.password   # 由于密码是明文,所以更改权限600,提高安全性
[root@backup-41 tmp]# ll /etc/rsync.password        
-rw------- 1 root root 20 Nov 30 19:25 /etc/rsync.password
复制代码
 
部署rsync服务的步骤说明

 

以上是关于Linux题目第九关的主要内容,如果未能解决你的问题,请参考以下文章

团队项目:第九关攻略

uploadlabs第九关点上传出错

万变不离核心基础第九关——转义符的使用/使转义符失效/保持字符串原始格式

Python面试必考重点之列表,元组和字典第九关——列表排序的方法/列表的sort方法和sorted函数的区别/倒序排列一个列表

第九次作业

201621123054《Java程序设计》第九周学习总结