美文网首页
Linux运维规范

Linux运维规范

作者: liurongming | 来源:发表于2021-12-11 14:04 被阅读0次

一、主机名规范

1、数字0-9、字母a-zA-Z、连字符-;
2、开头结尾不能为连字符;
3、开头不允许使用数字;
4、用小写字母而不用大写字母;
5、使用合法单词,便于记忆;

修改命令:hostnamectl set-hostname <FQDN>
hostname 命名宗旨:可视化高,精简,FQDN
规则: {类型(bms/ecs/vbs/vms/ecs/cvm/...)}{机器编号/宿主IP后缀}-{城市名}-{操作系统}-{应用环境}-[{项目名}[{项目编号}]]-{应用名称}{本机IP后缀}[-{应用标识}{应用编号}]

  • 类型释义
类型 解释
bms 机房物理机器
kvm kvm虚拟机
vbs virtual Box虚拟机
vms VMware 虚拟机
cvm 腾讯虚拟机
ecs 阿里云虚拟机
aws 亚马逊虚拟机
maz Microsoft Azure虚拟机
ctyun 天翼云虚拟机
  • 系统释义
系统类型 缩写
Red Hat Enterprise Linux rhel rhel7
CentOS ctos ctos7
Fedora fdr fdr7
Oracle Linux rl orl7
Ubuntu ubt ubt1604
CoreOS crs crs1068
Windows win win2019
  • 环境释义
环境类型 全称 缩写
开发环境 development dev
集成环境 integration intgr
测试环境 testing tst
QA验证 QA qa
模拟环境 staging stg
生产环境 production prd
  • 其它释义
    城市名 - 中文拼音全称(英文字母/拼音)
    项目名/编号 - 项目名称(英文字母/拼音)或 选项目编号
    应用名称 - 应用名称(英文字母/拼音)例如it、mysql、nginx等
    应用标识 - 应用标识,例如master、slave等
    应用编号 - 两位应用编号01开始,例如:01、02等等

例如:vbs181-changsha-ctos7-dev-devops-mysql99-master01
示意:virtual Box虚拟机181-长沙-Centos7-开发环境-自动部署项目-Mysql尾数99IP-主库

二、磁盘分区

  • Linux 最佳分区方案
目录 容量
/boot 256MB左右
/swap 0M后续挂载
/home 最大的剩余空间
/var 视服务器功能决定大
/tmp 建议2G以上
/opt 10G左右
... 视情况而定
  • Linux 极简分区方案
目录 容量
/boot 256MB左右
/swap 0M后续挂载
/ 最大的剩余空间

三、初始配置

1、关闭selinunx

默认所有机器关闭selinux
getenforce 查看当前selinux安全工具的状态
setenforce 0 临时修改selinux的状态为自由模式(宽容模式)

# vi /etc/sysconfig/selinux 
    # enforcing - SELinux security policy is enforced.
     #    selinux 策略 强制执行
     # permissive - SELinux prints warnings instead of enforcing.
     # selinux策略不强制执行,只是给与警告

     # disabled - No SELinux policy is loaded.
     # selinux策略不加载执行,禁用
SELINUX=disabled   修改为disabled

 # 永久修改了selinux的状态,需要重新启动linux系统,才会生效

2、关闭防火墙及开放端口

# 安装防火墙工具
yum install firewalld firewalld-config -y
# 打开如下端口,以防止启动防火墙时保障端口能通讯。
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload

以上设置好后,关闭防火墙。即默认关闭防火墙,有需要时再启用。
所有接入机建议开通防火墙,逻辑机及存储机默认关闭,跑内网即可。

iptables -F # 清除防火墙规则
systemctl stop firewalld  # 停止防火墙服务,关闭防火墙 (新式)
service  firewalld stop   # 停止防火墙服务,关闭防火墙(老式)
systemctl  disable firewalld  # 设置firewalld服务开机不启动

3、设置NTP时间同步及合理时区

# 安装时间同步【centos7默认已经安装】
yum -y install chrony
systemctl enable chronyd
systemctl start chronyd
systemctl restart chronyd

# 编辑时间同步
# NTP服务器:
# 210.72.145.44 (国家授时中心服务器IP地址))
# ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址)
vim /etc/chrony.conf
server 210.72.145.44 iburst
server ntp.sjtu.edu.cn iburst

# 查看时间同步状态
timedatectl status
# 开启网络时间同步
timedatectl set-ntp true

# 查看 ntp_servers
chronyc sources -v
# 查看 ntp_servers 状态
chronyc sourcestats -v
# 查看 ntp_servers 是否在线
chronyc activity -v
# 查看 ntp 详细信息
chronyc tracking -v

# 查看日期时间、时区及 NTP 状态
timedatectl

# 查看时区列表
timedatectl list-timezones
timedatectl list-timezones |  grep  -E "Asia/S.*"
# 修改时区
timedatectl set-timezone Asia/Shanghai
# 修改日期时间[一般不需要设置]
timedatectl set-time "2021-09-89 15:20:20"
# 开启 NTP
timedatectl set-ntp true/flase

firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload

# 或者从底层修改时区
echo "Asia/shanghai" > /etc/timezone
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 硬件时钟调整为与本地时钟一致[不推荐设置]
hwclock --systohc --localtime 或 timedatectl set-local-rtc 1
# 将硬件时间设置成 UTC [推荐设置]
hwclock --systohc --utc 或 timedatectl set-local-rtc 0 

# 显示硬件时间
hwclock --show

(1)UTC
整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。
(2)GMT
格林威治标准时间 (Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同,本文中不做区分)
(3)CST
中国标准时间 (China Standard Time)【GMT + 8 = UTC + 8 = CST】
(4)DST
夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用。(中国不使用)

4、更新Yum源

安装wget工具 :yum install wget -y
// 网易163源
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
// 阿里源
wget http://mirrors.aliyun.com/repo/Centos-7.repo

# 以阿里源为例子
cd /etc/yum.repos.d/
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum  makecache

5、更新系统内核及版本

# 所有都升级和改变
# 升级所有包,系统版本和内核,改变软件设置和系统设置
yum update -y

# 只升级包和版本,不升级内核
# 升级所有包和系统版本,不改变内核,软件和系统设置
yum -y upgrade
# 如果加上参数-y,就会自动选择y,不需要你再手动选择!

6、安装基本工具

yum install -y vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop  lsof  ntpdate telnet bridge-utils sysstat 

其它辅助工具

# 辅助工具
yum install expect -y 
yum -y install sshpass

# 按照必要工具
yum -y install gcc gcc-c++ cmake make autoconf libtool-ltdl-devel gd-devel freetype-devel libxml2-devel libjpeg-devel libpng-devel openssl-devel curl-devel bison patch unzip libmcrypt-devel libmhash-devel libevent-devel ncurses-devel mlocate flex libaio-devel ntp openldap-devel libcurl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker iotop bzip2* ntpdate wget zip htop vim iftop nc nmap dstat sysstat lrzsz screen lftp curl strace lsof telnet tree tcpdump nmon busybox screen zlib zlib-devel glib glib-devel bzip2-devel pcre-devel openssl python-devel readline-devel tk-devel libselinux-python vim net-snmp net-snmp-devel net-snmp-utils nfs-utils rpcbind man glibc glibc-devel glib2 glib2-devel e2fsprogs-devel libxslt libxslt-devel openldap-clients openldap-servers parted

# 远程登录执行
sshpass -p "123456" ssh -t -o 'StrictHostKeyChecking=no'  administrator@172.18.5.xxx << EOF
EOF

7、其它操作

如需要提升用户权限

# 允许免密钥
sudo vim /etc/sudoers
# 或 visudo
xxxx ALL=(ALL) NOPASSWD: ALL

# 检查
visudo -c

# 普通用户sudo权限
sudo su 切换到超级用户
# 添加文件的写权限 chmod u+w /etc/sudoers
vim /etc/sudoers 找到 root ALL=(ALL) ALL
# 在下一行添加 xxx ALL=(ALL) ALL xxx是你的用户名
chmod u-w /etc/sudoers 撤销写权限

随机密码

cat /dev/urandom | LC_ALL=C tr -dc "[:alnum:]" | fold -w 10 |head -10
cat /dev/urandom | LC_ALL=C tr -dc "[:graph:]" | fold -w 10 |head -10

8、自动化Shell安装参考

#!/bin/bash

# 安装基础工具
insert_base_tool(){
        wget -V &>/dev/null
        if [ $? -eq 0 ];then
                echo "【wget】已经安装过了!"
        else
                yum install -y wget &>/dev/null
                [ $? -eq 0 ] && echo "【wget】安装成功!" || echo "【wget】安装失败,请手动安装!"
        fi
}

# 更改源
change_yum() {
        grep mirrors.163.com /etc/yum.repos.d/CentOS-Base.repo &>/dev/null
        [ $? -eq 0 ] && echo "【yum源】已更改过了!" && return 1;
        # 更改yum源
        cd /etc/yum.repos.d/
        cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
        wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
        yum clean all && yum  makecache

        # 更新系统
        yum update -y
        [ $? -eq 0 ] && echo "【yum】已更新成功!" || echo "【yum】更新失败!"

}

# 安装常用工具
install_tools() {
        yum install -y vim wget unzip zip bind-utils tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop  lsof  ntpdate telnet bridge-utils sshpass sysstat  &>/dev/null
        [ $? -eq 0 ] && echo "【常用工具】已安装成功!" || echo "【常用工具】安装失败!"
}

# 防火墙
install_firewall() {
        yum install firewalld firewalld-config -y | grep 'already installed' &>/dev/null
        [ $? -eq 0 ] && echo "【firewalld firewalld-config】已安装成功,不再重复安装了!" && return 1;

        yum install firewalld firewalld-config -y
        if [ $? -eq 0 ];then
                echo "【firewalld firewalld-config】已安装成功!"
                firewall-cmd --zone=public --add-port=80/tcp --permanent
                firewall-cmd --zone=public --add-port=443/tcp --permanent
                firewall-cmd --zone=public --add-port=22/tcp --permanent
                firewall-cmd --zone=public --add-port=21/tcp --permanent
                firewall-cmd --add-service=ntp --permanent
                #刷新防火墙
                firewall-cmd --reload
        else
                echo "【firewalld firewalld-config】安装失败了!"
        fi
}

# 安装JDK
install_jdk() {
        rpm -qa | grep java |xargs -i  rpm -e --nodeps {}
        [ $? -eq 0 ] && echo "【自带JDK】已卸载成功!"

        java_verson=`java -version 2>&1 |sed -n '1p'|sed -e 's/"//g'|awk '{print $3}'|xargs`
        [ $java_verson == "1.8.0_301" ] && echo "当前java版本:1.8.0_301,符合要求,不再安装!" && return 1 || echo "jdk1.8.0_301 正在执行安装..."

        # whereis java | grep  jdk1.8.0_301 &>/dev/null
        # [ $? -eq 0 ] && echo "【jdk1.8.0_301】已安装成功,不再重复安装了!" && return 1;

        echo "【请等待】正下载jdk-8u301-linux-x64.rpm到本地..."
       # wget http://172.18.5.xxx/tools/jdk/jdk-8u301-linux-x64.rpm
      # 提前上传 jdk-8u301-linux-x64.rpm 到当前sh目录即可
        if [ $? -eq 0 ]; then
                        echo "【安装就绪】下载jdk-8u301-linux-x64.rpm到本地成功!"
                        [ -f jdk-8u301-linux-x64.rpm ] && rpm -ivh jdk-8u301-linux-x64.rpm &>/dev/null
                        [ $? -eq 0 ] && echo "【JDK】安装成功!" ||  echo "【JDK】安装失败!"
                        [ -f jdk-8u301-linux-x64.rpm ] && rm jdk-8u301-linux-x64.rpm -rf && echo "【清理jdk-8u301-linux-x64.rpm包】成功!"

        else
                        echo "jdk-8u301-linux-x64.rpm 下载失败!"
        fi

        grep java /etc/profile &>/dev/null
        if [ $? -ne 0 ]; then
                echo "########################" >> /etc/profile
                echo "# For user_add_jdk start" >> /etc/profile
                echo "JAVA_HOME=/usr/java/jdk1.8.0_301-amd64" >> /etc/profile
                echo "JRE_HOME=/usr/java/jdk1.8.0_301-amd64/jre" >> /etc/profile
                echo "PATH=\$PATH:\$JAVA_HOME/bin:\$JRE_HOME/bin" >> /etc/profile
                echo "CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar:\$JRE_HOME/lib" >> /etc/profile
                echo "export JAVA_HOME JRE_HOME PATH CLASSPATH" >> /etc/profile
                echo "# For user_add_jdk end " >> /etc/profile
                echo "########################" >> /etc/profile
                source /etc/profile
                [ $? -eq 0 ] && echo "【配置JDK全局环境变量】成功!"
        else
                echo "【java环境变量】已配置过了!"
                java -version 2>&1 |sed -n '1p'|sed -e 's/"//g'|awk '{print $3}'|xargs -i echo "当前jdk版本为:{}!"
        fi
}

# 安装docker
install_docker(){
        # 检测安装情况
        docker -v &>/dev/null
        if [ $? -eq 0 ]; then
                docker_verson=`docker -v |awk -F ',' '{print \$1}'|awk '{print \$NF}'|xargs`
                echo -ne "【docker已安装】当前版本:${docker_verson} "
                [ $docker_verson \> "20" ] && echo "大于20,符合要求,不升级" && return 1 || echo "小于20 正在执行升级..."

                rpm -qa | grep docker |xargs -i  yum remove -y {}
                [ $? -eq 0 ] && echo "【旧版本docker】已卸载成功!"

                # 重装
                curl -fsSL https://get.docker.com/ | sh
                # 重起
                systemctl restart docker
                # 开机启动
                systemctl enable docker

                docker -v |awk -F ',' '{print $1}'|awk '{print $NF}'|xargs -i echo "完成docker安装,当前版本为:{}!"

        else
                echo "未安装过docker,正在执行安装..."
                # 重装
                curl -fsSL https://get.docker.com/ | sh
                # 重起
                systemctl restart docker
                # 开机启动
                systemctl enable docker

                docker -v |awk -F ',' '{print $1}'|awk '{print $NF}'|xargs -i echo "完成docker安装,当前版本为:{}!"
        fi
}

insert_base_tool
change_yum
install_tools
install_firewall
install_jdk
install_docker

四、常见规范

1、部署目录规范

# 应用文件放在
/online/应用名/
# 临时备份放在
# 备份按日期时间版本归档压缩tar.gz
/backup/应用名/

# 日志文件放在
# on  - 在线日志
# off - 归档日志
/data/logs/应用名/{on,off}/

# core文件放在
# hot - 可对外
# ice - 非对外
/data/corefile/应用名/{hot,ice}/{日期}/{分类}/

# 持久化备份放在
# 归档压缩tar.gz文件
# keep - 在运行
# fixed - 已归档
# 备份按日期时间归档压缩tar.gz
/data/backup/应用名/{keep,fixed}/{日期}/{分类}/

相关文章

网友评论

      本文标题:Linux运维规范

      本文链接:https://www.haomeiwen.com/subject/uklkfrtx.html