首页 > 其他分享 >五月学习之Ansible delegate

五月学习之Ansible delegate

时间:2023-06-12 20:32:17浏览次数:47  
标签:haproxy name Ansible hosts user 五月 172.16 1.1 delegate

1、Ansible delegate

1.1、什么是Task委派

简单来说,就是本来需要在当前被控制端主机执行的操作,被委派给其他主机执行

1.2、TASK委派场景实践

场景说明
1、为172.16.1.7服务器添加一条hosts记录:1.1.1.1 qingchen.com
2、同时要把这个hosts记录写一份至172.16.1.5节点
3、除此任务之外172.16.1.7的其他任务都不会委派给172.16.1.5执行

1、使用delegate_to关键字实现task委派
- hosts: 172.16.1.7
  tasks:
    - name: Add WebServers DNS
	    shell: "echo 1.1.1.1 qingchen.com >> /etc/hosts "
	  - name: delegate_to Host 172.16.1.5
	    shell: "echo 1.1.1.1 qingchen.com >> /etc/hosts "
	    delegate_to: 172.16.1.5
	  - name: Add WebServers DNS
	    shell: "echo 2.2.2.2 qingchen2.com >> /etc/hosts "
	  
2、如果该任务要对ansible控制节点执行怎么办?可以委派127.0.0.1或者使用local_action来实现
- hosts: 172.16.1.7
  tasks:
    - name: Add WebServers DNS
	    shell: "echo 1.1.1.1 qingchen.com >> /etc/hosts "
	  - name: delegate_to Host 172.16.1.5
	    shell: "echo 1.1.1.1 qingchen.com >> /etc/hosts "
	    delegate_to: 172.16.1.5
	  - name: Add WebServers DNS
	    shell: "echo 2.2.2.2 qingchen2.com >> /etc/hosts "
#	  - name: delegate_to Host 127.0.0.1
#	    shell: "echo 1.1.1.1 qingchen.com >> /etc/hosts "
#	    deledate_to: 127.0.0.1
#	    delegate_facts: True #收集被委托机器的facts
    - name: local_action Host 127.0.0.1
	    shell: "echo 1.1.1.1 qingchen.com >> /etc/hosts "
	    connection: local

1.3、TASK委派场景实践2

#创建普通用户管理ansible
- hosts: webservers
  vars:
    - user_name: qingchen_demo
  tasks:
    - name: Create Manager qingchen_demo
	    user:
	      name: "{{ user_name }}"
    		generate_ssh_key: yes
    		ssh_key_bits: 2048
    		ssh_key_file: .ssh/id_rsa
    	register: user_message
    	deledate_to: localhost
    	run_once: true
    	  
    - name: 打印管理用户的key结果
    	debug:
    	  msg: "{{ user_message.ssh_public_key }}"
    		
    - name: 在被控端上创建用户
      user:
        name: "{{ user_name }}"
    - name: 在被控端上创建用户.ssh目录
      file:
        path: /home/{{ user_name }}/.ssh
   	    state: directory
   	    owner: "{{ user_name }}"
      	group: "{{ user_name }}"
   	    mode: "0700"
    - name: 将管理端{{ user_name }}用户的key存储到被控端
      copy:
        content: "{{ user_message.ssh_public_key }}"
        dest: /home/{{ user_name }}/.ssh/authorized_keys
   	    owner: "{{ user_name }}"
   	    group: "{{ user_name }}"
   	    mode: "0600"
    - name: 配置被控制端sudo提权,最后追加一行
      lineinfile:
        dest: /etc/sudoers
   	    line: "{{ user_name }} ALL=(ALL) NOPASSWD:ALL"

1.4、TASK委派场景实践3

1、首先搭建Haproxy + web_cluster集群环境
2、当web节点代码需要更新时,需要下线节点,这个时候需要将下线节点的任务委派给Haproxy
3、操作web_cluster集群,将新的代码替换上
4、当web节点代码更新成功后,需要上线节点,这个时候需要将上线节点的任务委派给Haproxy
5、然后依次循环,直到完成所有节点的代码更新与替换

1.4.1、ansible构建haproxy集群

1、配置Haproxy负载均衡
cat /etc/haproxy/haproxy.cfg
#Glocal settings
global
    log 127.0.0.1 local2
    chroot /var/lib/haproxy
    pidfile /var/run/haproxy.pid
	  maxconn 50
	  user haproxy
	  group haproxy
	  daemon
	  stats socket /var/lib/haproxy/stats level admin
#Defaults settings
defaults
	  mode http
    log  global
    option httplog
    option dontlognull
    option http-server-close
	  option forwardfor except 127.0.0.0/8
	  option redispatch
    retries 3
	  timeout http-request 10s
	  timeout queue 1m
	  timeout connect 10s
	  timeout client 1m
	  timeout server 1m
	  timeout http-keep-alive 10s
	  timeout check 10s
	  maxconn 3000
#Listen settings
listen haproxy-stats
	  bind *:9999
	  stats enable
#   stats fefresh 1s
    stats hide-version
    stats uri /haproxy?stats
    stats realm "HAProxy statistics"
    stats auth admin:123456
    stats admin if TRUE
#frontend proxys www_site
frontend www
    bind *:80
    mode http
    use_backend web_cluster
#Backend Servers
backend web_cluster
	balance roundrobin
	server 172.16.1.7 172.16.1.7:80 check port 80
	server 172.16.1.8 172.16.1.8:80 check port 80

2、web1节点配置如下
yum install -y nginx
echo "Web Page RS-Node1" > /usr/share/nginx/html/index.html
systemctl start nginx

3、web1节点配置如下
yum install -y nginx
echo "Web Page RS-Node2" > /usr/share/nginx/html/index.html
systemctl start nginx

1.4.2、Ansible清单配置

cat /etc/ansible/hosts
[lbservers]
172.16.1.5
[webservers]
172.16.1.7
172.16.1.8

1.4.3、Ansible委托配置

cat haproxy_deploy.yml 
- hosts: webservers
  serial: 1
  tasks:
    #下线节点
    - name: Stop Haproxy Webcluster Pool Node
      haproxy:
        socket: /var/lib/haproxy/stats
        backend: "web_cluster"
        state: disabled
        host: "{{ inventory_hostname }}" #获取当前操作节点主机名称
      delegate_to: "172.16.1.5" #下线节点任务委派给负载均衡节点
    #部署代码
    - name: Copy New Code Web Node Server
      copy:
        content: "App Deploy New-{{ ansible_eth1.ipv4.address.split('.')[-1]}}"
        dest: /usr/share/nginx/html/index.html
        mode: 644
      notify: Restart Nginx Server
    #上线节点
    - name: Start Haproxy Webcluster Pool Node
      haproxy:
        socket: /var/lib/haproxy/stats
        backend: "web_cluster"
        state: enabled
        host: "{{ inventory_hostname }}"
      delegate_to: "172.16.1.5"
  handlers:
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: reloaded

1.4.4、Ansible委托验证

for i in {1..100};do curl "http://10.0.0.5" && sleep 0.5 && echo ;done

标签:haproxy,name,Ansible,hosts,user,五月,172.16,1.1,delegate
From: https://blog.51cto.com/u_13236892/6465374

相关文章

  • C# Delegate 委托
    什么是委托?可以把委托看成是用来执行方法(函数)的一个“指针”通俗的说就是:通过委托,我们可以把方法当成参数传递。示例  举个例子:“设想,如果我们写了一个厨师做菜的方法,里面有拿菜、切菜、配菜、炒菜四个步骤,但编写此方法代码的人想让配菜这个环节让调用方法的人来实现,换句......
  • 五月读书笔记2
    《代码整洁之道》是由罗伯特·C·马丁(RobertC.Martin)所著的一本软件工程类书籍。它强调了编写清晰、可维护和可理解的代码的重要性。代码质量与可读性:书中强调了代码质量对于项目成功的重要性。良好的代码应该具备可读性,即使是其他开发人员也能轻松理解代码的意图和逻辑。为了......
  • 五月读书笔记1
    《黑客与画家》是保罗·格雷厄姆(PaulGraham)所著的一本计算机科学与创造力的书籍。作者以自身的经历和见解,探讨了黑客文化、编程艺术和创业精神等主题。黑客文化与创造力:作者解释了黑客文化的本质,并将其定义为一种追求创造和突破的态度。黑客不仅仅是指计算机犯罪者,更是指那些对......
  • 五月天的票,你抢到了吗
    一、背景你是否错过了周杰伦的票,最近又没抢到五月天的票,不要太悲伤,今晚有华晨宇的票,后天还有任贤齐的票,加油哦!为了帮助你在激烈的抢票竞争中获得更大的成功机会,本文将介绍抢票软件的实现原理以及我所了解的一些抢票方式。但是,请不要过度将希望寄托于抢票软件,它有时也不灵,经过我......
  • 五月学习之Ansible Task Control
    六、AnsibleTaskControl6.1when条件语句when关键字主要针对TASK任务进行判断,对于此前我们使用过的yum模块是可以自动检测软件包是否已被安装,无需人为干涉;但对于有些任务则是需要进行判断才可以实现的。比如:web节点都需要配置nginx仓库,但其他节点并不需要,此时就会用到w......
  • 【阅读笔记】五月
    人们总是希望一切的事情都尽在掌握之中,所以总是试图在制定完美计划之后一路顺风顺水地执行下去。但是软件维护是一个提高混乱度(增加熵)的过程,所以出现前进两步,后退一步;甚至前进一步,后退一步都是很正常的。而且随着维护的深入,会发现用在修复原有设计上瑕疵的工作量越来越少,而早期维......
  • 【阅读笔记】五月..
    进度落后往往并不是因为大灾难,而通常只是因为那些仅仅会导致延迟半天到一天的事件的堆积最终致使整个进度延期一年。对于里程碑的确立,必须是具体的,特定的,可度量的事情,能够清晰定义。不能清晰定义的里程碑是难以处理的负担。关键路径技术是衡量是否延期的重要方法,每个人都要尽量......
  • 【阅读笔记】五月.
    在设计的过程中,我们要做到自上而下的设计,在设计的每个步骤中,尽可能地使用级别较高的表达方法来表示概念和隐藏细节,直到必要的时候再进一步的细化。文中的这段话让笔者想起SICP中教授们试图传达给学生们的一个屠龙之术——“推迟做出决定的时机,因为只有尽可能地退出做出决定的时......
  • 五月二十五日实验
    实验一略实验二略实验三略实验四#include<stdio.h>#include<string.h>#defineN100typedefstruct{charnum[10];//学号ints1;//期末成绩ints2;//平时成绩doublesum;//总评charlevel[10];//等级}STU;intfun(STUa[],intn,STUh[]);//......
  • 五月学习之Ansible Register
    四、AnsibleRegister1、什么是Registerregister可以将task执行的任务结果存储至某个变量中,便于后续的引用;例1获取被控节点的端口信息catf5.yml----hosts:alltasks:-name:shell:netstat-lntpregister:System_Status-name:GetSystemSta......