首页 > 数据库 >使用ansible-playbook自动化安装redis哨兵

使用ansible-playbook自动化安装redis哨兵

时间:2023-01-04 18:56:18浏览次数:45  
标签:exporter name redis instance ansible playbook sentinel port

【使用自动化安装MySQL主从架构】

说明:使用ansible-playbook 自动化安装 redis哨兵 + redis-exporter的采集数据

【剧本说明】

以下文件在roles目录下

tree roles/redis_sentinel/
roles/redis_sentinel/
├── tasks
│ ├── install_exporter.yml 数据采集剧本
│ └── main.yml  主剧本信息
├── templates
│ ├── readme.md
│ ├── redis.conf  配置文件
│ ├── redis-exporter.service  数据采集的服务信息
│ ├── redis.service  数据库的服务信息
│ ├── sentinel.conf  哨兵的配置文件
│ ├── sentinel.service  哨兵的服务信息
└── vars
└── main.yml

【对应目录创建脚本】

tasks目录

vim main.yml 
---
- name: add redis user
  user:
    name: redis
    system: yes

- name: create data directory
  file:
    path: '{{install_dir}}/redis_{{item.0}}/{{item.1}}'
    state: directory
    owner: redis
    group: redis
    recurse: yes
  with_nested: 
  - ['{{instance_port}}','{{sentinel_port}}']
  - ['conf', 'log', 'run', 'data']


- name: download binary
  copy: src={{download_target}}/{{item.name}} dest=/usr/local/bin/{{item.name}} mode=0755
  with_items:
    - { name: 'redis-benchmark' }
    - { name: 'redis-check-aof' }
    - { name: 'redis-check-rdb' }
    - { name: 'redis-cli' }
    - { name: 'redis-sentinel' }
    - { name: 'redis-server' }

- name: disable hugepage
  shell: echo never > /sys/kernel/mm/transparent_hugepage/enabled

- name: disable hugepage permanent
  lineinfile: 
    path: /etc/rc.local
    line: echo never > /sys/kernel/mm/transparent_hugepage/enabled

- name: config redis instance
  template:
    src: redis.conf
    dest: '{{install_dir}}/redis_{{instance_port}}/conf/'
    owner: redis
    group: redis
  register: configure_instance_result

- name: make redis serivce
  template:
    src: redis.service
    dest: '/etc/systemd/system/redis-{{instance_port}}.service'

- name: start redis
  systemd:
    name: 'redis-{{instance_port}}'
    daemon_reload: yes
    state: restarted
  when: configure_instance_result is changed

- name: config sentinel
  template:
    src: sentinel.conf
    dest: '{{install_dir}}/redis_{{sentinel_port}}/conf/redis.conf'
    owner: redis
    group: redis
  register: configure_sentinel_result

- name: make sentinel service
  template:
    src: sentinel.service
    dest: '/etc/systemd/system/redis-{{sentinel_port}}.service'

- name: start sentinel
  systemd:
    name: 'redis-{{sentinel_port}}'
    daemon_reload: yes
    state: restarted
  when: configure_sentinel_result is changed

- name: get master
  run_once: yes
  set_fact: 
    master_list_str: '{% for host in groups["redis_sentinel"] %}{% if "master" in hostvars[host] and hostvars[host].master %}{{host}},{% endif %}{% endfor %}'

- name: set fact
  run_once: yes
  set_fact:
    master_list: '{{master_list_str[0:-1].split(",")}}'

- name: config slave node
  shell: /usr/local/bin/redis-cli -h {{ansible_host}} -p {{instance_port}} -a '{{password}}' slaveof {{master_list[0]}} {{instance_port}}
  when: not ansible_host in master_list

- name: config redis service enable
  systemd:
    name: 'redis-{{ instance_port }}'
    enabled: yes

- name: config sentinel service enable
  systemd:
    name: 'redis-{{ sentinel_port }}'
    enabled: yes

- name: install Exporter
  include: install_exporter.yml
  tags:
    - redis_exporter
vim install_exporter.yml 
---

- name: Download redis Exporter
  copy: src={{download_target}}/{{exporter_binary}} dest=/usr/local/bin/{{exporter_binary}} mode=0755

- name: Add redis exporter system server
  template:
    dest: /etc/systemd/system/redis-exporter.service
    src: redis-exporter.service

- name: Ensure redis exporter is enabled
  systemd:
    daemon_reload: yes
    name: redis-exporter
    enabled: yes

- name: Start redis exporter
  service: 
    name: redis-exporter
    state: restarted
    enabled: yes

 

 templates目录

vim redis-exporter.service
[Unit]
Description=redis_exporter
Documentation=https://github.com/oliver006/redis_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/redis-exporter -redis.addr=127.0.0.1:6379  -redis.password=Cqhhyun!8090
Restart=on-failure
[Install]
WantedBy=multi-user.target
vim redis.service
[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 {{install_dir}}/redis_{{instance_port}}/conf/redis.conf --supervised systemd
ExecStop=/usr/local/bin/redis-cli shutdown
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
vim redis.conf
daemonize yes 
port {{instance_port}}
pidfile {{install_dir}}/redis_{{instance_port}}/run/redis.pid
logfile {{install_dir}}/redis_{{instance_port}}/log/redis.log
save 900 1
save 300 10
save 60 10000
dbfilename redis.rdb
maxmemory 2048MB
dir {{install_dir}}/redis_{{instance_port}}/data/
requirepass {{password}}
masterauth {{ password }}
rename-command KEYS ""
rename-command SHUTDOWN ""
# rename-command CONFIG ""
# rename-command FLUSHALL ""
# appendonly yes
# appendfilename "redis.aof"
# appendfsync everysec
vim sentinel.service
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/redis-sentinel {{install_dir}}/redis_{{sentinel_port}}/conf/redis.conf --supervised systemd
ExecStop=/usr/local/bin/redis-cli -p {{sentinel_port}} shutdown
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
vim sentinel.conf
port {{sentinel_port}}
daemonize yes
logfile {{install_dir}}/redis_{{sentinel_port}}/log/redis.log
dir {{install_dir}}/redis_{{sentinel_port}}/data/
sentinel monitor mymaster {% for host in groups["redis_sentinel"] %}{% if "master" in hostvars[host] and hostvars[host].master %}{{host}} {{instance_port}} {{(groups["redis_sentinel"] | length / 2) | round | int}}{% endif %}{% endfor %}

sentinel auth-pass mymaster {{password}} 
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 18000

 

var目录

main.yml 
---

install_dir: /data/redis
instance_port: 6379
sentinel_port: 26379
password: Redis_1234
download_target: /tmp/soft
exporter_binary: redis-exporter

 

【安装包及配置】

环境变量说明,这里默认数据目录为/data,注意redis端口跟sentinel端口

main.yml 
---

install_dir: /data/redis
instance_port: 6379
sentinel_port: 26379
password: Redis_1234
download_target: /tmp/soft
exporter_binary: redis-exporter

将编译好的redis文件放到download_target目录下

redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-sentinel,redis-server,redis-exporter

 

标签:exporter,name,redis,instance,ansible,playbook,sentinel,port
From: https://www.cnblogs.com/zetanchen/p/17025742.html

相关文章

  • ansible使用
    一、简介Ansible是一个开源的、自动化运维的强大工具,早前被红帽收购,通过它可实现实现批量系统配置、批量程序部署、批量运行命令等功能。Ansible不需要在远程主机上安......
  • redis部署手册_20221129
    1.软件版本及下载Keepalived:https://www.keepalived.org/download.htmlRedis下载地址:https://redis.io/download/本次安装版本:Redis:7.0.5Keepalived:2.2.72.主......
  • 云redis自定义参数
    云redis自定义参数自定义的参数支持组合排列定义 参数说明支持版本disable-command-list设置禁用命令,用户可根据实际业务需要关闭某些时间复杂度高或危险程......
  • Redis面试题及答案整理(2023最新版)
    **Redis面试题及答案**,适用于应届生、有工作经验的程序员,每道都是认真筛选出的高频面试题,助力大家能找到满意的工作!**Redis**###**下载链接**:[**全部面试题及答案PDF**](ht......
  • 使用Jmeter读取和使用Redis数据
    前言消息队列和缓存是目前主流的中间件,我们在日常测试过程中,无论是接口还是压力测试,都会遇到需要处理这些中间件数据的情况。本文以Redis对缓存做一个简单的介绍,并基于Jme......
  • Ansible 状态管理相关知识总结【转】
    前言就像所有服务器批量管理工具(puppet有DSL,salt有state)一样,ansible也有自己的状态管理组件,叫做playbook。所有这些类似的概念的东西都是让你用一种更简单的语言(而......
  • Ansible_处理失败的任务【转】
    一、Ansible处理任务失败1、管理play中任务错误1️⃣:Ansible评估任务的返回代码,从而确定任务是成功还是失败2️⃣:通常而言,当任务失败时,Ansible将立即在该主机上中止play的其......
  • Ansible when: result.stdout.find使用说明【原创】
    0代表成功,-1代表失败when:result.stdout.find('JAVA_HOME')==-1当文件中没有JAVA_HOME关键字时执行,等于失败才执行,结果没有JAVA_HOME关键字时执行when:result.stdout.......
  • redis的学习笔记
    Redis只会用缓存?16种妙用让同事直呼牛X  1、缓存String类型例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据。2、数据......
  • 使用ansible-playbook自动化安装MySQL主从
    【使用自动化安装MySQL主从架构】说明:使用ansible-playbook 自动化安装MySQL主从+ mysqld-exporter的采集数据+ xtrabackup备份【剧本说明】以下文件在roles目录......