天天看點

Ansible:實作一鍵部署redis主從複制的playbook前言一、Ansible是什麼?二、使用步驟總結

文章目錄

  • 前言
  • 一、Ansible是什麼?
  • 二、使用步驟
    • 1.安裝ansible
    • 2.配置資源清單
    • 3.給所有主機傳密鑰
    • 4.準備redis壓縮包
    • 5.手動安裝獲得redis主配置檔案
    • 6.playbook
    • 7.啟動所有節點的redis
  • 總結

前言

目前常見的運維自動化管理工具主要是Puppet、SaltStack、Ansible,其中Ansible是最簡單易用的,本文主要探讨使用ansible來部署redis主從複制的playbook。(閱讀本文需要對ansible有所了解)

一、Ansible是什麼?

ansible是新出現的自動化運維工具,基于Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優點,實作了批量系統配置、批量程式部署、批量運作指令等功能。

優點主要有:

  • 子產品可以用任何語言開發
  • 被管理節點不需要安裝任何代理軟體
  • 有web管理界面、可配置使用者、組、資源清單和可執行的playbook

二、使用步驟

1.安裝ansible

直接使用yum安裝即可

2.配置資源清單

将要管理的節點的機器資訊寫入/etc/ansible/hosts中,寫法非常豐富,這裡不展開探讨。本文主要使用的是先在 本機添加域名解析,再寫資源清單的方法:

vim /etc/hosts
192.168.186.161  master1
192.168.186.146  master2
192.168.186.162  slaver2-1
192.168.186.163  slaver1-1

           
/etc/ansible/hosts
master1
master2
slaver2-1
slaver1-1

           

3.給所有主機傳密鑰

機器之間連接配接需要驗證,傳密鑰友善管理,當然也可以不傳,這個根據實際管理場景決定,這裡我寫了個腳本進行傳密鑰,在上一篇部落格已經展示過,有需要可以檢視:Linux:批量給主機傳密鑰的腳本

4.準備redis壓縮包

隻需要在管理節點準備一個壓縮包即可,我使用的是 redis-4.0.10.tar.gz

官方:redis官網

5.手動安裝獲得redis主配置檔案

進行這一步主要是為了得到redis的配置檔案,我們要用它來做一份jinja2的模闆。(redis的安裝也非常簡單,官網上就有,或者下次我再寫一篇關于redis的安裝)

cp /usr/local/redis-4.0.10/redis.conf /root/redis.conf.j2
           

然後對模闆進行修改

修改部分如下:

bind {{ ansible_ens33['ipv4']['address'] }}
protected-mode no
daemonize yes
slaveof 192.168.186.161 6379
masterauth 123
requirepass 123
           

6.playbook

準備工作做完之後,就可以開始寫劇本了,直接看劇本redis_deploy.yaml:

---
  - name: Deploy redis.
    hosts: all
    user: root
    tasks:
      - name: Remove redis existed.
        shell: rm -rf /usr/local/redis*
      - name: Unarchive redis package.
        unarchive:
          src: /root/redis-4.0.10.tar.gz
          dest: /usr/local/
      - name: Install redis.
        shell:
          cmd: make MALLOC=libc
          chdir: /usr/local/redis-4.0.10
        notify: Next we will deploy all redis.conf
    handlers:
      - name: Next we will deploy all redis.conf
        template:
          src: /root/redis.conf.j2
          dest: /usr/local/redis-4.0.10/redis.conf
          backup: yes
        notify: lineinfile will work
      - name: lineinfile will work
        lineinfile:
          dest: /usr/local/redis-4.0.10/redis.conf
          regexp: ^slaveof
          state: absent
        when: ansible_ens33['ipv4']['address'] == "192.168.186.161"

           

以上使用到的都是很基本的劇本用法,主要用到shell、unarchive、template、lineinfile子產品,使用了notify_handlers,when來簡單進行簡單的邏輯安排。

#檢查劇本:

ansible-playbook redis_deploy.yaml --syntax-check
           

這裡不用再進行模拟執行,-C不怎麼好用,會報錯,但是劇本是沒有問題,主要是因為-C執行的步驟和實際的執行是不同的,是以有些邏輯再模拟執行時會被當作錯誤處理。

#開演

ansible-playbook redis_deploy.yaml
           

(過程應該會比較慢,耐心等待,不報錯就可以了)

7.啟動所有節點的redis

還是寫個劇本開啟動吧,很簡單

---
- name: start redis clusters
  hosts: all
  gather_facts: false
  user: root
  tasks:
  - name: shell will take this.
    shell:
     cmd: /usr/local/redis-4.0.10/src/redis-server /usr/local/redis-4.0.10/redis.conf
           

其實用一句指令就能解決。。。不過有劇本以後就可以随時一鍵啟動,不用每次都打了。

總結

本文都是一些比較基礎的東西,歡迎指正。