运维自动化之ansible playbook一键化安装redis主从

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

自动化是趋势,随着云平台的发展,也会逐渐的更火爆,以前手动安装软件、或者脚本安装的话,会被一键式自动化给逐步代替,上次介绍了运维自动化之ansible playbook一键化安装mysql主从(地址http://dl528888.blog.51cto.com/2382721/1617692),这次给大家介绍如何使用ansible来一键化安装redis主从。

本次还是使用docker虚拟2个测试环境,下面是环境介绍

一、各软件版本

1、docker软件版本

1
2
3
4
5
6
7
8
9
10
[root@docker-test3 ~] # docker version
Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.4.1
Git commit (client): a8a31ef
OS /Arch  (client): linux /amd64
Server version: 1.5.0
Server API version: 1.17
Go version (server): go1.4.1
Git commit (server): a8a31ef

2、docker存储

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@docker-test3 ~] # docker info
Containers: 2
Images: 20
Storage Driver: devicemapper
  Pool Name: docker-253:1-1430610-pool
  Pool Blocksize: 65.54 kB
  Backing Filesystem: <unknown>
  Data  file /dev/loop0
  Metadata  file /dev/loop1
  Data Space Used: 2.614 GB
  Data Space Total: 107.4 GB
  Metadata Space Used: 3.105 MB
  Metadata Space Total: 2.147 GB
  Udev Sync Supported:  false
  Data loop  file /var/lib/docker/devicemapper/devicemapper/data
  Metadata loop  file /var/lib/docker/devicemapper/devicemapper/metadata
  Library Version: 1.02.82-git (2013-10-04)
Execution Driver: native-0.2
Kernel Version: 3.18.3-1.el7.elrepo.x86_64
Operating System: CentOS Linux 7 (Core)
CPUs: 16
Total Memory: 31.41 GiB
Name: docker-test3
ID: 52R3:7K2Q:EADX:MXSC:BZ4I:NMC2:WUBX:4IV7:GUBQ:NIHH:TGDL:LLRW

3、ansible版本

1
2
[root@puppet ansible-examples] # ansible --version
ansible 1.7

4、docker虚拟容器信息

wKioL1UUtyKBBC2EAABTxQXC40M166.jpg

5、redis版本

2.6.17

6、docker容器情况

1
2
3
4
[root@docker-test3 ~] # docker ps -a
CONTAINER ID        IMAGE                                          COMMAND                CREATED             STATUS              PORTS               NAMES
18a34f7944c7        docker.ops-chukong.com:5000 /centos6-http :new   " /usr/bin/supervisor    25 minutes ago      Up 25 minutes                           redis-slave
6388c15147d9        docker.ops-chukong.com:5000 /centos6-http :new   " /usr/bin/supervisor    26 minutes ago      Up 26 minutes                           redis-master

可以看到容器启动正常

二、ansible playbook部署

1、添加路由

在ansible里添加一条到这个主机的路由,方便直接ansible对容器的ip进行部署mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@puppet ansible] # route add -net 172.16.0.0 netmask 255.255.0.0 gw 10.10.17.3
ping 那2个容器ip
[root@puppet ansible] # ping -c 2 172.16.1.57
PING 172.16.1.57 (172.16.1.57) 56(84) bytes of data.
64 bytes from 172.16.1.57: icmp_seq=1 ttl=63  time =0.846 ms
64 bytes from 172.16.1.57: icmp_seq=2 ttl=63  time =0.121 ms
  
--- 172.16.1.57  ping  statistics ---
2 packets transmitted, 2 received, 0% packet loss,  time  1001ms
rtt min /avg/max/mdev  = 0.121 /0 .483 /0 .846 /0 .363 ms
You have mail  in  /var/spool/mail/root
[root@puppet ansible] # ping -c 2 172.16.1.58
PING 172.16.1.58 (172.16.1.58) 56(84) bytes of data.
64 bytes from 172.16.1.58: icmp_seq=1 ttl=63  time =0.672 ms
64 bytes from 172.16.1.58: icmp_seq=2 ttl=63  time =0.111 ms
  
--- 172.16.1.58  ping  statistics ---
2 packets transmitted, 2 received, 0% packet loss,  time  999ms
rtt min /avg/max/mdev  = 0.111 /0 .391 /0 .672 /0 .281 ms

可以看到通了,把这2个ip放到ansible的hosts里

2、添加hosts

1
2
3
4
[root@puppet ansible] # tail -n3 /etc/ansible/hosts
[container_redis]
172.16.1.57:22
172.16.1.58:22

3、使用ansible部署redis

A、部署redis master,在redis-master里部署,下面是命令

1
time  ansible-playbook redis_install.yml --extra-vars  "host=172.16.1.57 user=root"  -k

下面是开始部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[root@puppet ansible] # time ansible-playbook redis_install.yml --extra-vars "host=172.16.1.57 user=root" -k
SSH password:
 
PLAY [172.16.1.57] ************************************************************
 
GATHERING FACTS ***************************************************************
ok: [172.16.1.57]
 
TASK: [common | Install initializtion require software] ***********************
changed: [172.16.1.57]
 
TASK: [redis_install | Copy Redis Software To Redhat Client] ******************
changed: [172.16.1.57]
 
TASK: [redis_install | Create Redis Install Dir] ******************************
ok: [172.16.1.57]
 
TASK: [redis_install | Uncompression Redis Software To Redhat Client] *********
changed: [172.16.1.57]
 
TASK: [redis_install | Copy Redis Config To Redhat Client] ********************
changed: [172.16.1.57]
 
TASK: [redis_install | Create Soft Link In Redhat Client] *********************
changed: [172.16.1.57] => (item=redis-cli)
changed: [172.16.1.57] => (item=redis-server)
 
TASK: [redis_install | Check Boot Start In Redhat Client] *********************
failed: [172.16.1.57] => { "changed" true "cmd" "grep -c '/usr/bin/redis-server /data/redis-2.6.17/conf/redis_6379.conf' /etc/rc.local" "delta" "0:00:00.240436" "end" "2015-03-27 09:25:42.110919" "rc" : 1,  "start" "2015-03-27 09:25:41.870483" }
stdout: 0
...ignoring
 
TASK: [redis_install | Add Boot Start In Redhat Client] ***********************
changed: [172.16.1.57]
 
TASK: [redis_install | Start Redis Service In Redhat Client] ******************
changed: [172.16.1.57]
 
TASK: [redis_install | Delete Redis compression Software In Redhat Client] ****
changed: [172.16.1.57]
 
PLAY RECAP ********************************************************************
172.16.1.57                : ok=11   changed=9    unreachable=0    failed=0
 
 
real    1m51.933s
user    0m7.517s
sys     0m0.505s

可以看到2分钟之内部署完成,最浪费时间的是yum安装基础库,想提速可以预先安装基础yum库

现在去redis-master里查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[root@puppet ansible] # ssh 172.16.1.57
root@172.16.1.57's password:
Last login: Mon Nov 17 14:10:39 2014 from 172.17.42.1
root@6388c15147d9:~
09:28:39  # netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID /Program  name
tcp        0      0 172.16.1.57:6379            0.0.0.0:*                   LISTEN      412 /redis-server
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      266 /sshd
tcp        0      0 :::80                       :::*                        LISTEN      13 /httpd
tcp        0      0 :::22                       :::*                        LISTEN      266 /sshd
root@6388c15147d9:~
09:28:41  # ps -ef|grep redis
root       412     1  0 09:25 ?        00:00:00  /usr/bin/redis-server  /data/redis-2 .6.17 /conf/redis_6379 .conf
root       443   428  0 09:28 pts /0     00:00:00  grep  redis
root@6388c15147d9:~
09:28:43  # redis-cli -h 172.16.1.57 -p 6379
redis 172.16.1.57:6379> keys *
(empty list or  set )
redis 172.16.1.57:6379>  set  abc 1
OK
redis 172.16.1.57:6379>  set  test  a
OK
redis 172.16.1.57:6379> get abc
"1"
redis 172.16.1.57:6379> get  test
"a"
redis 172.16.1.57:6379>

可以看到redis安装正常,并且我添加了2个key,等部署slave后再查看是否同步这2个key。

B、部署从库

在redis-slave节点部署,命令是

1
time  ansible-playbook redis_slave_install.yml --extra-vars  "host=172.16.1.58 user=root redis_master_ip=172.16.1.57 redis_master_port=6379"  -k

其中redis_master_ip是redis主的ip,redis_master_port是redis主中redis的端口。

下面开始部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
[root@puppet ansible] # time ansible-playbook redis_slave_install.yml --extra-vars "host=172.16.1.58 user=root redis_master_ip=172.16.1.57 redis_master_port=6379" -k
SSH password:
 
PLAY [172.16.1.58] ************************************************************
 
GATHERING FACTS ***************************************************************
ok: [172.16.1.58]
 
TASK: [common | Install initializtion require software] ***********************
changed: [172.16.1.58]
 
TASK: [redis_slave_install | Copy Redis Software To Redhat Client] ************
changed: [172.16.1.58]
 
TASK: [redis_slave_install | Create Redis Install Dir] ************************
ok: [172.16.1.58]
 
TASK: [redis_slave_install | Uncompression Redis Software To Redhat Client] ***
changed: [172.16.1.58]
 
TASK: [redis_slave_install | Copy Redis Config To Redhat Client] **************
changed: [172.16.1.58]
 
TASK: [redis_slave_install | Create Soft Link In Redhat Client] ***************
changed: [172.16.1.58] => (item=redis-cli)
changed: [172.16.1.58] => (item=redis-server)
 
TASK: [redis_slave_install | Check Boot Start In Redhat Client] ***************
failed: [172.16.1.58] => { "changed" true "cmd" "grep -c '/usr/bin/redis-server /data/redis-2.6.17/conf/redis_6379.conf' /etc/rc.local" "delta" "0:00:00.238492" "end" "2015-03-27 09:28:16.316417" "rc" : 1,  "start" "2015-03-27 09:28:16.077925" }
stdout: 0
...ignoring
 
TASK: [redis_slave_install | Add Boot Start In Redhat Client] *****************
changed: [172.16.1.58]
 
TASK: [redis_slave_install | Start Redis Service In Redhat Client] ************
changed: [172.16.1.58]
 
TASK: [redis_slave_install | Delete Redis compression Software In Redhat Client] ***
changed: [172.16.1.58]
 
PLAY RECAP ********************************************************************
172.16.1.58                : ok=11   changed=9    unreachable=0    failed=0
 
 
real    1m52.635s
user    0m7.409s
sys     0m0.495s

下面开始测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@puppet ansible] # ssh 172.16.1.58
root@172.16.1.58's password:
Last login: Mon Nov 17 14:10:39 2014 from 172.17.42.1
root@18a34f7944c7:~
09:29:46  # netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID /Program  name
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      266 /sshd
tcp        0      0 172.16.1.58:6379            0.0.0.0:*                   LISTEN      412 /redis-server
tcp        0      0 :::22                       :::*                        LISTEN      266 /sshd
tcp        0      0 :::80                       :::*                        LISTEN      13 /httpd
root@18a34f7944c7:~
09:29:48  # redis-cli -h 172.16.1.58 -p 6379
redis 172.16.1.58:6379>  exit
root@18a34f7944c7:~
09:30:01  # redis-cli -h 172.16.1.58 -p 6379
redis 172.16.1.58:6379> keys *
1)  "test"
2)  "abc"
redis 172.16.1.58:6379> get  test
"a"
redis 172.16.1.58:6379> get abc
"1"
redis 172.16.1.58:6379>

可以看到redis slave里redis安装完成,并且跟redis master里的redis做了主从,之前的2个key也都能查看。

三、ansible模块地址

地址是

1
https: //github .com /dl528888/ansible-examples/tree/master/redis_master_slave_install_2 .6.17

有问题大家留言






 本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/1625280,如需转载请自行联系原作者

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
运维 Ubuntu 应用服务中间件
自动化运维之路:使用Ansible进行服务器管理
在现代IT基础设施中,自动化运维已成为提高效率和可靠性的关键。本文将引导您通过使用Ansible这一强大的自动化工具来简化日常的服务器管理任务。我们将一起探索如何配置Ansible、编写Playbook以及执行自动化任务,旨在为读者提供一条清晰的路径,从而步入自动化运维的世界。
|
1月前
|
运维 网络安全 Python
自动化运维:使用Ansible实现批量服务器配置
在快速迭代的IT环境中,高效、可靠的服务器管理变得至关重要。本文将介绍如何使用Ansible这一强大的自动化工具,来简化和加速批量服务器配置过程。我们将从基础开始,逐步深入到更复杂的应用场景,确保即使是新手也能跟上节奏。文章将不包含代码示例,而是通过清晰的步骤和逻辑结构,引导读者理解自动化运维的核心概念及其在实际操作中的应用。
|
1月前
|
运维 Ubuntu 网络协议
自动化运维:使用Ansible进行服务器配置管理
在现代IT架构中,自动化运维已成为提升效率、减少人为错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化和标准化服务器的配置管理过程。通过具体的代码示例和操作步骤,我们将展示如何快速部署应用、管理配置以及自动化日常任务,从而确保环境的一致性和可靠性。
|
2月前
|
运维 安全 Ubuntu
自动化运维:使用Ansible进行服务器配置管理
在现代IT基础设施中,自动化运维是确保高效、稳定和安全服务的关键。本文将深入介绍如何使用Ansible这一开源工具来简化服务器配置管理工作,从基础安装到高级应用,我们将一步步展示如何通过Ansible Playbooks实现自动化部署和维护,旨在帮助读者构建更加灵活和可扩展的运维体系。
51 7
|
2月前
|
运维 Ubuntu Linux
自动化运维:使用Ansible简化日常任务
在快节奏的IT世界中,时间就是一切。本文将揭示如何通过Ansible这一强大的自动化工具来节省宝贵的时间,从而提高效率和减少人为错误。我们将深入探讨Ansible的核心概念、安装过程以及如何编写简单的playbook来自动执行常见运维任务。无论你是新手还是有经验的系统管理员,这篇文章都将为你提供实用的知识和技能,让你能够更好地控制你的服务器环境。
|
30天前
|
存储 缓存 NoSQL
解决Redis缓存数据类型丢失问题
解决Redis缓存数据类型丢失问题
172 85
|
3月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
92 6
|
5天前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
|
5天前
|
缓存 NoSQL 关系型数据库
云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应
本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。
|
27天前
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文详细探讨了分布式系统和缓存应用中的经典问题——缓存穿透。缓存穿透是指用户请求的数据在缓存和数据库中都不存在,导致大量请求直接落到数据库上,可能引发数据库崩溃或性能下降。文章介绍了几种有效的解决方案,包括接口层增加校验、缓存空值、使用布隆过滤器、优化数据库查询以及加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统的影响,提升系统的稳定性和性能。