Linux 系统生产环境配置指南

时间:2022-10-28 13:54:41

1.服务器基本配置

1、物理服务器使用RAID1或RAID10磁盘配置,虚拟服务器不受此限制

2、物理服务器操作系统使用整体物理硬盘

3、虚拟服务器系统盘80G,数据盘按业务需求新增并附加

2.安装步骤及注意事项

2.1.系统安装

最小化安装系统,安装基本的开发组件,不安装图形界面

2.2.配置软件源

配置升级使用阿里云资源,包括EPEL资源

​https://opsx.alibaba.com/mirror​

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm
yum install https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.1-1.el7.x86_64.rpm
yum makecache
yum update

2.3.安全设置

默认启动防火墙,禁用selinux,添加时间同步

yum install vim wget iftop lsof ntpdate
systemctl enable firewalld
systemctl start firewalld
vim /etc/selinux/config
crontab -e
00 00 * * * /usr/sbin/ntpdate 192.168.0.1 #每天0点定期更新

3.其他软件安装

3.1.zabbix

使用上面的资源安装zabbix

3.2.MySQL数据库

https://mirrors.cloud.tencent.com/mysql/yum/mysql-8.0-community-el7-x86_64/mysql80-community-release-el7-3.noarch.rpm
vi /etc/yum.repos.d/MariaDB.repo

# MariaDB 10.1 CentOS repository list - created 2016-12-31 08:44 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://mirrors.aliyun.com/mariadb/yum/10.3/centos7-amd64
gpgkey = http://mirrors.aliyun.com/mariadb/yum//RPM-GPG-KEY-MariaDB
gpgcheck = 1

3.3.容器安装

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

注意:其他注意事项在下面的注释中
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。
# yum list docker-ce-selinux- --showduplicates | sort -r
# sudo yum -y install docker-ce-selinux-[VERSION]

# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令
# 经典网络:
# sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
# VPC网络:
# sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo

3.4.高版本 gcc

yum install centos-release-scl scl-utils-build
yum list all --enablerepo='centos-sclo-rh'
yum list all --enablerepo='centos-sclo-rh' | grep "devtoolset-"
yum install -y devtoolset-8-toolchain
scl enable devtoolset-8 bash
gcc --version

Linux 系统生产环境配置指南

3.5.npm 源

curl -sL https://rpm.nodesource.com/setup_12.x | bash -
yum install nodejs
npm config set registry https://registry.npm.taobao.org
npm config ls

Linux 系统生产环境配置指南

3.6.github 加速

通过直接解析 github 的 CDN 地址实现加速访问。

yum -y install bind-utils
nslookup github.global.ssl.fastly.net
nslookup github.com
vim /etc/hosts

Linux 系统生产环境配置指南

3.7.Golang 加速

go env -w GO111MODULE=on
go env -w GOPROXY="https://goproxy.io,direct"

3.8.安装 yarn

完成 npm 安装后,通过 npm 方式安装。

npm install yarn -g

3.9.git 版本升级

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc gcc perl-ExtUtils-MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.27.0.tar.gz
tar zxvf git-2.27.0.tar.gz
make prefix=/usr/local/git all
yum remove git
make prefix=/usr/local/git install
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile
source /etc/profile

4.参考内容

4.1.fs 参数

fs 参数主要是调整系统的文件打开数,适用与文件交互频繁的系统场景,例如 Oracle 数据库服务器或 Nginx 代理服务器。

cat > /etc/sysctl.d/99-fs.conf <<EOF
# 最大文件句柄数
fs.file-max=1048576
# 最大文件打开数
fs.nr_open=1048576
# 同一时间异步IO请求数
fs.aio-max-nr=1048576
# 在CentOS7.4引入了一个新的参数来控制内核的行为。
# /proc/sys/fs/may_detach_mounts 默认设置为0
# 当系统有容器运行的时候,需要将该值设置为1。
fs.may_detach_mounts=1
EOF

4.2.vm 参数

vm 参数用于优化 vmware 虚拟机的系统配置

cat > /etc/sysctl.d/99-vm.conf <<EOF
# 内存耗尽才使用swap分区
vm.swappiness=10
# 当内存耗尽时,内核会触发OOM killer根据oom_score杀掉最耗内存的进程
vm.panic_on_oom=0
# 允许overcommit
vm.overcommit_memory=1
# 定义了进程能拥有的最多内存区域,默认65536
vm.max_map_count=262144
EOF

4.3.net 参数

net 参数主要用于调整系统的网络参数

cat > /etc/sysctl.d/99-net.conf <<EOF
# 二层的网桥在转发包时也会被iptables的FORWARD规则所过滤
net.bridge.bridge-nf-call-arptables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
# 关闭严格校验数据包的反向路径,默认值1
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
# 进程间通信发送数据, 默认100
net.unix.max_dgram_qlen=512
# 设置 conntrack 的上限
net.netfilter.nf_conntrack_max=1048576
# 设置连接跟踪表中处于TIME_WAIT状态的超时时间
net.netfilter.nf_conntrack_tcp_timeout_timewait=30
# 设置连接跟踪表中TCP连接超时时间
net.netfilter.nf_conntrack_tcp_timeout_established=1200
# 端口最大的监听队列的长度
net.core.somaxconn=21644
# 接收自网卡、但未被内核协议栈处理的报文队列长度
net.core.netdev_max_backlog=262144
# 系统无内存压力、启动压力模式阈值、最大值,单位为页的数量
#net.ipv4.tcp_mem=1541646 2055528 3083292
# 内核socket接收缓存区字节数min/default/max
net.core.rmem=4096 65536 8388608
# 内核socket发送缓存区字节数min/default/max
net.core.wmem=4096 65536 8388608
# 开启自动调节缓存模式
net.ipv4.tcp_moderate_rcvbuf=1
# TCP阻塞控制算法BBR,Linux内核版本4.9开始内置BBR算法
#net.ipv4.tcp_congestion_control=bbr
#net.core.default_qdisc=fq
# 用作本地随机TCP端口的范围
net.ipv4.ip_local_port_range=10000 65000
# 打开ipv4数据包转发
net.ipv4.ip_forward=1
# 允许应用程序能够绑定到不属于本地网卡的地址
net.ipv4.ip_nonlocal_bind=1
# 系统中处于 SYN_RECV 状态的 TCP 连接数量
net.ipv4.tcp_max_syn_backlog=16384
# 内核中管理 TIME_WAIT 状态的数量
net.ipv4.tcp_max_tw_buckets=5000
# 指定重发 SYN/ACK 的次数
net.ipv4.tcp_synack_retries=2
# TCP连接中TIME_WAIT sockets的快速回收
# 4.12内核版本开始移除了 tcp_tw_recycle
net.ipv4.tcp_tw_recycle=0
# 不属于任何进程的tcp socket最大数量. 超过这个数量的socket会被reset, 并告警
net.ipv4.tcp_max_orphans=1024
# TCP FIN报文重试次数
net.ipv4.tcp_orphan_retries=8
# 加快系统关闭处于 FIN_WAIT2 状态的 TCP 连接
net.ipv4.tcp_fin_timeout=15
# TCP连接keepalive的持续时间,默认7200
net.ipv4.tcp_keepalive_time=600
# TCP keepalive探测包发送间隔
net.ipv4.tcp_keepalive_intvl=30
# TCP keepalive探测包重试次数
net.ipv4.tcp_keepalive_probes=10
# TCP FastOpen
# 0:关闭 ; 1:作为客户端时使用 ; 2:作为服务器端时使用 ; 3:无论作为客户端还是服务器端都使用
net.ipv4.tcp_fastopen=3
# 限制TCP重传次数
net.ipv4.tcp_retries1=3
# TCP重传次数到达上限时,关闭TCP连接
net.ipv4.tcp_retries2=15
EOF

4.4.修改limits参数

cat > /etc/security/limits.d/99-centos.conf <<EOF
* - nproc 1048576
* - nofile 1048576
root - nproc 1048576
root - nofile 1048576
EOF

4.5.修改journal设置

sed -e 's,^#Compress=yes,Compress=yes,' \
-e 's,^#SystemMaxUse=,SystemMaxUse=2G,' \
-e 's,^#Seal=yes,Seal=yes,' \
-e 's,^#RateLimitBurst=1000,RateLimitBurst=5000,' \
-i /etc/systemd/journald.conf

4.6.修改终端提示符

export PS1="[\t]\[$(tput setaf 1)\][\u@\h:\W]\[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]"
echo 'export PS1="[\t]\[$(tput setaf 1)\][\u@\h:\W]\[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]"' >> ~/.bashrc

4.7.修改网卡配置信息

CentOS安装设置网卡后,会添加很多不需要的字段,例如UUID、HWADDR什么的

删减后字段信息如下

cat /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=172.16.80.200
NETMASK=255.255.255.0
GATEWAY=172.16.80.2
DNS1=114.114.114.114
NM_CONTROLLED=no
USERCTL=no

4.8.配置 lvs 模块

​LVS的调度算法简介​

cat > /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
# 负载均衡调度算法-最少连接
ip_vs_lc
# 负载均衡调度算法-加权最少连接
ip_vs_wlc
# 负载均衡调度算*询
ip_vs_rr
# 负载均衡调度算法-加权轮询
ip_vs_wrr
# 源地址散列调度算法
ip_vs_sh
EOF

4.9.配置连接状态跟踪模块

cat > /etc/modules-load.d/nf_conntrack.conf <<EOF
nf_conntrack
nf_conntrack_ipv4
#nf_conntrack_ipv6
EOF

4.10.配置 kvm 模块

cat > /etc/modules-load.d/kvm.conf <<EOF
# Intel CPU开启嵌套虚拟化
options kvm-intel nested=1
options kvm-intel enable_shadow_vmcs=1
options kvm-intel enable_apicv=1
options kvm-intel ept=1

# AMD CPU开启嵌套虚拟化
#options kvm-amd nested=1
EOF

5.内核更新

rpm --import ​​https://www.elrepo.org/RPM-GPG-KEY-elrepo.org​​yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum list available --disablerepo=* --enablerepo=elrepo-kernel
yum -y install kernel-lt-4.4.241-1.el7.elrepo --enablerepo=elrepo-kernel