Ansible 自動化運維實例

前言

   Ansible 是你們很是熟悉的輕量級的自動化運維工具。在小規模的應用集羣中,使用ansbile來對集羣中的應用進行管理是一個很是高效的方法。
   Ansible自己支持很是多的模塊,而且操做很是簡單學習容易。關於ansible的安裝以及各個模塊的使用,此處再也不詳細的描述。java

   今天咱們以一個詳細的案例,來介紹一下ansible的具體使用。同事,在github上也有不少ansible的具體事例,能夠去參考。https://github.com/ansible/ansible-examples 本文就是參考示例中的ansible-tomcat-memcached來進行的實驗。 linux

Tomcat/Memcached實現會話保持(SessionServer)

   在實際的應用場景中,若是進行了負載均衡,那麼後端服務器對用戶的session記錄就是一個比較使人頭疼的問題。通常須要進行單獨的處理。如今已經有不少的成熟的解決方案。例如使用Tomcat+Memcached來實現用戶的會話保持。可是Memcached緩存是基於內存的,若是SessionServer宕機了,仍是會影響系統的使用,因此又有另一種解決方案,就是使用Tomcat+redis來實現會話的永久存儲。由於redis能夠對緩存進行持久化處理。可是本文仍是以memcached爲例,來介紹使用Ansible自動化部署實現Tomcat會話保持。
  具體的原理,就再也不詳細介紹,若是對此還有不太瞭解的朋友能夠移步我以前的博客詳細瞭解一下。http://www.javashuo.com/article/p-ynyjlhja-r.htmlnginx

實驗拓撲結構

   在開始這篇博文的時候,須要從新給你們介紹一下本次實驗的基本環境。
網絡拓撲結構git

序號 擔任角色 主機名 地址 功能描述 對應軟件版本
A Nginx均衡調度器 nginx 192.168.0.20 利用Nginx的調度功能首先負載均衡 Nginx-1.12.2
B web服務器 tomcat1 192.168.0.21 安裝tomcat,用來提供動態web服務 tomcat-7.0.76-2.e17
C web服務器 tomcat2 192.168.0.22 安裝tomcat,用來提供動態的web服務 tomcat-7.0.76-2.el7
D SessionServer memcached1 192.168.0.26 安裝memcached,提供Session存儲服務,同時充當SessionServer的主節點 memcached-1.4.15
E SessionServer memcached2 192.168.0.27 安裝memcached,提供session存儲服務,同時充當SessionServer備用節點 memcached-1.4.15
O ansible主機 ansible 192.168.0.19 安裝ansible,經過Ansible對其餘主機進行管控 ansible-2.4.1

開始編寫Ansible任務

    這次實例是基於github上的example進行的修改編寫。主要在下面貼出其中幾個比較重要的文件,整個編寫的ansible腳本能夠在下面的連接中進行下載。github

點我下載 web

roles/lb-nginx/tasks/main.yml redis

---
  - name: Install nginx
    yum: name=nginx state=present

  - name: Deliver main configuration file
    template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
    notify: restart nginx

  - name: Copy configuration file to nginx/sites-avaiable
    template: src=default.conf.j2 dest=/etc/nginx/conf.d/default.conf
    notify: restart nginx

  - name: Make sure nginx start with boot
    service: name=nginx state=started enabled=yes

roles/tomcat/tasks/main.yml shell

---
  - name: Install OpenJDK
    yum: name=java-1.8.0-openjdk state=present

  - name: Install Tomcat
    yum: name=tomcat state=present

  - name: Deliver configuration files for tomcat
    template: src={{ item.src }} dest={{ item.dest }} backup=yes
    with_items: 
      - "{{ conf_items }}"
    notify: restart tomcat

  - name: Deliver libraries support memcached
    get_url: url="{{ item }}" dest=/usr/share/tomcat/lib/
    with_items:
      - http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.1.1/memcached-session-manager-2.1.1.jar
      - http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc7/2.1.1/memcached-session-manager-tc7-2.1.1.jar
      - http://repo1.maven.org/maven2/net/spy/spymemcached/2.12.0/spymemcached-2.12.0.jar

  - name: Deploy sample app
    copy: src=msm-sample-webapp-1.0-SNAPSHOT.war dest=/var/lib/tomcat/webapps/ROOT.war owner=tomcat group=tomcat

  - name: Start tomcat service
    service: name=tomcat state=started enabled=yes

roles/memcached/tasks/main.yml 後端

---
- name: Install memcached
  yum: name=memcached state=present

- name: Deliver configuration file
  template: src=memcached.conf.j2 dest=/etc/sysconfig/memcached backup=yes
  notify: restart memcached

- name: Deliver init script
  template: src=init.sh.j2 dest=/etc/init.d/memcached mode=0755
  notify: restart memcached

- name: Start memcached service
  service: name=memcached state=started enabled=yes

其他的資料能夠直接從上面的下載連接中去下載。瀏覽器

設置遠程主機免密登錄

   ansible對遠程主機的管理是經過SSH來進行連接的,因此能夠設置遠程主機免密登錄,使用shh-keygen 命令。

]# ssh-keygen

]# for i in 20 21 22 26 27;do ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.$i; done

   設置成功以後,使用SSH登錄遠程主機就能夠不用再輸入密鑰了。

對遠程主機進行部署

   在對遠程主機進行操做以前,要確保集羣內的全部主機的時間已經進行了同步,不然會有不少問題。由於是我的實驗環境,同時關閉了selinux 和 iptables。

   執行下面的腳本,對編寫的ansible主機進行檢查,並運行ansible-playbook.

#!/bin/bash

# 測試列舉任務
#ansible-playbook  -i ./hosts site.yml -e target=lb_servers  -e role=lb-nginx --list-tasks
#ansible-playbook  -i ./hosts site.yml -e target=tomcat_servers  -e role=tomcat --list-tasks
#ansible-playbook  -i ./hosts site.yml -e target=memcached_servers  -e role=memcached --list-tasks

# 實驗任務可行性
#ansible-playbook -C  -i ./hosts site.yml -e target=lb_servers  -e role=lb-nginx
#ansible-playbook -C  -i ./hosts site.yml -e target=tomcat_servers  -e role=tomcat
#ansible-playbook -C  -i ./hosts site.yml -e target=memcached_servers  -e role=memcached

# 執行任務
ansible-playbook   -i ./hosts site.yml -e target=lb_servers  -e role=lb-nginx
ansible-playbook   -i ./hosts site.yml -e target=tomcat_servers  -e role=tomcat 
ansible-playbook   -i ./hosts site.yml -e target=memcached_servers  -e role=memcached

驗證明驗結果

   playbook 腳本執行成功以後,再瀏覽器中輸入 http://192.168.0.20/ 就能夠看到以前在tomcat 中部署的應用程序了。點擊刷新,會發現sessionid 並無發生變化。

實驗結果

總結

  • 在搭建tomcat集羣的過程當中,memcached只是其中一種實現方式,實際生產中,redis也是一種比較經常使用的實現方式,後面的文章中會介紹redis的使用方式。
  • 自動化運維工具備不少,ansible只是其中一個。同時ansbile只適用於小規模的服務器集羣,若是規模不大的話能夠考慮。還有其餘的自動化運維工具如puppet和saltstack咱們會在後面的文章中進行介紹。

我的博客地址:http://www.pojun.tech/ 歡迎訪問

相關文章
相關標籤/搜索