首页 > 系统相关 >Linux架构30 Ansible jinja2模板, jinja2模板配置负载均衡, keepalived

Linux架构30 Ansible jinja2模板, jinja2模板配置负载均衡, keepalived

时间:2024-04-15 18:57:23浏览次数:35  
标签:web name 30 keepalived jinja2 root 模板

Ansible jinja2模板

一、Ansible jinja2模板概述

#什么是jinja2模板
jinja2是Python的全功能模板引擎

#Jinja2与Ansible啥关系
Ansible通常会使用jinja2模板来修改被管理主机的配置文件等...在saltstack中同样会使用jinja2
如果在100台主机上安装服务,每台服务的监听端口都不一样,如何解决?

#Ansible如何使用Jinja2
使用Ansible的jinja2模板也就是使用template模块,该模块和copy模块一样,都是将文件复制到远端主机上去,但是区别在于,
template模块可以获取到文件中的变量,而copy则是原封不动的把文件内容复制进去 #Ansible使用Jinja2注意事项 Ansible允许jinja2模板中使用条件判断和循环,但是不允许在playbook中使用。

 

二、Ansible jinja2 模板使用

1.变量使用语法

{{ EXPR }}输出变量值,会输出自定义的变量值或facts
1)playbook文件使用template模块
2)模板文件里面变量使用{{名称}},比如{{PORT}}或使用facts内置变量

2.判断循环语法

#循环表达式
{% for i in EXPR %}
{% endfor %}

#条件判断
{% if EXPR %}
{% elif EXPR %}
{% else %}
{% endif %}

#注释
{# COMMENT #}
#shell中循环
#!/bin/bash
for i in `seq 10`;do
    echo $i
done


#shell中判断
#!/bin/bash
#注释
age=$1
if [ $age -lt 18 ];then
    echo '小姐姐'
else
    echo '大妈'
fi

 

3.jinja2测试

1)登录文件测试

#1.配置登录文件j2模板
[root@m01 web]# vim motd.j2
Welcome to {{ ansible_fqdn }}
This system total mem is : {{ ansible_memtotal_mb }} MB
This system free mem is : {{ ansible_memfree_mb }} MB

#2.推送j2模板文件
[root@m01 web]# vim motd.yml
- hosts: all
  tasks:
    - name: config motd
      template:
        src: ./motd.j2
        dest: /etc/motd

2)数据库配置文件推送

#配置数据库配置文件添加
[root@m01 web]# vim /etc/my.cnf
[mysqld]
...
{% if ansible_memtotal_mb == 972 %}    #只要系统相同,1G内存就是972
innodb_log_buffer_pool_size = 800M
{% elif ansible_memtotal_mb == 1996 %} #只要系统相同,2G内存就是1996
innodb_log_buffer_pool_size=1600M
{% endif %}
...

#配置推送语法
- hosts: web_group
  tasks:
    - name: config mysql conf
      template:
        src: /root/my.cnf
        dest: /tmp/my.cnf
        
#查看远端配置
    1.如果服务器内存是972,则配置为
    innodb_log_buffer_pool_size = 800M
    2.如果服务器内存为1996,则配置为
    innodb_log_buffer_pool_size=1600M

 

4.使用jinja2模板配置nginx负载均衡

1)安装两台wordpress

[root@m01 web]# ansible-playbook main.yml
[root@m01 web]# cat main.yml
- import_playbook: ./lnp.yml
- import_playbook: ./mariadb.yml

2)配置负载均衡配置文件

#正经配置
[root@m01 web]# vim upstream.j2
upstream web {
    server 172.16.1.7:80;
    servere 172.16.1.8:80;
}

server {
    listen 80;
    server_name blog.linux.com;
    
    location / {
        proxy_pass http://web;
        proxy_set_header Host $http_host;
    }
}

#不正经配置
[root@m01 web]# vim upstream.j2
upstream {{ server_name }} {
{% for i in range(7,17) %}
    server {{ nei_ip }}.{{ i }}:{{ upstream_port }};
{% endfor %}
}

server {
    listen {{ nginx_port }};
    server_name {{ server_name }};
    
    location / {
        proxy_pass http://{{ server_name }};
        proxy_set_header Host $http_host;
    }
}

3)配置变量

[root@m01 web]# vim upstream_vars.yml
server_name: blog.linux.com
nei_ip: 172.16.1
upstream_port: 80
nginx_port: 80

4)配置playbook

#1.配置主机清单和hosts文件

#2.编写playbook
[root@m01 web]# vim lsb.yml
- hosts: lb_group
  vars_files: ./upstream_vars.yml
  tasks:
    - name: Copy Nginx Rpm
      copy:
        src: /root/nginx-1.16.1-1.el7.ngx.x86_64.rpm
        dest: /tmp/
        
    - name: Install Nginx Server
      yum:
        name: /root/nginx-1.16.1-1.el7.ngx.x86_64.rpm
        state: present
        
    - name: Config Nginx Upstream Conf
      copy:
        src: ./upstream.j2
        dest: /etc/nginx/conf.d/upstream.conf
        
    - name: Start Nginx Server
      systemd:
        name: nginx
        state: started

 

5.使用jinja2模板配置nginx负载均衡keepalived

1)配置keepalived配置文件

#正经配置文件
global_defs {
   router_id lb01
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}

#不正经配置文件
[root@m01 web]# vim keepalived.j2
global_defs {
   router_id {{ ansible_fqdn }}
}

vrrp_instance VI_1 {
{% if ansible_fqdn == "lb01" %}
    state MASTER
    priority 150
{% else %}
    state BACKUP
    priority 100
{% endif %}
    interface eth0
    virtual_router_id 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}

2)配置推送

#编写playbook
[root@m01 web]# vim keepalived.yml
- hosts: lb_group
  tasks:
    - name: Install Keepalived Server
      yum:
        name: keepalived
        state: presetn
      
    - name: Config keepalived Conf
      template:
        src: ./keepalived.j2
        dest: /etc/keepalived/keepalived.conf
        
    - name: Start Keepalived Server
      systemd:
        name: keepalived
        state: started

 

标签:web,name,30,keepalived,jinja2,root,模板
From: https://www.cnblogs.com/ludingchao/p/18136704

相关文章

  • codegen的模板文件mustache中配置在swagger规范文档中自定义属性
    在使用swagger-codegen生成代码时,我们经常需要使用自定义属性来生成我们需要的代码。swagger-codegen使用了mustache模板引擎来生成代码,而在mustache模板文件中,我们可以通过配置swagger规范文档中的自定义属性来生成我们需要的代码。本篇文章将从第三级标题开始,详细介绍如何在swag......
  • codegen的模板文件mustache中,classname,description,notes如何赋值
    Swagger-codegen的模板文件mustacheSwagger-codegen是一个开源的代码生成工具,它可以根据Swagger规范自动生成客户端和服务器端代码。在使用Swagger-codegen时,我们可以通过mustache模板文件来自定义生成的代码。在这篇文章中,我们将介绍如何在mustache模板文件中给classname、descr......
  • P10330 [UESTCPC 2024] 黑白珠串
    原题链接1.极限构造法,黑珠数量\(\geqslant\)\(max(y_i)\),白珠数量\(\geqslant\)\(max(x_i-y_i)\)再观察样例,发现刚好把1全部放左边,0全部放右边时等号成立code#include<bits/stdc++.h>usingnamespacestd;intx,y[100005];intmain(){intk;cin>>k;......
  • 案例二十一备份30天之前的日志并压缩到指定目录下
    #!/bin/bash#备份目录info_backdir=/backup/log/info/`date-d"30dayago"+%F|awk-F"-"'{print$1"-"$2}'`error_backdir=/backup/log/error/`date-d"30dayago"+%F|awk-F"-"'{print$1"......
  • 30 天精通 RxJS (19):实践范例 - 简易 Auto Complete 实作
    今天我们要做一个RxJS的经典范例-自动完成(AutoComplete),自动完成在实务上的应用非常广泛,几乎随处可见这样的功能,只要是跟表单、搜寻相关的都会看到。虽然是个很常见的功能,但多数的工程师都只是直接套套件来完成,很少有人会自己从头到尾把完整的逻辑写一次。如果有自己......
  • 30 天精通 RxJS (18):可观察运算符 - switchMap, mergeMap, concatMap
    今天我们要讲三个非常重要的operators,这三个operators在很多的RxJS相关的library的使用示例上都会看到。很多初学者在使用这些library时,看到这三个operators很可能就放弃了,但其实如果有把这个系列的文章完整看过的话,现在应该就能很好接受跟理解。OperatorsconcatMapconcat......
  • 模板和图文集
    问题:保存文字中已设置好格式的表格解决:文档另存为,文件类型修改为模板,之后只需要双击该模板就可以新建一个保留模板上所有内容的新文档另外,可以使用图文集保存固定格式、表格、内容等的内容选取指定内容》插入》自动图文集》将所选内容保存到自动图文集,需要重复使用时可以从自......
  • 《梁宁产品思维30讲》笔记分享
    通过最近对《梁宁产品思维30讲》课程的学习,理解,讨论,再总结。个人觉得收获很大,总结出课程大纲并夹带者一些理解以读书笔记的形式分享给大家。有理解不到位的地方,请各位读者海涵。最后感谢梁宁老师的知识分享,使得每个读者心中有一个产品意识的种子,在未来的某一天悄然发芽。发刊......
  • 我的20-30岁
    我在读初中的时候,听说:“这个社会需要有素质的人“,这句话的背后告诉我,我要努力成为一个有素质的人,同时告诉我这个社会上的人的素质还普遍不高,所以需要大量有素质的人,需要提升人们的素质。当我上了高中以后,听说“这个社会需要大学生”,这句话的背后告诉我,我要努力成为一名大学生,同......
  • 20240330 专项训练
    Tajan/序列问题专项save原题链接煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援......