Ansible 自動化運維實例

前言

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

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

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

   在實際的應用場景中,如果進行了負載均衡,那麼後端服務器對用戶的session記錄就是一個比較令人頭疼的問題。一般需要進行單獨的處理。現在已經有很多的成熟的解決方案。例如使用Tomcat+Memcached來實現用戶的會話保持。但是Memcached緩存是基於內存的,如果SessionServer宕機了,還是會影響系統的使用,所以又有另外一種解決方案,就是使用Tomcat+redis來實現會話的永久存儲。因爲redis可以對緩存進行持久化處理。但是本文還是以memcached爲例,來介紹使用Ansible自動化部署實現Tomcat會話保持。
  具體的原理,就不再詳細介紹,如果對此還有不太瞭解的朋友可以移步我之前的博客詳細瞭解一下。http://blog.51cto.com/xiaoshuaigege/1979587

實驗拓撲結構

   在開始這篇博文的時候,需要重新給大家介紹一下本次實驗的基本環境。
網絡拓撲結構

序號 擔任角色 主機名 地址 功能描述 對應軟件版本
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腳本可以在下面的鏈接中進行下載。

點我下載

roles/lb-nginx/tasks/main.yml

---
  - 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

---
  - 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 [email protected].$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/ 歡迎訪問

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章