zoukankan      html  css  js  c++  java
  • [Ansible实战]-ansible部署Redis-5.x集群

     

    0.剧本说明

    自动安装部署redis-5.x集群
    只是创建和启动,集群初始化命令需要手动执行

    1.目录结构

    [root@m01 ~]# tree /etc/ansible/roles/redis_cluster/
    /etc/ansible/roles/redis_cluster/
    ├── files
    │   ├── redis_6380
    │   │   ├── conf
    │   │   ├── logs
    │   │   └── pid
    │   ├── redis_6381
    │   │   ├── conf
    │   │   ├── logs
    │   │   └── pid
    │   └── redis_cmd
    │       ├── redis-benchmark
    │       ├── redis-check-aof
    │       ├── redis-check-rdb
    │       ├── redis-cli
    │       └── redis-server
    ├── handlers
    │   └── main.yaml
    ├── tasks
    │   └── main.yaml
    ├── templates
    │   ├── redis_6380.conf.j2
    │   ├── redis_6381.conf.j2
    │   ├── redis-master.service.j2
    │   └── redis-slave.service.j2
    └── vars
    
    14 directories, 11 files
    

    2.配置文件jinja模版

    主节点配置模版

    [root@m01 ~]# cat /etc/ansible/roles/redis_cluster/templates/redis_6380.conf.j2 
    bind {{ ansible_facts.eth0.ipv4.address }}
    port 6380
    daemonize yes
    pidfile "/opt/redis_6380/pid/redis_6380.pid"
    logfile "/opt/redis_6380/logs/redis_6380.log"
    dbfilename "redis_6380.rdb"
    dir "/data/redis_6380/"
    appendonly yes
    appendfilename "redis.aof"
    appendfsync everysec
    cluster-enabled yes
    cluster-config-file nodes_6380.conf
    cluster-node-timeout 15000
    

    从节点配置模版

    [root@m01 ~]# cat /etc/ansible/roles/redis_cluster/templates/redis_6381.conf.j2  
    bind {{ ansible_facts.eth0.ipv4.address }}
    port 6381
    daemonize yes
    pidfile "/opt/redis_6381/pid/redis_6381.pid"
    logfile "/opt/redis_6381/logs/redis_6381.log"
    dbfilename "redis_6381.rdb"
    dir "/data/redis_6381/"
    appendonly yes
    appendfilename "redis.aof"
    appendfsync everysec
    cluster-enabled yes
    cluster-config-file nodes_6381.conf
    cluster-node-timeout 15000
    

    3.启动脚本

    主节点启动脚本

    [root@m01 ~]# cat /etc/ansible/roles/redis_cluster/templates/redis-master.service.j2 
    [Unit]
    Description=Redis persistent key-value database
    After=network.target
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    ExecStart=/usr/local/bin/redis-server /opt/redis_6380/conf/redis_6380.conf --supervised systemd
    ExecStop=/usr/local/bin/redis-cli -h {{ ansible_facts.eth0.ipv4.address }}  -p 6380 shutdown
    Type=notify
    User=redis
    Group=redis
    RuntimeDirectory=redis
    RuntimeDirectoryMode=0755
    
    [Install]
    WantedBy=multi-user.target
    

    从节点启动脚本

    [root@m01 ~]# cat /etc/ansible/roles/redis_cluster/templates/redis-slave.service.j2 
    [Unit]
    Description=Redis persistent key-value database
    After=network.target
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    ExecStart=/usr/local/bin/redis-server /opt/redis_6381/conf/redis_6381.conf --supervised systemd
    ExecStop=/usr/local/bin/redis-cli -h {{ ansible_facts.eth0.ipv4.address }}  -p 6381 shutdown
    Type=notify
    User=redis
    Group=redis
    RuntimeDirectory=redis
    RuntimeDirectoryMode=0755
    
    [Install]
    WantedBy=multi-user.target
    

    4.tasks清单

    [root@m01 ~]# cat /etc/ansible/roles/redis_cluster/tasks/main.yaml 
    #01.创建用户组
    - name: 01_create_group
      group:
        name: redis 
        gid: 777 
    
    #02.创建用户
    - name: 02_create_user
      user:
        name: redis 
        uid: 777 
        group: redis 
        shell: /sbin/nologin
        create_home: no
    
    #03.拷贝执行文件
    - name: 03_copy_cmd
      copy:
        src: redis_cmd/
        dest:  /usr/local/bin/
        mode: '0755'
    
    #04.拷贝运行目录
    - name: 04_mkdir_conf
      copy:
        src: "{{ item }}"
        dest: /opt/
        owner: redis
        group: redis
      loop:
        - redis_6380
        - redis_6381
        
    #05.创建数据目录
    - name: 05_mkdir_data
      file: 
        dest: "/data/{{ item }}"
        state: directory 
        owner: redis 
        group: redis 
      loop:
        - redis_6380 
        - redis_6381 
    
    #06.拷贝配置文件模版
    - name: 06_copy_conf
      template:
        src: "{{ item.src}}"
        dest: "{{ item.dest }}"
        backup: yes
      loop:
        - { src: 'redis_6380.conf.j2', dest: '/opt/redis_6380/conf/redis_6380.conf' }
        - { src: 'redis_6381.conf.j2', dest: '/opt/redis_6381/conf/redis_6381.conf' }
        - { src: 'redis-master.service.j2', dest: '/usr/lib/systemd/system/redis-master.service' }
        - { src: 'redis-slave.service.j2', dest: '/usr/lib/systemd/system/redis-slave.service' }
      notify:
        - restart redis-master
        - restart redis-slave 
    
    #07.启动服务
    - name: 07_start_redis
      systemd: 
        name: "{{ item }}" 
        state: started 
        daemon_reload: yes
      loop:
      - redis-master 
      - redis-slave
    

    5.handles清单

    [root@m01 ~]# cat /etc/ansible/roles/redis_cluster/handlers/main.yaml 
    - name: restart redis-master 
      service: 
        name: redis-master 
        state: restarted
    
    - name: restart redis-slave
      service: 
        name: redis-slave
        state: restarted
    

    6.执行任务清单

    [root@m01 ~]# cat /etc/ansible/redis_cluster.yaml 
    - hosts: redis_cluster
      roles:
        - redis_cluster
    系统化运维博客
  • 相关阅读:
    C#_数据访问类查询 和 属性扩展
    C#_0913 完整修改删除、实体类和数据访问类
    webform基础
    TreeView, 数据导出
    无边框窗体,tiner控件
    容器,打印设置
    多窗体,菜单工具栏
    公共控件
    winform
    数据访问类查询
  • 原文地址:https://www.cnblogs.com/nsthink-666/p/12744559.html
Copyright © 2011-2022 走看看