centos

主要的初始化过程包括:

  1. 确认资源信息,配置阿里(有公网)或私有yum源(无公网)
  2. 关闭selinux、防火墙、设置hostname
  3. 所有服务器配置相互SSH免密登录 – 单独执行
  4. 设置文件打开句柄、线程数量限制
  5. 关闭文件系统atime --根据应用需求选择
  6. 关闭THP --根据应用需求选择
  7. 关闭swap --根据应用需求选择
  8. 优化网络连接、somaxconn等内核参数

确认资源信息

#检查CPU虚拟核数
grep processor /proc/cpuinfo |wc -l

#检查内存大小
grep -i MemTotal /proc/meminfo

#验证磁盘速度
dd if=/dev/zero of=/data/testfile bs=1G count=20

#验证网络带宽
time scp /data/testfile root@xxx.xxx.xxx.xxx:/data/

ssh免密

#无交互初始化key
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

#将所有节点的公共key收集后集中写入authorized_keys文件
cat ~/.ssh/id_rsa.pub
vi ~/.ssh/authorized_keys

#首次登录免输入yes -- 选择执行
ssh -o stricthostkeychecking=no xxx

#云端一般采用key登录,以下方式需要输入密码,不一定适用,可以通过其他自动化工具比如saltstack,做authorized_keys文件的分发
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xxx.xxx.xxx.xxx

注意:

#centos7普通用户ssh免密需要:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

磁盘格式化及挂载

#格式化磁盘 -- 注意确认、复核
mkfs.ext4 /dev/vdb

#创建挂载目录
mkdir /data

#查看uuid
blkid /dev/vdb

#配置挂载参数 -- noatime根据需求加
vi /etc/fstab
UUID=xxx /data ext4 defaults,noatime,nofail 0 2

#通过命令自动挂载
mount -a

#检查挂载参数是否生效
mount -t ext4
df -h

yum源配置

#阿里云适用,海外或者其他云根据情况配置
mkdir -p /etc/yum.repos.d/old && mv /etc/yum.repos.d/C* /etc/yum.repos.d/old/
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum clean all
yum makecache

基础软件安装

EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux.
我们在Centos下使用yum安装时往往找不到rpm的情况,官方的rpm repository提供的rpm包也不够丰富,很多时候需要自己编译很痛苦,而EPEL恰恰可以解决这两方面的问题。EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。

#安装epel
yum install epel-release -y

#安装基础常用软件
yum install -y gcc gcc-c++ ntp lrzsz tree telnet dos2unix sysstat iptraf ncurses-devel openssl-devel zlib-devel OpenIPMI-tools nmap-ncat.x86_64 screen iftop iotop nethogs psmisc strace tcpdump vim wget autoconf cmake openssh-clients net-tools iproute lsof dstat deltarpm

lrzsz:rz、sz上传下载工具
sysstat:iostat、vmstat等命令
iotop:查看进程磁盘io排名及统计
nethogs:查看进程网络io排名及统计
iftop:实时网络流量监控
psmisc:pstree、fuser、killall命令
dstat:资源运行情况汇总
deltarpm:rpm包管理依赖
iptraf、ncurses-devel:ip监控工具
ipmi: IPMI是一个开放的标准,监控,记录,回收,库存和硬件实现独立于主CPU,BIOS,以及操作系统的控制权。
screen:GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。
autoconf:是为了产生可移植的shell脚本–configure的编译器
iproute、net-tools:网络工具ip、route、netstat等

基础配置

#字符集设置
echo 'LANG="en_US.UTF-8"' >/etc/locale.conf
source /etc/locale.conf

#文件描述符
cat >> /etc/security/limits.conf << EOF
# 文件句柄
root            soft    nofile          655350
root            hard    nofile          655350
*               soft    nofile          655350
*               hard    nofile          655350
*               soft    nofile          655350
*               hard    nofile          655350
EOF

cat >> /etc/security/limits.d/20-nproc.conf<< EOF
# 线程限制
*          soft    nproc     unlimited
EOF

echo "ulimit -n 655350">>/etc/profile
source /etc/profile

#关闭Selinux及防火墙
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld

#内核优化 具体值根据实际需求配置
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout = 30
vm.swappiness=0
vm.max_map_count = 262144
kernel.pid_max = 65535
net.core.somaxconn = 32768
net.ipv4.ip_forward = 1
EOF

sysctl -p

#设置时区及对时
timedatectl  set-timezone Asia/Shanghai
ntpdate cn.pool.ntp.org
systemctl start ntpd
systemctl enable ntpd

#关闭THP (transparent Huge Pages)
echo never >/sys/kernel/mm/transparent_hugepage/enabled
echo never >/sys/kernel/mm/transparent_hugepage/defrag

#修改服务的文件、进程限制:
echo "DefaultLimitNOFILE=65535" >> /etc/systemd/system.conf
echo "DefaultLimitNPROC=65535" >> /etc/systemd/system.conf

#刷新参数,不需要重启系统
systemctl daemon-reexec

#解决SSH慢问题 -- 选择操作
sed -i "s/#UseDNS yes/UseDNS no/g" /etc/ssh/sshd_config
service sshd restart

#主机名加入hosts -- 选择操作
echo "127.0.0.1 `hostname`" >> /etc/hosts