Ansible-playbook 安裝redis


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   




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM