【Ansible自动化运维】三、ansible在配置管理中的应用:确保环境一致性

发布于:2025-04-14 ⋅ 阅读:(28) ⋅ 点赞:(0)

一、配置管理概述​

1.1 配置管理的重要性​

在大规模 IT 环境中,服务器数量众多且用途各异,若缺乏有效的配置管理,极易出现环境混乱问题。例如,不同服务器的软件版本不一致、安全设置参差不齐,这不仅会增加运维复杂度,还可能引发系统故障与安全风险。配置管理旨在通过标准化、自动化手段,确保所有服务器具备相同的基础配置与运行环境,提升系统稳定性与可维护性。​

1.2 Ansible 的优势​

与传统手动配置或脚本配置方式相比,Ansible 具有显著优势。其基于 YAML 的 Playbook 编写简洁直观,易于理解与维护;无需在目标主机安装代理,通过 SSH 即可通信,降低部署成本;模块化设计支持丰富的配置任务,从系统基础设置到复杂应用部署均可轻松应对,且能实现幂等性操作,即多次执行同一 Playbook 不会对已正确配置的环境造成额外改变,有效保障配置一致性。​

二、服务器基础配置

2.1 操作系统初始化配置​

以 CentOS 系统为例,使用 Ansible 进行操作系统初始化配置的 Playbook 如下:

- name: OS Initialization for CentOS
  hosts: all_centos_servers
  become: yes
  tasks:
    - name: Set hostname
      hostname:
        name: "{{ inventory_hostname }}"
    - name: Configure network
      lineinfile:
        path: /etc/sysconfig/network-scripts/ifcfg-eth0
        line: "IPADDR=192.168.1.{{ item }}"
        insertafter: "^BOOTPROTO=static"
      with_items:
        - 10
        - 11
        - 12
    - name: Update system packages
      yum:
        name: "*"
        state: latest

解释:​

  • hosts: all_centos_servers:指定该 Playbook 作用于主机清单中名为all_centos_servers的主机组,可在/etc/ansible/hosts文件中提前定义。​
  • become: yes:获取 root 权限执行后续任务。​
  • Set hostname任务:使用hostname模块,将主机名设置为清单中的主机名变量{{ inventory_hostname }}。​
  • Configure network任务:通过lineinfile模块修改网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,在BOOTPROTO=static行后插入指定 IP 地址(通过with_items循环为不同主机设置不同 IP)。​
  • Update system packages任务:利用yum模块更新所有系统软件包至最新版本。

2.2 用户管理​

以下 Playbook 用于创建用户并设置权限:

- name: User Management
  hosts: all_servers
  become: yes
  tasks:
    - name: Create user
      user:
        name: appuser
        comment: "Application user"
        createhome: yes
        shell: /bin/bash
    - name: Set user password (using encrypted password)
      user:
        name: appuser
        password: "$6$rounds=656000$H6a9rFfX$t2dXW7Lm9pT3ZvGJf1sJ5bF6Xm1p9Qj5y3eT1dN4Z7R1b1V6u2h7m4K2t1R4V2m3c"
    - name: Add user to group
      user:
        name: appuser
        groups: wheel
        append: yes

解释:​

  • Create user任务:创建名为appuser的用户,生成用户主目录并设置默认 Shell 为/bin/bash。​
  • Set user password任务:设置用户密码,密码为加密后的字符串(可通过mkpasswd -m sha - 512等工具生成)。​
  • Add user to group任务:将appuser添加到wheel组(以 CentOS 为例,该组用户可获取 sudo 权限),append: yes表示追加到组,不覆盖原有组设置。

2.3 安全配置​

以防火墙与 SSH 密钥管理为例:

- name: Security Configuration
  hosts: all_servers
  become: yes
  tasks:
    - name: Configure firewall (using firewalld)
      firewalld:
        service: ssh
        permanent: yes
        state: enabled
    - name: Disable root login via SSH
      lineinfile:
        path: /etc/ssh/sshd_config
        line: "PermitRootLogin no"
        insertafter: "^#PermitRootLogin yes"
        backup: yes
    - name: Distribute SSH public key
      authorized_key:
        user: appuser
        key: "{{ lookup('file', '/home/user/.ssh/id_rsa.pub') }}"

解释:​

  • Configure firewall任务:使用firewalld模块启用 SSH 服务并永久生效。​
  • Disable root login via SSH任务:修改/etc/ssh/sshd_config文件禁止 root 通过 SSH 登录,backup: yes保留原文件备份。​
  • Distribute SSH public key任务:将指定的公钥文件内容添加到appuser的授权密钥列表,实现免密登录。

三、软件安装与配置​

3.1 Web 服务器安装(以 Apache 为例)

- name: Install and Configure Apache
  hosts: web_servers
  become: yes
  tasks:
    - name: Install Apache
      yum:
        name: httpd
        state: present
    - name: Start Apache service
      service:
        name: httpd
        state: started
        enabled: yes
    - name: Configure virtual host
      template:
        src: httpd - vhosts.conf.j2
        dest: /etc/httpd/conf.d/httpd - vhosts.conf

解释:​

  • Install Apache任务:通过yum模块安装 Apache 软件包。​
  • Start Apache service任务:启动 Apache 服务并设置开机自启。​
  • Configure virtual host任务:使用template模块,将httpd - vhosts.conf.j2模板文件渲染后复制到目标路径,用于配置虚拟主机(模板文件可包含动态变量,如域名、文档根目录等)。

 3.2 数据库服务器配置(以 MySQL 为例)

- name: Install and Configure MySQL
  hosts: db_servers
  become: yes
  tasks:
    - name: Install MySQL
      yum:
        name: mariadb - server
        state: present
    - name: Start MySQL service
      service:
        name: mariadb
        state: started
        enabled: yes
    - name: Secure MySQL installation
      shell: mysql_secure_installation --set - password=password '{{ mysql_root_password }}'
      vars:
        mysql_root_password: "MySecureP@ss123"
    - name: Create database and user
      mysql_db:
        name: mydb
        state: present
        login_user: root
        login_password: "{{ mysql_root_password }}"
      mysql_user:
        name: myuser
        host: "%"
        password: "MyUserP@ss456"
        priv: "mydb.*:ALL"
        state: present
        login_user: root
        login_password: "{{ mysql_root_password }}"

解释:​

  • Install MySQL任务:安装 MariaDB(MySQL 分支)服务器软件包。​
  • Secure MySQL installation任务:执行mysql_secure_installation脚本设置 root 密码(通过变量传递)。​
  • Create database and user任务:分别使用mysql_db与mysql_user模块创建数据库mydb及用户myuser,并分配权限。

四、配置管理的版本控制与回滚​

4.1 纳入版本控制系统​

将 Ansible 配置文件(如ansible.cfg、主机清单、Playbook 及模板文件)添加到 Git 仓库进行版本管理。在项目根目录执行:

git init
git add.
git commit -m "Initial Ansible configuration commit"

 后续修改配置后,按常规 Git 流程提交与推送,便于追踪配置变更历史。

4.2 回滚操作​

若配置出现问题,可通过 Git 回滚至之前稳定版本。例如,回滚至上一个提交版本:

git reset --hard HEAD^

然后重新执行正确版本的 Playbook,快速恢复环境一致性。​


网站公告

今日签到

点亮在社区的每一天
去签到