運維自動化之ansible playbook一鍵化安裝redis主從

自動化是趨勢,隨着雲平臺的發展,也會逐漸的更火爆,之前手動安裝軟件、或者腳本安裝的話,會被一鍵式自動化給逐步代替,上次介紹了運維自動化之ansible playbook一鍵化安裝mysql主從(地址http://dl528888.blog.51cto.com/2382721/1617692),此次給你們介紹如何使用ansible來一鍵化安裝redis主從。 mysql

本次仍是使用docker虛擬2個測試環境,下面是環境介紹
linux

1、各軟件版本
git

一、docker軟件版本github

[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

二、docker存儲
redis

[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

三、ansible版本
sql

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

四、docker虛擬容器信息
docker

wKioL1UUtyKBBC2EAABTxQXC40M166.jpg

五、redis版本centos

2.6.17bash

六、docker容器狀況
app

[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

能夠看到容器啓動正常

2、ansible playbook部署

一、添加路由

在ansible裏添加一條到這個主機的路由,方便直接ansible對容器的ip進行部署mysql

[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裏

二、添加hosts

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

三、使用ansible部署redis

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

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

下面是開始部署

[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裏查看

[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節點部署,命令是

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的端口。

下面開始部署

[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

下面開始測試

[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也都能查看。

3、ansible模塊地址

地址是

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

有問題你們留言

相關文章
相關標籤/搜索