ansible 实战 之nginx代理tomcat集群
发表于:2022-05-06 |
实验环境:
操作系统 contos7.4
node 192.168.137.130 ansible
node1 192.168.137.131 nginx
node2 192.168.137.132 tomcatA
node3 192.168.137.133 tomcatB

开始
配置主机名解析
[root@node /]# vi /etc/hosts

192.168.137.130 node.cwf.com node
192.168.137.131 node1.cwf.com node1
192.168.137.132 node2.cwf.com node2
192.168.137.133 node3.cwf.com node3

配置主机将秘钥认证通信

ssh-keygen -t rsa -P ""
ssh-copy-id -i ~/.ssh/id_rsa.pub node1

…
安装ansible

  yum -y install ansible -y
1
添加主机到主机清单文件中

[root@node /]# vi /etc/ansible/hosts

[lb]
node1
[tomcat]
node2
node3
node3


查看主机清单主机的可用主机

[root@node /]# ansible all --list-hosts
  hosts (3):
    node1
    node2
    node3
[root@node /]# ansible lb --list-hosts
  hosts (1):
    node1
[root@node /]# ansible tomcat --list-hosts
  hosts (2):
    node2
    node3

定义roles目录

[root@node /]# mkdir -pv /etc/ansible/roles/{nginx,tomcat,jdk}/{files,templates,tasks,handlers,vars,meta,default}
mkdir: created directory ‘/etc/ansible/roles/nginx’
mkdir: created directory ‘/etc/ansible/roles/nginx/files’
mkdir: created directory ‘/etc/ansible/roles/nginx/templates’
mkdir: created directory ‘/etc/ansible/roles/nginx/tasks’
mkdir: created directory ‘/etc/ansible/roles/nginx/handlers’
mkdir: created directory ‘/etc/ansible/roles/nginx/vars’
mkdir: created directory ‘/etc/ansible/roles/nginx/meta’
mkdir: created directory ‘/etc/ansible/roles/nginx/default’
mkdir: created directory ‘/etc/ansible/roles/tomcat’
mkdir: created directory ‘/etc/ansible/roles/tomcat/files’
mkdir: created directory ‘/etc/ansible/roles/tomcat/templates’
mkdir: created directory ‘/etc/ansible/roles/tomcat/tasks’
mkdir: created directory ‘/etc/ansible/roles/tomcat/handlers’
mkdir: created directory ‘/etc/ansible/roles/tomcat/vars’
mkdir: created directory ‘/etc/ansible/roles/tomcat/meta’
mkdir: created directory ‘/etc/ansible/roles/tomcat/default’
mkdir: created directory ‘/etc/ansible/roles/jdk’
mkdir: created directory ‘/etc/ansible/roles/jdk/files’
mkdir: created directory ‘/etc/ansible/roles/jdk/templates’
mkdir: created directory ‘/etc/ansible/roles/jdk/tasks’
mkdir: created directory ‘/etc/ansible/roles/jdk/handlers’
mkdir: created directory ‘/etc/ansible/roles/jdk/vars’
mkdir: created directory ‘/etc/ansible/roles/jdk/meta’
mkdir: created directory ‘/etc/ansible/roles/jdk/default’


编辑nginx角色的任务文件

[root@node /]# cd /etc/ansible/roles/nginx/

- name: install nginx
  yum: name=nginx state=latest
- name: install conf
  copy: src=lb.conf dest=/etc/nginx/conf.d/
  tags: conf
  notify: restart nginx
- name: start nginx
  service: name=nginx state=started enabled=yes

编辑handlers触发文件

[root@node nginx]# vim handlers/main.yml
- name: restart nginx
  service: name=nginx state=restarted

定义Nginx的虚拟主机文件

[root@node nginx]# vim files/lb.conf
[root@node nginx]# cat files/lb.conf

upstream tcsrvs {
        server node2.cwf.com:8080;
        server node3.cwf.com:8080;
}
server {
        listen 80;
        server_name node1.cwf.com;
        location / {
                proxy_pass http://tcsrvs;
        }
}

配置jdk角色
配置jdk角色的任务文件

[root@node roles]# cd jdk/
[root@node jdk]# ls
default  files  handlers  meta  tasks  templates  vars
[root@node jdk]# vim tasks/main.yml
[root@node jdk]# cat tasks/main.yml
- name: install openjdk
  yum: name=java-{{ version }}-openjdk-devel state=latest  #{{ version }}使用变量
- name: install env file                #定义jdk程序的环境文件
  copy: src=java.sh dest=/etc/profile.d/


编辑jdk的程序环境文件

vim files/java.sh
export JAVA_HOME=/usr

配置tomcat的角色
编辑tomcat的任务文件

[root@node tomcat]# vim tasks/main.yml
- name: install package
  yum: name={{ item }} state=latest
  with_items:
  - tomcat
  - tomcat-admin-webapps
  - tomcat-webapps
  - tomcat-docs-webapp
- name: start tomcat
  service: name=tomcat state=started enabled=yes

编辑playbook样本文件,调用nginx角色

[root@node roles]# vim nginx.yml

- hosts: lb
  remote_user: root
  roles:
  - nginx
- hosts: tomcat
  remote_user: root
  roles:
  - { role: jdk,version: 1.8.0 }  #调用jdk角色及定义version变量
  - tomcat

注意 配网络源 本地 源 可能没有 tomcat 的包
执行nginx.yml样本文件

[root@node roles]# ansible-playbook nginx.yml

PLAY [lb] *******************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************
ok: [node1]

TASK [nginx : install nginx] ************************************************************************************************************
ok: [node1]

TASK [nginx : install conf] *************************************************************************************************************
ok: [node1]

TASK [nginx : start nginx] **************************************************************************************************************
ok: [node1]

PLAY [tomcat] ***************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************
ok: [node3]
ok: [node2]

TASK [jdk : install openjdk] ************************************************************************************************************
changed: [node3]
changed: [node2]

TASK [jdk : install env file] ***********************************************************************************************************
ok: [node2]
ok: [node3]

TASK [tomcat : install package] *********************************************************************************************************
[DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply
multiple items and specifying `name: "{{ item }}"`, please use `name: ['tomcat', 'tomcat-admin-webapps', 'tomcat-webapps', 'tomcat-docs-
webapp']` and remove the loop. This feature will be removed in version 2.11. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
[DEPRECATION WARNING]: Invoking "yum" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply
multiple items and specifying `name: "{{ item }}"`, please use `name: ['tomcat', 'tomcat-admin-webapps', 'tomcat-webapps', 'tomcat-docs-
webapp']` and remove the loop. This feature will be removed in version 2.11. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
changed: [node2] => (item=[u'tomcat', u'tomcat-admin-webapps', u'tomcat-webapps', u'tomcat-docs-webapp'])
changed: [node3] => (item=[u'tomcat', u'tomcat-admin-webapps', u'tomcat-webapps', u'tomcat-docs-webapp'])

TASK [tomcat : start tomcat] ************************************************************************************************************
changed: [node2]
changed: [node3]

PLAY RECAP ******************************************************************************************************************************
node1                      : ok=4    changed=0    unreachable=0    failed=0
node2                      : ok=5    changed=3    unreachable=0    failed=0
node3                      : ok=5    changed=3    unreachable=0    failed=0



浏览器访问 可以 成功 !!!!!!!!!!!
上一篇:
Elasticsearch- 集群状态查询
下一篇:
Ubuntu - 查看磁盘IO情况