英语网站推广策划书,普通企业网站建设,做网站还有搞头吗,男女做暖网站是什么意思1、引言
在当今数字化时代#xff0c;数据是企业和组织的核心资产。为了确保数据的安全性和可恢复性#xff0c;备份是至关重 要的。然而#xff0c;手动备份数据可能会繁琐且容易出错#xff0c;特别是在面对大规模和分布式的数据存储情况下。幸运的是#xff0c;Ansibl…1、引言
在当今数字化时代数据是企业和组织的核心资产。为了确保数据的安全性和可恢复性备份是至关重 要的。然而手动备份数据可能会繁琐且容易出错特别是在面对大规模和分布式的数据存储情况下。幸运的是Ansible作为一种自动化工具能够帮助我们轻松实现核心数据的集中式自动备份。本文将深入探讨如何使用Ansible来自动备份核心数据确保数据安全无忧。
2、背景
公司有一些核心数据需要备份比如gitlabwikiMySQLMongoDB等等数据库。
为了防止数据丢失或损坏我们需要定期备份GitLab数据。备份的内容通常包括Git存储库、配置文件、数据库等
之前方案 在每台相关的机器上备份任务分散数据不容易管理存储 现在方案 采用一台机器设置定时任务把备份数据归档到同一地方存储统一管理 使用Ansible自动备份GitLab具有以下优点 提高效率使用Ansible可以自动备份无需手动执行备份操作。 提高可靠性通过Ansible自动化备份可以减少人为错误提高备份的可靠性。 充分利用资源Ansible可以在多个主机上并行执行任务充分利用资源提高效率。 3、方案实现 编写Ansible Playbook在Playbook中定义需要备份的文件和路径以及备份的文件存储位置。 执行Ansible Playbook通过执行Playbook来自动备份GitLab。 验证备份检查备份文件是否已正确存储并确保文件可用于恢复。
1、基础环境
backupGitlab.yml group_vars hosts
[rootansible-yunwei backupData]# tree .
.
├── backupGitlab.yml
├── group_vars
│?? └── all
└── hosts 创建hosts主机
[gitlab]
192.168.xx.xx ansible_ssh_userroot ansible_ssh_passxxxx.xx[confluence]
192.168.xx.xx ansible_ssh_userroot ansible_ssh_passxxxx.xx[uatmysql]
192.168.xx.xx ansible_ssh_userroot ansible_ssh_passxxx.xx[uatmongo8449]
192.168.xx.xx ansible_ssh_userroot ansible_ssh_passxxxx.xx[uatmongo9942]
192.168.xxx.xx ansible_ssh_userroot ansible_ssh_passxxxxx.xx
定义变量环境
# gitlab备份存放目录
gitlabBackupDir: /data/backup/gitlab# confluence备份存放目录
confluenceBackupDir: /data/backup/confluence# uat环境mysql备份存放目录
uatMysqlBackupDir: /data/backup/uatmysql# uat环境mongo(192.168.84.xx)备份存放目录
uatMongo8449BackupDir: /data/backup/uatmongo8449# uat环境mongo(192.168.99.xx)备份存放目录
uatMongo9942BackupDir: /data/backup/uatmongo9942# 备份结果记录文件
statusFile: /data/backup/backupStatus
2、编写Ansible Playbook
获取当前日期创建备份目录。生成GitLab备份文件并拉取至本地备份目录。拉取GitLab配置文件并存储在备份目录中。删除原始备份文件及旧备份文件。记录备份完成状态
[rootansible-yunwei backupData]# cat backupGitlab.yml
- name: 备份gitlabhosts: gitlabremote_user: roottasks:- name: 获取当日日期local_action: shell date %Y%m%dargs:warn: noregister: date- name: 本机创建备份目录local_action: file path{{gitlabBackupDir}}/{{date.stdout}} statedirectory ownerroot grouproot mode0700- name: 生成gitlab备份shell: gitlab-backup create STRATEGYcopyargs:warn: no- name: 获取文件名find: paths/var/opt/gitlab/backups/ recurseno patterns*.tarregister: backupFile- name: 拉取备份文件fetch: src{{item.path}} dest{{gitlabBackupDir}}/{{date.stdout}}/ flatTruewith_items:- {{backupFile.files}}- name: 拉取配置文件fetch: src{{item}} dest{{gitlabBackupDir}}/{{date.stdout}}/ flatTruewith_items:- /etc/gitlab/gitlab.rb- /etc/gitlab/gitlab-secrets.json- name: 删除原始文件file: path{{item.path}} stateabsentwith_items:- {{backupFile.files}}- name: 查找旧的备份local_action: find paths{{gitlabBackupDir}}/ recurseno patterns* age3d age_stampmtime file_typedirectoryregister: backupDir- name: 删除旧的备份local_action: file path{{item.path}} stateabsentwith_items:- {{backupDir.files}}- name: 记录备份完成状态local_action: shell if [ ! ls -A {{gitlabBackupDir}}/{{date.stdout}} ]; then echo {{date.stdout}}:successful:gitlab {{statusFile}} ; else echo {{date.stdout}}:failed:gitlab {{statusFile}} ; fiargs:warn: no
3、执行ansible-playbook
/usr/local/python36/bin/ansible-playbook /opt/ansible/backupData/backupGitlab.yml -i /opt/ansible/backupData/hosts 21 /data/backup/backup.log4、设置定时任务
1 0 * * * /usr/local/python36/bin/ansible-playbook /opt/ansible/backupData/backupGitlab.yml -i /opt/ansible/backupData/hosts 21 /data/backup/backup.log5、执行结果 4、备份其余类型
backupConfluence.yml
- name: 备份confluencehosts: confluenceremote_user: roottasks:- name: 获取当日日期local_action: shell date %Y%m%dargs:warn: noregister: date- name: 获取用于模式匹配的当日日期local_action: shell date %Y_%m_%dargs:warn: noregister: datePattern- name: 本机创建备份目录local_action: file path{{confluenceBackupDir}}/{{date.stdout}} statedirectory ownerroot grouproot mode0700- name: 获取文件名find: paths/var/atlassian/application-data/confluence/backups/ recurseno patternsbackup-{{datePattern.stdout}}.zipregister: backupFile- name: 拉取备份文件fetch: src{{item.path}} dest{{confluenceBackupDir}}/{{date.stdout}}/ flatTruewith_items:- {{backupFile.files}}- name: 查找旧的备份local_action: find paths{{confluenceBackupDir}}/ recurseno patterns* age3d age_stampmtime file_typedirectoryregister: backupDir- name: 删除旧的备份local_action: file path{{item.path}} stateabsentwith_items:- {{backupDir.files}}- name: 记录备份完成状态local_action: shell if [ ! ls -A {{confluenceBackupDir}}/{{date.stdout}} ]; then echo {{date.stdout}}:successful:confluence {{statusFile}} ; else echo {{date.stdout}}:failed:confluence {{statusFile}} ; fiargs:warn: no
** backupUatMongo8449.yml**
- name: 备份uat环境mongo数据库(192.168.xx.xx)hosts: uatmongo8449remote_user: roottasks:- name: 获取当日日期local_action: shell date %Y%m%dargs:warn: noregister: date- name: 本机创建备份目录local_action: file path{{uatMongo8449BackupDir}}/{{date.stdout}} statedirectory ownerroot grouproot mode0700- name: 生成备份shell: mongodump --host 192.168.xx.xx --port 27017 -u root -p xxx --authenticationDatabase admin --gzip -o /tmp/uatmongo8449-{{date.stdout}}args:warn: no- name: 进行打包archive: path/tmp/uatmongo8449-{{date.stdout}} dest/tmp/uatmongo8449-{{date.stdout}}.tar formattar removeTrue- name: 拉取备份文件fetch: src/tmp/uatmongo8449-{{date.stdout}}.tar dest{{uatMongo8449BackupDir}}/{{date.stdout}}/ flatTrue- name: 删除原始文件file: path{{item}} stateabsentwith_items:- /tmp/uatmongo8449-{{date.stdout}}.tar- /tmp/uatmongo8449-{{date.stdout}}- name: 查找旧的备份local_action: find paths{{uatMongo8449BackupDir}}/ recurseno patterns* age3d age_stampmtime file_typedirectoryregister: backupDir- name: 删除旧的备份local_action: file path{{item.path}} stateabsentwith_items:- {{backupDir.files}}- name: 记录备份完成状态local_action: shell if [ ! ls -A {{uatMongo8449BackupDir}}/{{date.stdout}} ]; then echo {{date.stdout}}:successful:uatMongo8449 {{statusFile}} ; else echo {{date.stdout}}:failed:uatMongo8449 {{statusFile}} ; fiargs:warn: no
** backupUatMysql.yml**
- name: 备份uat环境mysql数据库hosts: uatmysqlremote_user: roottasks:- name: 获取当日日期local_action: shell date %Y%m%dargs:warn: noregister: date- name: 本机创建备份目录local_action: file path{{uatMysqlBackupDir}}/{{date.stdout}} statedirectory ownerroot grouproot mode0700- name: 生成备份shell: mysqldump -h192.168.1xx.xxx -uroot -pxxxx --single-transaction --flush-logs --master-data2 --events --routines --triggers --hex-blob --all-databases | gzip /tmp/uatmysql-{{date.stdout}}.sql.gzargs:warn: no- name: 拉取备份文件fetch: src/tmp/uatmysql-{{date.stdout}}.sql.gz dest{{uatMysqlBackupDir}}/{{date.stdout}}/ flatTrue- name: 删除原始文件file: path/tmp/uatmysql-{{date.stdout}}.sql.gz stateabsent- name: 查找旧的备份local_action: find paths{{uatMysqlBackupDir}}/ recurseno patterns* age3d age_stampmtime file_typedirectoryregister: backupDir- name: 删除旧的备份local_action: file path{{item.path}} stateabsentwith_items:- {{backupDir.files}}- name: 记录备份完成状态local_action: shell if [ ! ls -A {{uatMysqlBackupDir}}/{{date.stdout}} ]; then echo {{date.stdout}}:successful:uatMysql {{statusFile}} ; else echo {{date.stdout}}:failed:uatMysql {{statusFile}} ; fiargs:warn: no
[rootkvm-master backupData]# crontab -l
# 备份数据Gitlab、Confluence、uat环境mysql(192.168.1xx.xx)、uat环境mongo(192.168.xx.xx) (每天执行一次)
1 0 * * * /usr/local/python36/bin/ansible-playbook /opt/ansible/backupData/backupGitlab.yml -i /opt/ansible/backupData/hosts 21 /data/backup/backup.log
10 0 * * * /usr/local/python36/bin/ansible-playbook /opt/ansible/backupData/backupConfluence.yml -i /opt/ansible/backupData/hosts 21 /data/backup/backup.log
20 0 * * * /usr/local/python36/bin/ansible-playbook /opt/ansible/backupData/backupUatMysql.yml -i /opt/ansible/backupData/hosts 21 /data/backup/backup.log
30 0 * * * /usr/local/python36/bin/ansible-playbook /opt/ansible/backupData/backupUatMongo8449.yml -i /opt/ansible/backupData/hosts 21 /data/backup/backup.log
40 0 * * * /usr/local/python36/bin/ansible-playbook /opt/ansible/backupData/backupUatMongo9942.yml -i /opt/ansible/backupData/hosts 21 /data/backup/backup.log
5、总结
通过上述自动化备份策略我们可以有效地保护Gitlab数据的安全性和完整性。在实际应用过程中这种备份策略还可以根据需要进行定制和扩展以满足不同场景下的需求。希望这篇博客对大家有所帮助