系统优化
系统优化参考链接: https://zhuanlan.zhihu.com/p/340313062
内心OS: 运维好吃经验.. 难道开发不吃经验嘛?可感觉运维比开发更繁琐一丢丢.. 运维不简单啊!! 若几年后我开发不转运维,那我得去考个研... 进行python AI方面的系统化学习 路漫漫其修远兮.. 学到老活到老...
# yum源处理与常用软件包安装
注意:
若从头接手项目, 将部署过程中安装的包缓存本地,将所有主机上的软件包汇总到一起, 做成一个自己的yum源用来后期使用.
若中途接手项目,进行升级时, 测试环境先倒腾一遍,将回滚方案全都写好,一旦出问题,自动运行脚本回滚.. 然后线上环境升级,最开始只升几台,观察一两周,再慢慢扩大升级规模..
# -- 1.将系统默认的yum源移动到指定目录下
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# -- 2.下载aliyun的Base源和epel源
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 update -y # -- 刚装完系统后就立即执行,往后就不要轻易执行此命令啦
# -- 3.安装常用的软件包
yum -y install tree nmap sysstat lrzsz telnet bash-completion bash-completion-extras vim lsof net-tools rsync ntpdate nfs-utils
2
3
4
5
6
7
8
# 规范系统主机名
主机名通常会与 /etc/hosts
文件搭配使用.. 进而实现集群主机之间相互用主机名解析..
hostnamectl set-hostname 主机名 # -- 主机名能够反映出主机的作用即可
vim /etc/hosts # -- 编辑好之后,每台机器都发一份 hosts文件充当的就是DNS服务器的角色
172.16.10.11 nc1 ceph-deploy # -- IP可以对应多个主机名
172.16.10.12 nc2
172.16.10.13 nc3
172.16.10.14 cs1
172.16.10.15 cs2
172.16.10.16 cs3
2
3
4
5
6
7
8
9
# ssh秘钥登录
ssh-keygen # -- 生成私钥与公钥 生成时候还可以加个密码,这样的话,密钥连接时,就需要输入这个密码
ssh-copy-id -i root@服务端ip地址 # -- 把自己的公钥上传到服务端
ssh root@服务端ip地址 # -- 客户端连接到服务端(会通过密钥的方式连接,不再输入服务端的账号和密码)
"""
密钥登录: 通常会在客户端生成公钥和私钥..
将公钥上传给服务器,往后客户端链接服务端的时候,就通过私钥链接即可.
1> xshell客户端对应服务端的软件openssh-server. xshell可通过密钥登录.
xshell配置密钥登录后,在服务端可以禁用传统的账号密码登录..
`vim /etc/ssh/sshd_config` 将PasswordAuthentication yes 改为 PasswordAuthentication no
2> 主机A、主机B..都可以通过密钥登录主机M(AB将该客户端的公钥给M就行) 过程略.
集群之间,主机与主机相连通常私钥不会再加个密码..
主机A: `ssh root@主机M的ip地址 命令` # -- 实现自动化
"""
2
3
4
5
6
7
8
9
10
11
12
13
14
# 关闭SELinux
"""
SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制的实现.
这个功能让系统管理员又爱又恨,这里我们还是把它给关闭了吧,至于安全问题,后面通过其他手段来解决,这也是大多数生产环境的做法,如果非要开启也是可以的.
"""
setenforce 0 # -- 临时关闭
sed 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config # -- 永久配置,重启生效
grep "disabled" /etc/selinux/config # -- 检查结果
2
3
4
5
6
7
# 关闭防火墙或者开发对应的端口
"""
关闭防火墙的目的是为了让初学者学习更方便. 将来在学了Firewalld技术后可再统一开启. 在企业环境中,一般只有配置外网IP的linux服务器才需要开启防火墙,但即使是有外网IP,对于高并发高流量的业务服务器仍是不能开的,因为会有较大性能损失,导致网站访问很慢,这种情况下只能在前端加更好的硬件防火墙了..
"""
# -- 临时关闭
systemctl stop firewalld
# -- 设置开机不启动
systemctl disable firewalld
2
3
4
5
6
7
8
# 配置ntp服务,同步系统时间
# -- 给定时任务加上注释
echo '#Timing synchronization time' >> /var/spool/cron/root
# -- 定时任务
echo '0 */1 * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >> /var/spool/cron/root
# -- 检查结果
crontab -l
2
3
4
5
6
# ulimit
我们可以使用ulimit命令对系统资源进行控制,是临时的配置
# 选项
设置每个用户级/普通用户所能打开的最大进程数目: -u 选项
ulimit -u 3
设置 每个 用户级/普通用户开启的 每个进程 所能分配到的文件描述符/文件句柄数量: -n 选项
"""
文件描述符是linux独有的机制,每打开一个文件,给打开的文件分配一个编号(不是inode!!!)
具体来说,进程每打开一个文件,OS内核就会为该打开的文件分配一个编号(非负整数),该编号称之为文件描述符或者文件handle.
文件打开后的处理逻辑:
进程->文件描述符->操作系统内核->一个具体的文件
即内核(kernel)就是利用文件描述符(file descriptor)来访问文件
文件描述符的数目是可以设置的
一旦设置过小,进程会随着打开的文件数增多,因为达到了文件描述的上限而无法打开文件,从而抛出异常
"""
# -- 注意是同时打开!!!什么场景一个进程会同时打开上千上万个文件?
# 高并发!!达到上限,打不开文件了,用户拿不到数据..进程报IO错误.
ulimit -n 12 # -- 默认是1024个
2
3
4
5
6
7
8
9
10
11
12
13
14
# 文件描述符
[root@localhost ~]# vim fd.py
[root@localhost ~]# cat fd.py
import time
import os
print(os.getpid())
with open('a.txt',mode='wt') as f1,open('b.txt',mode='wt') as f2:
time.sleep(1000)
[root@localhost ~]# python fd.py &
[1] 14762
"""
/proc 进程虚拟文件系统;
/proc/14762 放置该进程相关的所有文件;
/proc/14762/fd 该进程打开的文件.
一个进程可通过文件描述符(数字)关联打开的文件
要注意的是,该进程文件描述符的数量与该进程打开文件的数目不是一一对应的!!!
"""
[root@localhost ~]# cat /proc/14762/fd
总用量 0
# -- 注意哦!! 多个文件描述符可对应同一个文件,这里0 1 2 指文件需要终端的输入,文件产生的结果需要输出到终端
# -- 一个进程产生默认就会带着 0 1 2 这三个文件描述符
# -- 这也跟linux一切皆文件 以及 重定向的知识对应了起来 芜湖~
lrwx------ 1 root root 64 8月 31 10:59 0 -> /dev/pts/1 # -- /dev/pts/1是当前所在终端 标准输入
lrwx------ 1 root root 64 8月 31 10:59 1 -> /dev/pts/1 # -- 标准正确输出
lrwx------ 1 root root 64 8月 31 10:59 2 -> /dev/pts/1 # -- 标准错误输出
l-wx------ 1 root root 64 8月 31 10:59 3 -> /root/a.txt
l-wx------ 1 root root 64 8月 31 10:59 4 -> /root/b.txt
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 永久配置
修改配置文件 /etc/security/limits.conf
# -- 加大文件描述符与最大打开的进程数
"""
<domain><type><item><value>
<domain> 表示要限制的用户
<type> 设定类型
<item> 表示可选的资源
<value> 表示要限制的值
"""
# -- 102400通常够用了.没有一个固定的标准,设置大了,若进程bug会无限占用资源,不安全 设置小了不够用,要权衡.
[root@localhost ~]# cat >>/etc/security/limits.conf<<EOF
> * soft nofile 102400
> * hard nofile 102400
> * soft nproc 102400
> * hard nproc 102400
> EOF
# -- 重启查看
[root@localhost ~]# ulimit -u
102400
[root@localhost ~]# ulimit -n
102400
"""
Ps: 还有个配置文件更精细. /etc/security/limits.d/20-nproc.conf
该文件只用于控制用户最多同时打开的进程数目,优先级高于/etc/security/limits.conf
重启后,修改生效..
"""
[root@egon ~]# cat /etc/security/limits.d/20-nproc.conf
egon1 soft nproc 3 # 用户egon1最多同时开3个进程
egon2 soft nproc 4 # 用户egon2最多同时开4个进程
* soft nproc 5 # 其他用户最多同时开5个进程
root soft nproc unlimited # root用户无限制
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 其他
○ 开启VT和HT
VT 虚拟化之意, Linux虚拟出多个OS运行在一个主机之上..
HT 超线程技术...
Ps: 实体机才会配置,若用的阿里云(本身就是vm)是不需要配置的..
○ 关闭实体机的CPU节能
○ 关闭NetworkManager
进行网卡绑定的话,必须关掉
○ Jumbo frames
万兆网卡MTU=9000,交换机也要进行相应的设置
○ 调整swappiness
linux内存够用,有时候也会使用swap分区..(linux底层算法决定的) 但会导致性能效率降低..
所以在内存够用的时候,让它尽可能的少用swap分区.. 建议调整为10
echo "vm.swappiness = 10" | tee -a /etc/sysctl.conf
sysctl -p
或者 reboot
永久生效
○ 调整Kernel pid max 内核最大的pid个数