利用 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 的架构如下:
想更多的了解这个推荐 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