Ansible 安装 Redis 一主两从及哨兵

运维需求见表:

主机IP 部署服务 部署目录 说明
 192.168.21.67

Redis、Sentinel

 /opt/redis-1/{bin,log,data{27000,7000},config}

Redis 端口:7000

Redis Sentinel 端口:27000

运行用户:jiangwei

192.168.21.68

 Redis、Sentinel   /opt/redis-2/{bin,log,data{27000,7000},config}

 192.168.21.69

 Redis、Sentinel   /opt/redis-3/{bin,log,data{27000,7000},config}

1.关联文档:

  • 见我的Ansible学习笔记之Ansible 安装【Ubuntu16.04】
  • 见其他Ansible系列,关于inventory和roles的配置

2.已有用户jiangwei,已做过SSH免密登录

3./opt/ansible/redis目录结构如下:

redis
├── files
│ ├── makeredis2.sh
│ ├── makeredis3.sh
│ ├── makeredis.sh
│ ├── redis1.conf
│ ├── redis2.conf
│ ├── redis-3.0.6.tar.gz
│ ├── redis3.conf
│ ├── sentinel1.conf
│ ├── sentinel2.conf
│ └── sentinel3.conf
└── tasks
├── main.yml
├── redis1.yml
├── redis2.yml
└── redis3.yml

其中redis-3.0.6.tar.gz为安装包,可自行去Redis官网下载。

3.1)makeredis.sh的内容如下:

cd /usr/local/redis-3.0.6
make lua hiredis linenoise
cd /usr/local/redis-3.0.6/
make install PREFIX=/opt/redis-1 MALLOC=libc

备注:makeredis2.sh和makeredis3.sh的配置同上述,仅PREFIX中的路径不同,按照运维需求中的规划目录填写即可。

3.2)redis1.conf内容如下:

databases 16
save 900 1
save 300 10
save 60 10000
masterauth jiangwei
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /opt/redis-1/data/7000
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass jiangwei
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

3.3)redis2.conf内容如下:

daemonize yes
pidfile /opt/redis-2/redis.pid
port 7000
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile "/opt/redis-2/log/redis.7000.log"
masterauth jiangwei
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /opt/redis-2/data/7000
slaveof 172.16.211.67 7000
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass jiangwei
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

   备注:redis3.conf跟redis2.conf一样,除了目录不同,具体看运维需求中的redis3的目录规划

3.5)sentinel1.conf内容如下:

port 27000
dir "/opt/redis-1/data/27000"
sentinel monitor mymaster 172.16.211.67 7000 2
sentinel auth-pass mymaster jiangwei
sentinel config-epoch mymaster 2
sentinel leader-epoch mymaster 6580
daemonize yes
logfile "/opt/redis-1/log/sentinel_log.log"
sentinel current-epoch 2

备注:sentinel2.conf、sentinel3.conf和sentinel1.conf一样,除了目录不同,具体看运维需求中的目录规划

3.6)redis1.yml内容如下:        

- name: Unarchive Redis Software
unarchive: src=redis-3.0.6.tar.gz dest=/usr/local
when: ansible_default_ipv4.address == "172.16.211.67"
- name: copy make redis scrpit
copy: src=makeredis.sh dest=/tmp/ mode=755
when: ansible_default_ipv4.address == "172.16.211.67"
- name: sh makeredis.sh
shell: sh /tmp/makeredis.sh
when: ansible_default_ipv4.address == "172.16.211.67"
- name: chown /opt/redis-1
command: chown jiangwei:jiangwei /opt/redis-1 -R
when: ansible_default_ipv4.address == "172.16.211.67"
- name: mkdir /opt/redis-1/data/7000
file: path=/opt/redis-1/data/7000 state=directory owner=jiangwei group=jiangwei
when: ansible_default_ipv4.address == "172.16.211.67"
- name: mkdir /opt/redis-1/data/27000
file: path=/opt/redis-1/data/27000 state=directory owner=jiangwei group=jiangwei
when: ansible_default_ipv4.address == "172.16.211.67"
- name: mkdir /opt/redis-1/log
file: path=/opt/redis-1/log state=directory owner=jiangwei group=jiangwei
when: ansible_default_ipv4.address == "172.16.211.67"
- name: mkdir /opt/redis-1/config
file: path=/opt/redis-1/config state=directory owner=jiangwei group=jiangwei
when: ansible_default_ipv4.address == "172.16.211.67"
- name: copy redis.conf
copy: src=redis1.conf dest=/opt/redis-1/config owner=jiangwei group=jiangwei mode=644
when: ansible_default_ipv4.address == "172.16.211.67"
- name: copy sentinel1.conf
copy: src=sentinel1.conf dest=/opt/redis-1/config owner=jiangwei group=jiangwei mode=644
when: ansible_default_ipv4.address == "172.16.211.67"
- name: start redis
command: sudo su - jiangwei -c "/opt/redis-1/bin/redis-server /opt/redis-1/config/redis1.conf " /bin/bash
when: ansible_default_ipv4.address == "172.16.211.67"
- name: start redis sentinel
command: sudo su - jiangwei -c "/opt/redis-1/bin/redis-server /opt/redis-1/config/sentinel1.conf --sentinel & " /bin/bash
when: ansible_default_ipv4.address == "172.16.211.67"

备注:redis2.yml和redis3.yml同redis1.yml,除了目录和IP及对应的makeredis.sh、redis.conf、sentinel.conf需要对应好。

3.7) main.yml内容如下:

- include: redis1.yml
- include: redis2.yml
- include: redis3.yml

4.redisinstall.yml内容如下:

- hosts: redis
roles:
     - redis

5.编辑inventory,vi /etc/ansible/hosts,保存内容如下:

[redis]
192.168.21.67
192.168.21.68
192.168.21.69
[redis:vars]
ansible_python_interpreter=/usr/bin/python3
ansible_ssh_user=root

6.执行:ansible-playbook   /opt/ansible/redisinstall.yml

7.验证:

7.1) 看角色是否符合运维需求。

/opt/redis-1/bin/redis-cli -h 192.168.21.67 -p 7000

>auth jiangwei

>info Replication

/opt/redis-2/bin/redis-cli -h 192.168.21.68 -p 7000

>auth jiangwei

>info Replication

/opt/redis-3/bin/redis-cli -h 192.168.21.69 -p 7000

>auth jiangwei

>info Replication

备注:以上也可以直接用info直接查看

7.2)查看哨兵集群状态信息:

/opt/redis-3/bin/redis-cli -h 192.168.21.67 -p 27000

>info

猜你喜欢

转载自www.cnblogs.com/WSQL/p/9963572.html