美文网首页
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