文章目錄
- 前言
- 一、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
其實用一句指令就能解決。。。不過有劇本以後就可以随時一鍵啟動,不用每次都打了。
總結
本文都是一些比較基礎的東西,歡迎指正。