1. Linux系统优化

1. 系统安装

本着纯净系统的原则,我们在安装系统时,应选择minimal install选项,来执行最小化安装,以便有需要时,安装我们需要的安装软件包。

操作系统为CentOS7.3 1611
下载地址:

https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1611.iso

2. 修改yum源,并安装常用软件

由于系统的yum源并不能每次都选择到国内的yum源进行安装,影响安装效率,可以替换为国内的yum源,进行使用,当然我们有条件,也可以自己定制自己的yum服务器进行安装。

yum -y install wget
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install vim net-tools lrzsz bash-completion rsync sysstat git chrony

3. 清除系统信息

> /etc/issue
> /etc/motd

4. 设置主机名

hostnamectl set-hostname  myserver.com
sed  -i '$a10.0.7.100 myserver.com' /etc/hosts 

5. 关闭防火墙和SELinux

systemctl disable firewalld
sed -ri 's@^(SELINUX=).*@\1disabled@g' /etc/selinux/config

6. 开启时钟同步

systemctl enable chronyd
#重启之后,验证是否启动
chronyc sources -v

7. 添加普通用户登陆系统

useradd xiaohou
echo "123456"|passwd --stdin xiaohou

8. 用户sudo授权

visudo

#设置一个命令别名
Cmnd_Alias SHUTDOWN = /sbin/halt, /sbin/shutdown, /sbin/poweroff, /sbin/reboot, /sbin/init
#对用户xiaohou进行授权,面密码进行一些操作,可以把ALL替换为你想要的命令路径
xiaohou ALL=(root)       NOPASSWD:ALL,!SHUTDOWN
#sudo的日志记录
Defaults logfile=/var/log/sudo.log
Defaults !syslog

9. SSH设置

cat >> /etc/ssh/sshd_config <<EOF
#监听的IP和端口
Port 10022
ListenAddress 0.0.0.0
#禁止root远程登陆
PermitRootLogin no
#重试次数
MaxAuthTries 3
#SSH的最大连接数
MaxSessions 10
#禁止空密码用户登陆
PermitEmptyPasswords no
#禁止DNS和GSSAPI认证,加速响应
UseDNS no
GSSAPIAuthentication no
EOF

10. 命令历史记录和超时环境变量设置

cat >> ~/.bashrc << EOF
# ~/.bash_history的文件大小
export HISTFILESIZE=5000000
# 滚动保存的历史命令条目数
export HISTSIZE=10000
# 实时记录历史命令,默认只有在用户退出之后才会统一记录,容易造成多个用户间的相互覆盖。
export PROMPT_COMMAND="history -a"
# 记录每条历史命令的执行时间
export HISTTIMEFORMAT="%F %T $(whoami) "
EOF

11. ulimit优化

#打开文件数
cat >> /etc/security/limits.conf <<EOF
* soft nofile 100000
* hard nofile 100000
*   - nproc  1024000
EOF
#打开进程数
cat >> /etc/security/limits.d/20-nproc.conf  <<EOF
*          soft    nproc     10000
root       soft    nproc     unlimited
EOF

12. 内核参数优化

cat >> /etc/sysctl.conf <<EOF
#所有用户打开文件描述符的总和
fs.file-max = 1000000
#修改防火墙连接数
net.netfilter.nf_conntrack_max=655360
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
#关闭ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
#关闭路由转发
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
#关闭组合键功能
kernel.sysrq = 0
#使用swap的概率
vm.swappiness = 10
#开启TCP连接中time_wait sockets的快速回收
net.ipv4.tcp_tw_recycle = 1
#timewait的数量,默认是180000
net.ipv4.tcp_max_tw_buckets = 6000
#开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接)
net.ipv4.tcp_tw_reuse = 1
#1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket(单位:内存页)
net.ipv4.tcp_mem = 94500000 915000000 927000000
#保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_fin_timeout = 15
#普通用户可使用的端口范围
net.ipv4.ip_local_port_range = 2048 65000
#arp抑制,lvs时用到
#net.ipv4.conf.lo.arp_ignore = 1
#net.ipv4.conf.lo.arp_announce = 2
#net.ipv4.conf.all.arp_ignore = 1
#net.ipv4.conf.all.arp_announce = 2
#当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2小时
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
#开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
net.ipv4.tcp_syncookies = 1
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 32768
#记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128
net.ipv4.tcp_max_syn_backlog = 20000
#web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
net.core.somaxconn = 32768
#为TCP socket预留用于发送缓冲的内存默认值(单位:字节)
net.core.wmem_default = 8388608
#为TCP socket预留用于发送缓冲的内存最大值(单位:字节)
net.core.wmem_max = 16777216
#为TCP socket预留用于接收缓冲的内存默认值(单位:字节)
net.core.rmem_default = 8388608
#为TCP socket预留用于接收缓冲的内存最大值(单位:字节)
net.core.rmem_max = 16777216
#时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉
net.ipv4.tcp_timestamps = 0
#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
net.ipv4.tcp_max_orphans = 3276800
#为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_synack_retries = 1
#在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 1
EOF

13. VIM创建文件自动添加注释信息

添加至~/.vimrc中

autocmd BufNewFile *.py,*.sh exec ":call SetTitle()"                                                                                                
function! SetTitle()  
        if &filetype == 'sh'  
               call setline(1, "\#!/bin/bash")  
               call setline(2, "\# ******************************************************")
               call setline(3, "\# Author: xiaohou")  
               call setline(4, "\# Email: xx@xx.com")  
               call setline(5, "\# Created Time : ".strftime("%c"))  
               call setline(6, "\# Last Modified:   ")
               call setline(7, "\# File Name: ".expand("%"))  
               call setline(8, "\# Description:   ")  
               call setline(9, "\# ******************************************************")
               normal G
       endif  
       if &filetype == 'python'  
               call setline(1, "\#!/usr/bin/env python")  
               call setline(2, "\# ******************************************************")
               call setline(3, "\# coding=utf8")  
               call setline(4, "\# Author: xiaohou")  
               call setline(5, "\# Email: xx@xx.com")  
               call setline(6, "\# Created Time : ".strftime("%c"))  
               call setline(7, "\# Last Modified: ")
               call setline(8, "\# File Name: ".expand("%"))  
               call setline(9, "\# Version:   ")  
               call setline(10,"\# Description:   ")  
               call setline(11,"\# ******************************************************")
               normal G
       endif  
endfunction
function! SetLastModifiedTime(lineno)  
       let modif_time = strftime("%c")  
       if a:lineno == "-1"  
               let line = getline(6)  
       else  
               let line = getline(a:lineno)  
       endif      
       if line =~ '^////\sLast Modified'  
               let line = substitute( line,':\s\+.*\d\{4\}', ':'.modif_time, "" )  
       else  
               let line = '# Last Modified: '.modif_time  
       endif  
       if a:lineno == "-1"  
               call setline(5, line)  
       else  
               call append(a:lineno, line)  
       endif  
endfunction  
au BufWrite *.py,*.sh call SetLastModifiedTime(-1)  

唔,貌似不错,重启系统吧,reboot

其他可选配置

  1. 精简开机启动服务,建议开启的服务crond,network,syslog,sshd、iptables、udev-post、sysstat
systemctl list-unit-files --type=service|grep enabled
  1. 修改语言环境
vim /etc/locale.conf
LANG="en_US.UTF-8"
  1. 更新软件包
yum update -y
  1. 禁止Linux系统被ping
echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf
sysctl -p
  1. 定时自动清理邮件临时目录垃圾文件,防止磁盘的inodes数被小文件占满
find /var/spool/postfix/maildrop/ -type f |xargs rm -rf
  1. 锁定一些关键文件,放置被删除
chattr +i file
  1. 对于一些分区,可以在挂载时选择noexec,nosuid选项
/dev/sda1 /tmp xfs default,noexec,nosuid 0 0
  1. 设置eth0网卡
sed -ri 's@(GRUB_CMDLINE_LINUX=.*)"@\1 net.ifnames=0"@g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
mv /etc/sysconfig/network-scripts/ifcfg-{ens32,eth0}
sed  -i 's@ens32@eth0@g' /etc/sysconfig/network-scripts/ifcfg-eth0
rm /etc/udev/rules.d/70-persistent-ipoib.rules -f
posted @ 2017-03-19 02:00  kubernetes-ops  阅读(440)  评论(0编辑  收藏  举报