Ansible-playbook 安裝redis
創建目錄:
### 創建劇本規范目錄:
mkdir -p /etc/ansible/roles/redis/{files,templates,vars,tasks,defaults,handlers}
### 目錄簡介:
vars: 變量定義存放
tasks: 任務列表所有執行步驟都在tasks目錄下的main.yaml定義.如劇本太長,可以分成幾個步驟,最后在mani.yaml里面include XXX.yaml即可.
defaults: 設置默認變量時使用此目錄
handler: 放置tasks里面定義的配置變更之后“notify” 重啟的腳本
meta: 定義當前角色的特殊依賴關系,其他文件需要在此文件中- include
*** 以上所有目錄至少都應該存在一個main.yaml 文件, 目錄內main.yaml內容根據功能歸類編寫,ansible 會自動加載所有目錄內的所有manin.yaml***
files: 默認存放copy和scripts模塊調用的文件
templates: templates模塊調用病查找配置模板文件的目錄
### 例:
[root@redis-2 redis]# tree
.
├── defaults
│ └── main.yaml
├── files
│ └── main.yaml
├── handlers
│ └── main.yaml
├── tasks
│ └── main.yaml
├── templates
│ ├── redis.conf.j2
│ └── redis.conf.j2_bak
└── vars
└── main.yaml
6 directories, 7 files
准備redis配置文件:
### 定義hosts主機:
[web]
t1 ansible_ssh_host=10.10.4.209 ansible_ssh_port=22 ansible_ssh_user=root
### 主機列表可使用的參數:
ansible_ssh_host
ansible_ssh_port
ansible_ssh_user
ansible_ssh_pass
ansible_python_interpreter=/usr/bin/python2.6.6
......
### 准備redis.conf 配置文件(自行獲取):
cp /etc/redis.conf /etc/ansible/roles/redis/templates/redis.conf.j2
准備redis.yaml ansible-playbook入口文件:
### redis.yaml 劇本文件:
cd /etc/ansible/
vim redis.yaml
- hosts: t1 # 根據自己的需求定義主機 or 主機組
remote_user: root
gather_facts: True
roles:
- redis
***采用這樣的方式后,就不能把tasks列表都寫在同一個文件內,要按照規范的層級目錄和結構去編寫. ***
tasks 劇本所有步驟:
vim main.yaml
- name: System Add group {{ redisgroup }}
group: gid={{ usergid }} name={{ redisgroup }} state=present system=yes
- name: System Add user {{ redisuser }}
user:
name: '{{ redisuser }}'
password: "$6$yIKPGtAX$acGYiPD08gIwwnwGIN1LhUc9JKaN5sMHrJX6VrBNvcrPBwDdiX4yZrzbKX5D6ndQorX35MlCmYekFlkIYc/"
shell: /sbin/nologin
group: '{{ usergid }}'
uid: '{{ useruid }}'
create_home: True
state: present
- name: create redis database directory
file: path='/data/redis_data' state=directory mode='0755' owner={{ redisuser }} group={{ redisgroup }}
- name: create logs directory
file: path='/data/logs/redis' state=directory mode='0755' owner={{ redisuser }} group={{ redisgroup }}
- name: yum install {{ pkgname }}
yum: name={{ pkgname }} state=present
- name: Template Set {{ pkgname }} Config Files
template: src='redis.conf.j2' dest='/etc/redis.conf' owner={{ redisuser }} group={{ redisgroup }} mode='0755'
notify:
- restart redis service
- name: set {{ pkgname }} service status
service: name={{ item }} state=started enabled=yes
with_items:
- redis
vars 變量的定義:
此處的變量定義供本次劇本執行定義的內容,變量的使用即可用ansible自帶的setup模塊獲取的系統變量,也可以使用自己定義的內容,根據需求自定義即可
pkgname: 'redis' # iotop,iftop,htop'
bindip: '127.0.0.1'
bindip_eth0: "{{ ansible_eth0.ipv4.address }}"
mode: 'yes'
redislog: '/data/logs/redis/redis.log'
datadb: '30'
datadir: '/data/redis_data'
redispass: '666666'
maxnum: '1024'
appendo: 'yes'
redisuser: 'redis'
redisgroup: 'redis'
usergid: '600'
useruid: '600'
templates redis.conf.j2 模板文件的定義:
***此處僅僅展示部分配置, 主要演示變量和模板在playbook中的應用. 變量在vars/main.yaml定義,變量在調用使用 '{{ 變量名 }}' ***
***tasks 里面寫了tamplates:后 自動到這個目錄下尋找 ***
[root@redis-2 redis]# egrep -vE '^#|^$' templates/redis.conf.j2
bind {{ bindip }}
bind {{ bindip_eth0 }}
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize {{ mode }}
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile {{ redislog }}
databases {{ datadb }}
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir {{ datadir }}
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass {{ redispass }}
maxclients {{ maxnum }}
maxmemory 1024m
appendonly {{ appendo }}
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
handlers 目錄,當配置文件有變更,tasks里面的notify就執行重啟步驟:
注意: 此處name后的任務描述要和tasks/main.yaml內templates項改變后,調用的notify后的描述一致.
vim main.yaml
- name: restart redis service
service: name={{ pkgname }} state=restarted
執行劇本 開始安裝:
[root@redis-2 ansible]# ansible-playbook redis.yaml
PLAY [t2] ***************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************
ok: [t2]
TASK [redis : System Add group redis] ***********************************************************************************************
ok: [t2]
TASK [redis : System Add user redis] ************************************************************************************************
ok: [t2]
TASK [redis : create redis database directory] **************************************************************************************
ok: [t2]
TASK [redis : create logs directory] ************************************************************************************************
ok: [t2]
TASK [redis : yum install redis] ****************************************************************************************************
ok: [t2]
TASK [redis : Template Set redis Config Files] **************************************************************************************
ok: [t2]
TASK [redis : set redis service status] *********************************************************************************************
ok: [t2] => (item=redis)
PLAY RECAP **************************************************************************************************************************
t2 : ok=8 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0