系统优化

系统优化
linux系统优化,调优
(微调)
加硬件
架构
云  资源流动性 
redhat官方文档
业务上线之前的优化:
1,安装系统优化
以教学环境500G硬盘为例
/boot 100M-200M (只存放grub和启动有关文件,不存放其它)
/ 80G-100G(因为很多人默认会把各种东西放到根目录下,没有单独挂载的分区都属于根);
swap 内存小就一般分2倍,内存大(现在的服务器16G以上内存很常见)就最大4G或8G
/var 50-100G (主要存放日志,邮件,ftp,httpd等家目录,kvm的磁盘文件等)
/vm 50-100G (主要存放vmware虚拟机)
/data 50G-100G左右 (主要存放你的个人数据)
因为教学需要,还需要留一点空间用于以后分区用。
如果你的系统出了严重问题,能排错就排错,不能或很麻烦在重装时只格式化根分区就可以了,重装完后,改写/etc/fstab
根分区分得太小,满了怎么办?如果是lvm可以在线扩容,没用lvm只能去把根分区下的一些数据移到其它分区 (除非用新一代文件系统如btrfs这种)
b,软件包的选择:你需要啥就安装啥(如果你非常在意系统瘦身,那么选择最小化安装,再安装应用时少啥就装啥)
c,bios(UEFI)和grub加密码增强安全性
swap有两种做法(swap文件和swap分区,swap分区会更有效,建议使用swap分区)
swap文件做法如下
# dd if=/dev/zero of=/test/swapfile bs=1M count=1000
# mkswap /test/swapfile
# swapon /test/swapfile
# swapoff /test/swapfile --不用了就swapoff(swapon的反向操作)
swap加分区做法:
先使用fdisk或parted分一个区,如/dev/sdaX
# mkswap /dev/sdaX
# swapon /dev/sdaX
最后写到fstab里
2,
a,关闭不用的服务 (service xxx stop 或 chkconfig xxx off或 ntsysv --level 2345)
有几个服务记录不要关闭了:haldaemon,messagebus这两个服务关闭任意一个,就造成开机鼠标键盘无法用
常见的不关闭服务:network,sshd,rsyslog,vmware,libvirtd等
b,没有服务脚本的可以写服务脚本,或者有些服务脚本写得不好,你可以修改代码
c,服务脚本权限降权(chmod 700 -R /etc/init.d/*),或者结合sudo进行相应授权
d,没有服务脚本的进程,可以使用kill来关闭(注意kill -9和kill -15的区别)
3,静态IP,网关,dns指向
# /etc/init.d/NetworkManager stop
# chkconfig NetworkManager off
然后配置静态ip
# vim /etc/sysconfig/network-scripts/ifcfg-xxx
DEVICE=xxx
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=x.x.x.x
NETMASK=x.x.x.x
GATEWAY=x.x.x.x
DNS1=x.x.x.x
DNS2=x.x.x.x
4,主机名配置和绑定
问题:域名和主机名有什么区别?
域名:公网名字,花钱买,唯一
主机名:内网名字
如果公司现在有100甚至更多台机器,都要互相绑定主机名
方法一:shell脚本,先在其中一台绑定所有机器的IP与名字到/etc/hosts文件,再用shell脚本循环拷到其它所有机器(ssh等效性或expect)
方法二:在安装所有机器时,使用kickstart或cobbler,让其在安装的时候就通过postscripts实现安装完后就统一截IP,配置主机名,绑定主机名);此方法不适合主机名有改变的情况 
方法三:内网DNS(/etc/nsswitch.conf这个文件里面配置了,称查找/etc/hosts,再查找DNS)
方法四:使用自动化运维工具,如puppet
根域
w网
 |
|
自搭dns服务器
5,yum配置
首先要注意yum只能安装rpm包,不能安装源码包。如果觉得安装源码包麻烦,甚至可以自己把源码做成rpm包(要求水平较高)
一般不可能所有服务器都用公网的yum源。建议把本地iso和第三方下载的rpm包都在其中一台服务器做成yum仓库,其他服务器就直接使用这台的yum源就可以了
yum的路径怎么写?
答案:要写repodata的上一级目录的路径
如何下载
a),先配置远程公网yum源路径
如下
[puppet]
name=puppet
baseurl=http://yum.puppetlabs.com/el/6.5/products/x86_64/
enabled=1
gpgcheck=0
b)使用reposync命令
reposync --repoid=puppet
都会下载到本地当前目录
c)因为下载后,没有repodata目录,所以需要手动生成
yum install createrepo -y
createrepo 下载的目录路径/
d)通过服务如httpd做成其它服务器能使用的yum源
--------------------------------------------------------------------
扩展使用yum要注意的一个小例子
使用yum remove 删除软件包时,一般会删除一些依赖包,然后 yum install重新安装,不一定会把这些依赖包自动装回来。所以建议都把这些依赖包手动再安装回来
# rpm -qa |grep ^mysql --我这里查找到已经安装了这么多mysql的软件包
mysql-devel-5.1.71-1.el6.x86_64
mysql-test-5.1.71-1.el6.x86_64
mysql-server-5.1.71-1.el6.x86_64
mysql-connector-java-5.1.17-6.el6.noarch
mysql-5.1.71-1.el6.x86_64
mysql-libs-5.1.71-1.el6.x86_64
mysql-bench-5.1.71-1.el6.x86_64
mysql-connector-odbc-5.1.5r1144-7.el6.x86_64
下面我需要重装这些软件包,在使用yum remove mysql*时删除的包包括依赖性特别的多,这样很可能会因为删除了其它服务需要使用的rpm包,而造成其它服务或系统其它的功能缺失
解决方法:
方法一:
rpm -e mysql-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-devel-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-server-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-test-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-connector-java-5.1.17-6.el6.noarch --nodeps
rpm -e mysql-libs-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-bench-5.1.71-1.el6.x86_64 --nodeps
rpm -e mysql-connector-odbc-5.1.5r1144-7.el6.x86_64 --nodeps
再重装回来
yum install mysql*
方法二:
rpm -qa |grep ^mysql |xargs rpm -e --nodeps
再重装回来
yum install mysql*
方法三:
直接使用yum remove mysql* 去删除包
再用下面的命令重装回来
# cat /var/log/yum.log |grep "Jun 04" |grep Erased |awk '{print $NF}' |xargs yum install -y
--上面三个方法最好的应该是方法二,操作快速,而且不会像方法三那样去删除了其它的依赖性包(因为你删除其它的依赖性包,就算是再安装回来,那么原来的配置文件被刷新了)
6,用户有关的:
a,删除不需要使用的用户(如adm,lp,sync,shutdown等)加强安全(可选)
b,写脚本定期检查无密码账号或uid为0的账号 awk -F: '$3==0 {print $1}' /etc/passwd
c,创建要用的普通用户(如果一个用户只用于跑服务daemon,可以指定家目录为/dev/null,uid小于500,登录环境为/sbin/nologin等,如useradd -r -d /dev/null -s /sbin/nologin xxx) 看需求修改/etc/login.defs文件。或者在登录或登出时有些特殊需要,可以修改/etc/skel/.bash_profile和/etc/skel/.bash_logout
d,做完后,保证口令文件的安全(如,不需要修改就chattr +i /etc/passwd,chattr +i /etc/shadow,chattr +i /etc/group,chattr +i /etc/gshadow)
e,对相应的普通用户做sudo授权
f,限制普通用户的console权限 
rm -rf /etc/security/console.apps/*
g,设置用户自动退出登录时间限制
   如:在/etc/profile里加入 TMOUT=300 表示5分钟不操作,会自动退出
7,按需求定制pam,iptables(firewalld)或selinux的配置
8,内核优化:内核编译优化和内核参数优化(这里讨论内核编译优化)
如果有必要,并且技术水平成熟的情况下,可以重新编译升级内核
问题:OS自带的内核非常稳定,什么情况下需要自己编译内核?
答案:内核如果不支持你所需要的一个功能,可以重编内核来加上这个功能。但是一般来说,没有内核不支持的功能,但redhat自带的内核不一定给你加上了这个功能。
比如,要在linux下支持ntfs格式挂载,方法有:
一,重编内核,加上ntfs挂载功能(因为redhat默认没有加到内核里,但内核是支持的)
二,用第三方软件,把功能做成模块加到内核上,让其支持
还有一个情况需要自己编译内核,就是内核编译优化,简单来说就是把内核里自己用不到的功能都去掉,只留下自己用得到的功能。
注意:生产环境不建议你真的去编译内核,因为你很难编译出一个稳定且正符合你所用的内核。
重编译内核或新内核的步骤:
a)下载新内核源码,解压;OS自带内核源码在(/usr/src/kernels/`uname -r`/,如果此内核源码目录不存在,可以通过yum install kernel-devel -y安装)
b)cd 内核源码目录/
c)make menuconfig
按你需求来选择功能
* 代表编进内核
M 代表编译成模块 需要modprobe xxx装载才能使用
空 代表不需要这个功能
d) 选择好功能后,保存,会把你所有的选择保存到一个.config文件里
e) make
f) make modules_install --把编译后的模块复制到/lib/modules/内核新版本/ 以后就可以用modprobe insmod来装载使用
g) make install
h) reboot 重启你的系统,在grub菜单选择新的内核登录你的OS
9,文件系统
ext2,ext3,ext4,fat32,ntfs,xfs,reiserfs,zfs,btrfs,jfs,nfs,gfs2,ocfs......
下面以rhel6默认ext4为例简单讨论ext4的优化
a,单个文件可以chattr +A xxx 让这个文件的atime不变化(因为atime是文件的访问时间,基本没什么实用价值,所以让其不变化,就是一种优化)
b,只优化单个文件肯定不行,所以需要优化整个文件系统让所有文件atime都不变化
在rhel5里cat一次,atime就会变一次
在rhel6里只有当atime时间早于或等于mtime或ctime之一时,cat这个文件,atime才会变(因为rhel6已经做了相对的优化,主要实现的方法是在mount时加了relatime)
但我们想优化更彻底,那么让atime在任何情况下都不会变,做法为:
# mount -o defaults,noatime /dev/sda7 /test/ --这样做后,/dev/sda7这个分区里的所有文件都不变改变atime了
mount -o defaults,norelatime,strictatime /dev/sda7 /test/ --这样做是做成和rhel5一致,每cat一次文件,文件的atime都会变
所有分区都要这样做,就在/etc/fstab里把所有分区的defaults参数后加,noatime就可以了
但写到fstab里需要重启才能生效,因为根分区不能umount再mount,所以要使用下面remount的参数在线重挂载
# mount -o remount,defaults,noatime /
c,Ext4 提供三种数据日志记录方式: data=writeback 、 data=ordered (默认) data=journal。
data=writeback 速度最快,但不记录文件系统日志,只记录基本元数据,数据安全性低
data=journal 速度最慢。但记录完整文件系统日志,数据安全性高
data=ordered 居中
如果要修改,在mount时用-o data=writeback来挂载就可以.或者在/etc/fstab里defaults,data=writeback就可以了
小实验:
用一个实验分区,分三种日志记录方式去挂载,然后使用dd命令写文件来测试比较速度
mount -o defaults,data=writeback /dev/sda7 /test/
cd /test
dd if=/dev/zero of=test
--最快
mount -o defaults,data=journal /dev/sda7 /test
cd /test
dd if=/dev/zero of=test
--最慢
mount -o defaults,data=ordered /dev/sda7 /test
cd /test
dd if=/dev/zero of=test
--居中
综合上面所述,你可以在/etc/fstab文件里把defaults改为defaults,noatime,data=writeback来提高文件系统速度
小实验:
使用下面命令模拟一个分区丢失superblock,相当于是文件系统出问题
# dd if=/dev/zero of=/dev/sda9 bs=1 count=1024 seek=1024
文件系统出问题,挂载就会报下面的错误
# mount /dev/sda9 /mnt/
mount: you must specify the filesystem type
排错,不能直接重新格式化,那样的话数据全丢了.所以可以用下面的命令修复
# fsck /dev/sda9
另一个课后小实验
把你系统时间改到将来,然后把开机要挂载的分区重新挂载一下(比如boot分区或根分区这种),然后reboot重启系统
会在启动系统时启不来,会报一个"分区挂载时间在将来的错误",解决方法也是fsck接要修复的分区
10,内核参数优化 (不是内核编译,是内核参数修改)
原文地址:https://www.cnblogs.com/skyzy/p/9201433.html