zoukankan      html  css  js  c++  java
  • Ansible 角色(roles)一键部署redis集群(三主三从)

    一、目录结构

    .              roles主目录
    ├── redis      
    │   ├── files
    │   │   └── redis-6.2.5.tar.gz
    │   ├── tasks
    │   │   └── main.yml 
    │   └── vars
    │       └── main.yml
    └── role_redis.yml 启动文件
    

    二、task清单

    ---
     - name: Create Base Path
       file:
         path: '{{install_path}}/redis/{{item.port}}'
         state: 'directory'
       become: true
       with_items:
         - { port: '{{master_port}}' }
         - { port: '{{slave_port}}' }
    
     - name: Create Base Path
       file:
         path: '{{data_path}}/{{item.port}}'
         state: 'directory'
       become: true
       with_items:
         - { port: '{{master_port}}' }
         - { port: '{{slave_port}}' }
    
     - name: Check if redis exists
       shell: 'ps -ef | grep redis-server | grep -v "grep" | wc -l'
       register: check_redis
    
     - name: Stop redis server
       shell: 'redis-cli -h {{ ansible_facts.ens192.ipv4.address }} -p {{item.port}}  shutdown'
       with_items:
         - { port: '{{master_port}}' }
         - { port: '{{slave_port}}' }
       when: check_redis.stdout|int > 0
    
     - name: Delete aof
       shell: 'rm -rf {{data_path}}/{{item.port}}/appendonly.aof'
       become: true
       with_items:
         - { port: '{{master_port}}' }
         - { port: '{{slave_port}}' }
    
     - name: Delete nodes.conf
       shell: 'rm -rf {{data_path}}/{{item.port}}/nodes.conf'
       become: true
       with_items:
         - { port: '{{master_port}}' }
         - { port: '{{slave_port}}' }
    
     - name: Copy redis tar
       copy:
         src: '{{file_name}}.tar.gz'
         dest: '/tmp'
       become: true
    
     - name: Unpack redis tar
       unarchive:
         src: '/tmp/{{file_name}}.tar.gz'
         dest: '{{install_path}}'
         remote_src: yes
         owner: root
         group: root
       become: true
     - name: Installing Redis
       shell: make && make install
       args:
         chdir: '{{install_path}}/{{file_name}}'
       become: true
    
     - name: Replace common config
       replace:
         path: '{{install_path}}/{{file_name}}/redis.conf'
         regexp: '{{item.regexp}}'
         replace: '{{ item.line }}'
       with_items:
         - { regexp: 'bind 127.0.0.1 -::1', line: 'bind 0.0.0.0'}
         - { regexp: '# cluster-enabled yes', line: 'cluster-enabled yes'}
         - { regexp: '# cluster-config-file nodes-6379.conf', line: 'cluster-config-file {{install_path}}/redis/{{master_port}}/nodes.conf'}
         - { regexp: '# cluster-node-timeout 15000', line: 'cluster-node-timeout 5000'}
         - { regexp: 'appendonly no', line: 'appendonly yes'}
         - { regexp: 'daemonize no', line: 'daemonize yes'}
         - { regexp: '# masterauth <master-password>', line: 'masterauth "om-redis-uat-2021"'}
         - { regexp: 'pidfile /var/run/redis_6379.pid', line: 'pidfile  {{data_path}}/{{master_port}}/redis.pid'}
         - { regexp: 'dir ./', line: 'dir {{data_path}}/{{master_port}}'}
       become: true
    
     - name: Copy config
       copy:
         src: '{{install_path}}/{{file_name}}/redis.conf'
         dest: '{{install_path}}/redis/{{item.port}}/'
       with_items:
         - { port: '{{master_port}}' }
         - { port: '{{slave_port}}' }
       become: true
    
     - name: Replace slave config
       replace:
         path: '{{install_path}}/redis/{{slave_port}}/redis.conf'
         regexp: '{{item.regexp}}'
         replace: '{{ item.line }}'
       with_items:
         - { regexp: 'cluster-config-file {{install_path}}/redis/{{master_port}}/nodes.conf', line: 'cluster-config-file {{install_path}}/redis/{{slave_port}}/nodes.conf'}
         - { regexp: 'pidfile  {{data_path}}/{{master_port}}/redis.pid', line: 'pidfile {{data_path}}/{{slave_port}}/redis.pid'}
         - { regexp: 'dir {{data_path}}/{{master_port}}', line: 'dir {{data_path}}/{{slave_port}}'}
       become: true
    
    
     - name: Modify port
       replace:
         path: '{{item.path}}'
         regexp: '{{item.regexp}}'
         replace: '{{ item.line }}'
       become: true
       with_items:
         - {path: '{{install_path}}/redis/{{master_port}}/redis.conf', regexp: 'port 6379', line: 'port {{master_port}}'}
         - {path: '{{install_path}}/redis/{{slave_port}}/redis.conf', regexp: 'port 6379', line: 'port {{slave_port}}'}
     - name: Delete nodes conf
       file:
         path: '{{data_path}}/{{item.port}}/nodes-{{item.port}}.conf'
         state: 'absent'
       with_items:
         - { port: '{{master_port}}' }
         - { port: '{{slave_port}}' }
       become: true
    
     - name: Start redis
       shell: '{{install_path}}/{{file_name}}/src/redis-server {{install_path}}/redis/{{item.port}}/redis.conf'
       become:  true
       with_items:
         - { port: '{{master_port}}' }
         - { port: '{{slave_port}}' }
       become: true
    
     - name: Create Cluster
       shell: 'echo yes | redis-cli --cluster create 10.86.130.145:7000 10.86.130.144:7000 10.86.130.146:7000 10.86.130.145:7001 10.86.130.144:7001 10.86.130.146:7001 --cluster-replicas 1'
       run_once: true
    

    三、vars变量

    master_port: 7000
    slave_port: 7001
    file_name: 'redis-6.2.5'
    install_path: '/usr/local'
    data_path: '/data/redis'
    

    四、role_redis.yml

    ---
     - hosts: test
       remote_user: zhuhg
       roles:
         - redis
    
  • 相关阅读:
    字符串中部分字符替换
    斐波那契数列
    单列模式--代码
    selenium基础知识
    关于页面元素不能定位,通过Js进行处理
    Linux性能监控工具命令--top
    java实现selenium jquery滑动解锁
    PHP学习(三)——连接MySQL数据库理论
    PHP学习(二)
    PHP学习(一)
  • 原文地址:https://www.cnblogs.com/zhface/p/15166951.html
Copyright © 2011-2022 走看看