Memory 使用ansible添加交换内存
我正在从事一个项目,在我的服务器上交换内存是避免一些python长时间运行的进程耗尽内存的必要条件,我第一次意识到我的ubuntu vagrant Box和AWS ubuntu实例还没有设置 在一个可能的内置解决方案中进行了讨论,但从未实现,所以我猜这应该是一个非常常见的自动化任务Memory 使用ansible添加交换内存,memory,amazon-web-services,swap,ansible,Memory,Amazon Web Services,Swap,Ansible,我正在从事一个项目,在我的服务器上交换内存是避免一些python长时间运行的进程耗尽内存的必要条件,我第一次意识到我的ubuntu vagrant Box和AWS ubuntu实例还没有设置 在一个可能的内置解决方案中进行了讨论,但从未实现,所以我猜这应该是一个非常常见的自动化任务 您将如何以幂等方式使用ansible设置基于文件的交换内存?ansible在此设置中提供了哪些模块或变量(如ansible\u swaptotal\u mb变量)?这是我当前的解决方案: - name: Create
您将如何以幂等方式使用ansible设置基于文件的交换内存?ansible在此设置中提供了哪些模块或变量(如
ansible\u swaptotal\u mb
变量)?这是我当前的解决方案:
- name: Create swap file
command: dd if=/dev/zero of={{ swap_file_path }} bs=1024 count={{ swap_file_size_mb }}k
creates="{{ swap_file_path }}"
tags:
- swap.file.create
- name: Change swap file permissions
file: path="{{ swap_file_path }}"
owner=root
group=root
mode=0600
tags:
- swap.file.permissions
- name: "Check swap file type"
command: file {{ swap_file_path }}
register: swapfile
tags:
- swap.file.mkswap
- name: Make swap file
command: "sudo mkswap {{ swap_file_path }}"
when: swapfile.stdout.find('swap file') == -1
tags:
- swap.file.mkswap
- name: Write swap entry in fstab
mount: name=none
src={{ swap_file_path }}
fstype=swap
opts=sw
passno=0
dump=0
state=present
tags:
- swap.fstab
- name: Mount swap
command: "swapon {{ swap_file_path }}"
when: ansible_swaptotal_mb < 1
tags:
- swap.file.swapon
-名称:创建交换文件
命令:dd if=/dev/zero of={{swap_file_path}}bs=1024 count={{swap_file_size_mb}}k
创建=“{swap\u file\u path}”
标签:
-swap.file.create
-名称:更改交换文件权限
file:path=“{swap\u file\u path}”
所有者=根
组=根
模式=0600
标签:
-swap.file.permissions
-名称:“检查交换文件类型”
命令:文件{swap_file_path}
注册号:swapfile
标签:
-swap.file.mkswap
-名称:生成交换文件
命令:“sudo mkswap{{swap_file_path}”
当:swapfile.stdout.find('swap file')=-1
标签:
-swap.file.mkswap
-名称:在fstab中写入交换条目
mount:name=none
src={swap\u file\u path}
fstype=swap
opts=sw
passno=0
转储=0
状态=存在
标签:
-swap.fstab
-名称:装载交换
命令:“swapon{{swap_file_path}”
时间:ansible_swaptotal_mb<1
标签:
-swap.file.swapon
我尝试了上面的答案,但是“检查交换文件类型”
总是以更改的形式返回,因此在编写任务时,这是一种最好的做法
下面的角色已经在Ubuntu14.04 Trusty上测试过,不需要启用collect\u facts
- name: Set swap_file variable
set_fact:
swap_file: "{{swap_file_path}}"
tags:
- swap.set.file.path
- name: Check if swap file exists
stat:
path: "{{swap_file}}"
register: swap_file_check
tags:
- swap.file.check
- name: Create swap file
command: fallocate -l {{swap_file_size}} {{swap_file}}
when: not swap_file_check.stat.exists
tags:
- swap.file.create
- name: Change swap file permissions
file: path="{{swap_file}}"
owner=root
group=root
mode=0600
tags:
- swap.file.permissions
- name: Format swap file
sudo: yes
command: "mkswap {{swap_file}}"
when: not swap_file_check.stat.exists
tags:
- swap.file.mkswap
- name: Write swap entry in fstab
mount: name=none
src={{swap_file}}
fstype=swap
opts=sw
passno=0
dump=0
state=present
tags:
- swap.fstab
- name: Turn on swap
sudo: yes
command: swapon -a
when: not swap_file_check.stat.exists
tags:
- swap.turn.on
- name: Set swappiness
sudo: yes
sysctl:
name: vm.swappiness
value: "{{swappiness}}"
tags:
- swap.set.swappiness
所需VAR:
swap_file_path: /swapfile
# Use any of the following suffixes
# c=1
# w=2
# b=512
# kB=1000
# K=1024
# MB=1000*1000
# M=1024*1024
# xM=M
# GB=1000*1000*1000
# G=1024*1024*1024
swap_file_size: 4G
swappiness: 1
这是我用来在新服务器上安装4GB交换空间的ansible swap playbook(或我为dd\u bs\u size\u mb
*swap\u count
配置的任何东西):
我还在我的~/.bash_配置文件中添加了一个函数来帮助完成任务:
# Path to where you clone the repo
ANSIBLE_SWAP_PLAYBOOK=$HOME/dev/ansible-swap
install-swap ()
{
usage='Usage: install-swap HOST';
if [ $# -ne 1 ]; then
echo "$usage";
return 1;
fi;
ansible-playbook $ANSIBLE_SWAP_PLAYBOOK/ansible-swap/site.yml --extra-vars "target=$1"
}
只需确保首先将您的主机添加到您的ansible清单中即可
然后就是安装交换主机
对我有效的方法是通过剧本添加4Gib交换
选中此项:
.我将我的观点建立在伟大的基础上(请向上投票!),并添加了以下额外功能:
- 是否管理交换的全局标志
- 允许更改交换大小
- 允许禁用交换
…再加上这些技术改进:
- 完全幂等性(只有
确定
和在没有更改时跳过
,否则一些更改
)
- 使用
dd
而不是fallocate
与XFS fs兼容(有关更多信息,请参阅)
在Centos 7.7和Ansible 2.9.10上测试
参数:
swap_configure:true#是否管理交换
swap_enable:true
交换文件路径:/swapfile
交换文件大小:4096
互换性:1
守则:
-名称:配置交换
时间:交换|配置|布尔|默认值(false)
区块:
-名称:检查交换文件是否存在
斯达:
路径:“{swap\u file\u path}”
寄存器:交换文件检查
更改时间:false
-名称:检查交换是否打开
shell:swapon--show | grep{{swap_file_path}
寄存器:已启用交换
更改时间:false
当:false时失败
-名称:禁用交换
命令:swapoff{{swap\u file\u path}
寄存器:已禁用交换单元
时间:>
交换文件\u check.stat.exists
和swap_enabled.rc==0
和(未启用交换)
或者(swap_enable和swap_file_check.stat.size!=(swap_file_size_mb*1024*1024)))
-名称:删除交换文件
文件:
路径:“{swap\u file\u path}”
国家:缺席
何时:不交换\u启用
-名称:配置交换
时间:交换|启用|布尔
区块:
-名称:创建或更改交换文件的大小
命令:dd if=/dev/zero of={swap_file_path}}count={{swap_file_size_mb}}bs=1MiB
寄存器:已创建交换文件
时间:>
不交换文件\u check.stat.exists
或者交换文件check.stat.size!=(交换文件大小为mb*1024*1024)
-名称:更改交换文件权限
file:path=“{swap\u file\u path}”
所有者=根
组=根
模式=0600
-名称:检查交换是否已格式化
shell:file{{swap_file_path}}grep'swap file'
寄存器:交换文件已格式化
更改时间:false
当:false时失败
-名称:格式化交换文件(如果未格式化)
命令:mkswap{{swap_file_path}
当:swap_file_已格式化.rc>0或swap_file_已创建.change
-名称:将掉期项目添加到fstab
mount:name=none
src={swap\u file\u path}
fstype=swap
opts=sw
passno=0
转储=0
状态=存在
-名称:启用交换
壳牌:斯瓦彭-a
时间:swap_enabled.rc!=0和交换单元已禁用。已更改
-名称:配置交换
sysctl:
名称:vm.swappiness
值:“{swappiness}”
国家:现在
我会担心幂等性——特别是,如果在已经有交换文件的情况下运行部署,这可能会使它归零,我想,这会使每个交换了任何页面的进程崩溃。创建=“{swap\u file\u path}”
第一个任务中的prop应该解决这个问题,如果文件存在dd
将不会运行。我仍然在生产中使用它,而当前任务条件(when/creates)似乎正在完成它们的工作,这就是使