Ansible 是你們很是熟悉的輕量級的自動化運維工具。在小規模的應用集羣中,使用ansbile來對集羣中的應用進行管理是一個很是高效的方法。
Ansible自己支持很是多的模塊,而且操做很是簡單學習容易。關於ansible的安裝以及各個模塊的使用,此處再也不詳細的描述。java
今天咱們以一個詳細的案例,來介紹一下ansible的具體使用。同事,在github上也有不少ansible的具體事例,能夠去參考。https://github.com/ansible/ansible-examples 本文就是參考示例中的ansible-tomcat-memcached來進行的實驗。 linux
在實際的應用場景中,若是進行了負載均衡,那麼後端服務器對用戶的session記錄就是一個比較使人頭疼的問題。通常須要進行單獨的處理。如今已經有不少的成熟的解決方案。例如使用Tomcat+Memcached來實現用戶的會話保持。可是Memcached緩存是基於內存的,若是SessionServer宕機了,仍是會影響系統的使用,因此又有另一種解決方案,就是使用Tomcat+redis來實現會話的永久存儲。由於redis能夠對緩存進行持久化處理。可是本文仍是以memcached爲例,來介紹使用Ansible自動化部署實現Tomcat會話保持。
具體的原理,就再也不詳細介紹,若是對此還有不太瞭解的朋友能夠移步我以前的博客詳細瞭解一下。http://www.javashuo.com/article/p-ynyjlhja-r.html 。nginx
在開始這篇博文的時候,須要從新給你們介紹一下本次實驗的基本環境。 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 |
這次實例是基於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 並無發生變化。
我的博客地址:http://www.pojun.tech/ 歡迎訪問