利用 Ansible 自动化部署 Veeam Backup & Replication 9.5U4b

利用 Ansible 自动化部署 Veeam Backup & Replication 9.5U4b

前言

上周出差期间接到一个做CMP(云管平台)Partner的需求,要在无人值守的安装 VBR,由于在过去的一年里 Veeeam 陆续的在国内的公有云平台登录,如:Azure、AWS、腾讯云、阿里云... 在这之前,我对 Veeam 的无人值守安装做过功课。在和这个兄弟攀谈的过程中,而和以前我做DRaaS和CMP时一样,在这个CMP的环境里,大部分自动化功能都是用 Ansible 来实现的,这对Veeam 今后在CMP Partner的推广还会有助力,说干就干。

本文主要内容

  • 1 Ansible 介绍
  • 2 前提:Veeam的静默安装模式
  • 3 Ansiable 自动化部署环境准备环境准备
    • 3.1 自动化引擎 -- Ansible 服务器的部署
    • 3.2 执行对象 -- Windows 服务器的部署
    • 3.3 WinRM 及 帐户身份验证模式
  • 4 连通性测试,win-ping
  • 5 编写 Asible Playbook 进行流程编排
  • 6 执行 Asible Playbook 实现自动化部署
  • 参考书籍与推荐阅读
  • 本文的原文链接

1 Ansible 介绍

在多云管理的世界里,大家经常会讨论自动化部署问题。而只要是涉及到Windows服务器,都不免一声叹息。因为很多工具对Windows的支持都不是太好,大部分情况下,我们都要为Windows搞一套独立的工具与环境。而我们都喜欢 ansible 的原因是,这个自动化运维工具广泛的支持各种系统,当然,最重要的是它支持windows ;-)

Ansible是杰出的自动化运维工具,使用Python进行开发,它博采众长,集多种运维工具(puppet、chef、func、fabric...)的优点于一身,可以实现批量系统配置和程序部署、运行命令等功能。如此优秀,以至于在 2015年被 redhat 收入怀中。Ansible 是基于模块进行工作的,本身是一个自动化引擎,我们通常会在 Playbook中用自动化语言定义什么样的操作会被执行。通俗的讲,Ansible就像是自动演奏的钢琴,而Playbook是乐谱,而Ansible Tower则是提供UI和Restful API的接口,Ansible 的架构如下:

Ansible

想更多的了解这个推荐 Jesse Keating 大神的《Mastering Ansible》也欢迎随时和我讨论。

《Mastering Ansible》 by Jesse Keating
https://www.ansible.com/resources/ebooks/mastering-ansible

2 前提:Veeam的静默安装模式

我创建的 Ansible Playbook 用于 在 Windows Server,(这里是我们使用 Windows Server 2019 做为 VBR 服务器)上安装与部署 Veeam Backup & Replication Server 9.5 Update 4b,使用 Ansible 实现的 Veeam Backup & Replication Server 的静默安装。

Veeam有非常优秀的静默安装模式,几乎所有的组件都可以进行自动安装,这样用户就可以在无人值守的情况下,进行试大批量的自定义的安装,对于灾备自动化来说也非常有帮助。

安装的顺序与模块如下,详情请参考,Veeam的官方文档。

User Guide for VMware vSphere > Deployment > Installing Veeam Backup & Replication in Unattended Mode

[《Veeam 静默安装 》] (https://helpcenter.veeam.com/docs/backup/vsphere/silent_mode.html?ver=95u4)

  • Veeam Backup Catalog
  • Veeam Backup & Replication Server
  • Veeam Backup & Replication Console
  • Veeam Explorers:
    • Veeam Explorer for Active Directory
    • Veeam Explorer for Exchange
    • Veeam Explorer for Oracle
    • Veeam Explorer for SharePoint
    • Veeam Explorer for Microsoft SQL
  • Veeam Update 4b

目前在云管理模式下, Veeam Backup Enterprise Manager 和 Cloud Connect Portal 都自定义部署,而且通常是多对一模式,在此我们没有涉及。

3 Ansiable 自动化部署环境准备

3.1 自动化引擎--Ansible 服务器的部署

Linux 版本与 扩展库配置

此处我们使用CentOS 7.7 做为Ansible 服务器,版本如下,我们只需要进行OS的最小化安装即可

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)
[root@localhost ~]# 

先为Yum库配置epel源,再安装Ansible

yum install -y epel-release
yum update -y
yum install -y ansible git vim htop

安装Python PiP 与 pywinrm

yum install -y python-pip
pip install --upgrade pip # optional
pip install pywinrm

配置Inventory文件,定义hosts

此处为了简便,我们使用Ansible默认的inventory文件,/etc/ansible/hosts

[VBR]
172.16.60.133

[VBR:vars]
ansible_connection=winrm
ansible_user="Administrator"
#ansible_ssh_pass=!vault | $ANSIBLE_VAULT;1.1;AES256
ansible_ssh_port=5985
ansible_winrm_server_cert_validation=ignore
ansible_winrm_transport=ntlm

3.2 执行对象--Windows 服务器的部署

在我们的环境中,Windows是我们自动化安装VBR的服务器。 为了使 Windows Server 准备授予 WinRM 访问权限,我使用了以下脚本使我们环境可以快速的Ready!

ConfigureRemotingForAnsible.ps1 脚本,您可以前往Ansible社区的Github下载,脚本执行如下
ConfigureRemotingForAnsible.ps1

PS C:\Users\Administrator\Desktop\code> .\ConfigRemotingForAnsiable.ps1 -Verbose
VERBOSE: Verifying WinRM service.
VERBOSE: PS Remoting is already enabled.
VERBOSE: SSL listener is already active.
VERBOSE: Basic auth is already enabled.
VERBOSE: Firewall rule already exists to allow WinRM HTTPS.
VERBOSE: HTTP: Enabled | HTTPS: Enabled
VERBOSE: PS Remoting has been successfully configured for Ansible.
PS C:\Users\Administrator\Desktop\code>

3.3 WinRM 及 帐户身份验证模式

Ansible 从1.7之后的版本支持 Windows服务的管理,管理机仍然需要一台Linux服务器,通信方式为PowerShell,为了与Windows通信管理机还须要安装WinRm模块,方可和远程Windows主机正常通信。

WinRM使用帐户身份验证时,可以使用几种不同的选项,在这里我选择了 NTLM + Ansiable 加密模块 的方式作为 WinRM 帐户身份验证。

注意:在本文中使用的密码方式,是通过Ansible 加密做为密码传递基础的,您可以使用不同的选项,如明文密码。此方法在Hosts文件定义主机时,和在YAML文件中定义Playbook的方法相同。Ansible 加密方法不是本文讨论的重点,如关心此处请查看Ansible 手册

选项 本地账户 AD账户 凭据委托 HTTP 加密
Basic
Certificate
Kerberos
NTLM
CredSSP

4 连通性测试,win-ping

ansible 有一个非常好的工具win-ping,专门用来测试与Windows的Host定义是不是可以联通。详情可以参照,Asiable的手册。

[《Ansible 用户手册》] (https://https://docs.ansible.com/ansible/2.5/user_guide/quickstart.html)

[root@localhost ~]# ansible VBR -m win_ping --vault-password-file vault_pass.txt 

172.16.60.133 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

5 编写 Asible Playbook 进行自动化编排

Playbook中的所有预定义应答,请参考Veeam的手册,在这里我们定义的服务器为VBR,这与真实的主机名已经解偶,Playbook中继承了 win_package Ansible 模块,这可以自动处理参数中所需的大多数转义。在软件源的定义中,我给出了最简单的路径,您可以按照需求进行定义。

- name: VBR Community Edition Setup
  hosts: VBR
  gather_facts: yes
  vars:
    vbr_source: "D:\\"
    sql_username: "svc_sql"
    sql_userpassword: !vault|
        $ANSIBLE_VAULT;1.1;AES256
    sql_sapassword: !vault |
        $ANSIBLE_VAULT;1.1;AES256
  tasks:
  - name: Pre - Install 2012 System CLR Types
    win_package:
        path: "{{ vbr_source }}Redistr\\x64\\SQLSysClrTypes.msi"
        state: present
    tags: pre
  - name: Pre - Install 2012 Shared management objects
    win_package:
        path: "{{ vbr_source }}Redistr\\x64\\SharedManagementObjects.msi"
        state: present
    tags: pre
  - name: SQL - Create Local SQL User
    win_user:
        name: "{{ sql_username }}"
        password: "{{ sql_userpassword }}"
        password_never_expires: yes
        state: present
        groups:
            - Users
    tags: pre
  - name: SQL - Install SQL 2016 Express
    win_package:
        path: "{{ vbr_source }}Redistr\\x64\\SqlExpress\\2016SP1\\SQLEXPR_x64_ENU.exe"
        product_id: SQL 2016 Express
        arguments: 
        - '/q'
        - '/ACTION=Install'
        - '/IACCEPTSQLSERVERLICENSETERMS' 
        - '/FEATURES=SQL' 
        - '/INSTANCENAME=VEEAMSQL2016'
        - '/SQLSVCACCOUNT={{ sql_username }}'
        - '/SQLSVCPASSWORD={{ sql_userpassword }}'
        - '/SECURITYMODE=SQL'
        - '/SAPWD={{ sql_sapassword }}'
        - '/ADDCURRENTUSERASSQLADMIN'
        - '/UPDATEENABLED=0'
        - '/TCPENABLED=1'
        - '/NPENABLED=1'
    tags: sql
  - name: Install VBR Catalog
    win_package:
        path: "{{ vbr_source }}Catalog\\VeeamBackupCatalog64.msi"
        state: present
        arguments:
            - 'VBRC_SERVICE_ACCOUNT_TYPE=1'
            - 'ACCEPT_THIRDPARTY_LICENSES=1'
    tags: vbr
  - name: Install VBR Server
    win_package:
        path: "{{ vbr_source }}Backup\\Server.x64.msi"
        state: present
        arguments: "VBR_SERVICE_ACCOUNT_TYPE=1 VBR_SQLSERVER_AUTHENTICATION=1 VBR_SQLSERVER_SERVER=(local)\\VEEAMSQL2016 VBR_SQLSERVER_USERNAME=sa VBR_SQLSERVER_PASSWORD={{ sql_sapassword }} ACCEPT_THIRDPARTY_LICENSES=1 ACCEPTEULA=YES"
    tags: vbr
  - name: Install VBR Console
    win_package:
        path: "{{ vbr_source }}Backup\\Shell.x64.msi"
        state: present
        arguments:
            - 'ACCEPTEULA=YES'
            - 'ACCEPT_THIRDPARTY_LICENSES=1'
    tags: vbr
  - name: Install VBR Explorer for ActiveDirectory
    win_package:
        path: "{{ vbr_source }}Explorers\\VeeamExplorerForActiveDirectory.msi"
        state: present
        arguments:
            - 'ACCEPT_EULA=1'
            - 'ACCEPT_THIRDPARTY_LICENSES=1'
    tags: vbr
  - name: Install VBR Explorer for Exchange
    win_package:
        path: "{{ vbr_source }}Explorers\\VeeamExplorerForExchange.msi"
        state: present
        arguments:
            - 'ACCEPT_EULA=1'
            - 'ACCEPT_THIRDPARTY_LICENSES=1'
    tags: vbr
  - name: Install VBR Explorer for Oracle
    win_package:
        path: "{{ vbr_source }}Explorers\\VeeamExplorerForOracle.msi"
        state: present
        arguments:
            - 'ACCEPT_EULA=1'
            - 'ACCEPT_THIRDPARTY_LICENSES=1'
    tags: vbr
  - name: Install VBR Explorer for SharePoint
    win_package:
        path: "{{ vbr_source }}Explorers\\VeeamExplorerForSharePoint.msi"
        state: present
        arguments:
            - 'ACCEPT_EULA=1'
            - 'ACCEPT_THIRDPARTY_LICENSES=1'
    tags: vbr
  - name: Install VBR Explorer for SQL
    win_package:
        path: "{{ vbr_source }}Explorers\\VeeamExplorerForSQL.msi"
        state: present
        arguments:
            - 'ACCEPT_EULA=1'
            - 'ACCEPT_THIRDPARTY_LICENSES=1'
    tags: vbr
  - name: Install VBR Update 4b
    win_package:
        path: "{{ vbr_source }}Updates\\veeam_backup_9.5.4.2866.update4b_setup.exe"
        product_id: VBR Update 4b
        arguments: "/silent /noreboot VBR_AUTO_UPGRADE=1"
    tags: update


6 执行 Asible Playbook 实现自动化安装

[root@localhost ~]# ansible-playbook ./Veeam_setup.yml --vault-password-file vault_pass.txt 

PLAY [VBR Community Edition Setup] *******************************************************************************

TASK [Gathering Facts] *******************************************************************************************
ok: [172.16.60.133]

TASK [Pre - Install 2012 System CLR Types] ***********************************************************************
changed: [172.16.60.133]

TASK [Pre - Install 2012 Shared management objects] **************************************************************
changed: [172.16.60.133]

TASK [SQL - Create Local SQL User] *******************************************************************************
ok: [172.16.60.133]

TASK [SQL - Install SQL 2016 Express] ****************************************************************************
changed: [172.16.60.133]

TASK [Install VBR Catalog] ***************************************************************************************
changed: [172.16.60.133]

TASK [Install VBR Server] ****************************************************************************************
changed: [172.16.60.133]

TASK [Install VBR Console] ***************************************************************************************
changed: [172.16.60.133]

TASK [Install VBR Explorer for ActiveDirectory] ******************************************************************
changed: [172.16.60.133]

TASK [Install VBR Explorer for Exchange] *************************************************************************
changed: [172.16.60.133]

TASK [Install VBR Explorer for Oracle] ***************************************************************************
changed: [172.16.60.133]

TASK [Install VBR Explorer for SharePoint] ***********************************************************************
changed: [172.16.60.133]

TASK [Install VBR Explorer for SQL] ******************************************************************************
changed: [172.16.60.133]

TASK [Install VBR Update 4b] *************************************************************************************
changed: [172.16.60.133]

PLAY RECAP *******************************************************************************************************
172.16.60.133              : ok=14   changed=12   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

此时,可以看到服务器的上我们需要的服务都已经启动

PS C:\Users\Administrator> Get-service Veeam*

Status   Name               DisplayName
------   ----               -----------
Running  VeeamBackupSvc     Veeam Backup Service
Running  VeeamBrokerSvc     Veeam Broker Service
Running  VeeamCatalogSvc    Veeam Guest Catalog Service
Running  VeeamCloudSvc      Veeam Cloud Connect Service
Running  VeeamDeploySvc     Veeam Installer Service
Running  VeeamDistributi... Veeam Distribution Service
Running  VeeamMountSvc      Veeam Mount Service
Running  VeeamNFSSvc        Veeam vPower NFS Service
Running  VeeamTransportSvc  Veeam Data Mover Service


PS C:\Users\Administrator> Get-service SQL*

Status   Name               DisplayName
------   ----               -----------
Stopped  SQLAgent$VEEAMS... SQL Server Agent (VEEAMSQL2016)
Running  SQLBrowser         SQL Server Browser
Running  SQLTELEMETRY$VE... SQL Server CEIP service (VEEAMSQL2016)
Running  SQLWriter          SQL Server VSS Writer

参考书籍与推荐阅读

1.《Veeam 静默安装 》
https://helpcenter.veeam.com/docs/backup/vsphere/silent_mode.html?ver=95u4

2.《Ansible 用户手册》
https://www.ansible.com/resources/ebooks/mastering-ansible

3.《Mastering Ansible》 by Jesse Keating
https://www.ansible.com/resources/ebooks/mastering-ansible

你可能感兴趣的:(利用 Ansible 自动化部署 Veeam Backup & Replication 9.5U4b)