Ansible-playbook 部署redis主从
Ansible-playbook 部署redis主從一鍵部署
ansible-playbook redis目錄樹結構
[root@192?roles]#?tree?redis/ redis/ ├──?defaults ├──?files │???└──?redis-3.2.5.tar.gz ├──?handlers │???└──?main.yaml ├──?meta ├──?tasks │???└──?main.yaml ├──?templates │???└──?redis.conf.j2 └──?vars└──?main.yaml#首先這個tasks任務寫的很亂,源碼編譯的這個啟動腳本只有start和stop 兩個參數,這個兩個參數不是func函數類的,這塊沒辦法做restart。當然也可以做,自己再重新搞個啟動腳本,這塊為了省事就用源碼的腳本了。handlers是文件發生改變時觸發重啟。task里面注釋的重啟task,直接開啟也可以的,兩種方法都試過,完全ok。使用handlers就不需要注釋那幾行了。不使用handlers,直接把notify注釋掉,start和stop開啟就行。
[root@192?tasks]#?cat?main.yaml? -?name:?Installredis?base?packagesyum:?name={{?item?}}?state=installedwith_items:-?gcc-?make -?name:?copy?redis.tar.gz?to?remote?servercopy:?src=redis-{{?redis_version?}}.tar.gz?dest=/usr/local/ -?name:?解壓redisshell:?chdir=/usr/local/?tar?zxf?redis-{{?redis_version?}}.tar.gz -?name:?make?install?redisshell:?cd?/usr/local/redis-{{?redis_version?}}?&&?make?PREFIX=/usr/local/redis?install -?name:?create?redis?init?scriptcopy:?src=/usr/local/redis-{{?redis_version?}}/utils/redis_init_script?dest=/etc/init.d/redis?mode=655 -?name:?修改redis-server啟動腳本參數路徑shell:?sed?-i?'s/^EXEC.*/EXEC=\/usr\/local\/redis\/bin\/redis-server/g'?/etc/init.d/redis -?name:?替換redis啟動腳本CLIEXEC參數shell:?sed?-i?'s/^CLIEXEC.*/CLIEXEC=\/usr\/local\/redis\/bin\/redis-cli/g'?/etc/init.d/redis -?name:?添加環境變量文件shell:?/bin/echo?{{?item?}}?>>?/etc/profile?&&?source?/etc/profilewith_items:-?export?PATH=\$PATH:/usr/local/redis/bin -?name:?創建redis配置文件路徑file:?path=/etc/redis?state=directory?mode=755?owner=root?group=root -?name:?copy?redis配置文件到遠程主機template:?src=redis.conf.j2?dest=/etc/redis/{{?port?}}.confnotify:-?stop?redis-?start?redis #-?name:?start?redis?service #??shell:?service?redis?start#when:?ansible_default_ipv4.address?==?"{{?slave_ip?}}" -?name:?替換master_ipshell:?sed?-i?'/^#?slaveof.*/a\slaveof?{{?master_ip?}}?{{?port?}}'?/etc/redis/{{?port?}}.confwhen:?ansible_default_ipv4.address?==?"{{?slave_ip?}}"notify:-?stop?redis-?start?redis #-?name:?stop?redis?service #??shell:?service?redis?stop #-?name:?reload?redis?service #??shell:?service?redis?start#handlers 文件內容:
[root@192?tasks]#?cat?../handlers/main.yaml? -?name:?stop?redisshell:?service?redis?stop -?name:?start?redisshell:?service?redis?start#vars目錄變量文件:
[root@192?vars]#?cat?main.yaml? port:?6379 redis_version:?3.2.5 slave_ip:?192.168.121.129 master_ip:?192.168.121.128#模板文件就是一個redis.conf文件,這塊只改了三個參數。
第一個:后臺啟動
[root@192?templates]#?grep?daemonize?redis.conf.j2? #?Note?that?Redis?will?write?a?pid?file?in?/var/run/redis.pid?when?daemonized. daemonize?yes #?When?the?server?runs?non?daemonized,?no?pid?file?is?created?if?none?is #?specified?in?the?configuration.?When?the?server?is?daemonized,?the?pid?file #?output?for?logging?but?daemonize,?logs?will?be?sent?to?/dev/null第二個:主從的ip
#這個ip必須要改,不然的話主從會異步的。master_link_status:down 會是這個狀態,下午我怕錯是發現主從一直異步,telnet發現端口問題。
[root@192?templates]#?grep?ansible?redis.conf.j2? bind?{{?ansible_default_ipv4.address?}}第三個參數:
#日志必須的,之前我沒打日志,主從異步也不知道怎么回事,開了日志才發現端口被拒。
[root@192?templates]#?grep?logfile?redis.conf.j2? logfile?"/usr/local/redis/redis.log"其他參數可以優化,根據自己的需要做一個模板,我這只是練習玩。
#運行ansible-playbook 建議加個-v參數,可以看到具體的運行操作,可以看看運行是否符合自己的期望。
ansible-playbook 運行過程:
[root@192?ansible]#?ansible-playbook?redis.yml? PLAY?[test]?******************************************************************** TASK?[setup]?******************************************************************* ok:?[192.168.121.129] ok:?[192.168.121.128] TASK?[redis?:?redis?base?packages]?********************************************* ok:?[192.168.121.129]?=>?(item=[u'gcc',?u'make']) ok:?[192.168.121.128]?=>?(item=[u'gcc',?u'make']) TASK?[redis?:?copy?redis.tar.gz?to?remote?pc]?********************************** changed:?[192.168.121.128] changed:?[192.168.121.129] TASK?[redis?:?解壓redis]?********************************************************* changed:?[192.168.121.129][WARNING]:?Consider?using?unarchive?module?rather?than?running?tar changed:?[192.168.121.128] TASK?[redis?:?make??install?redis]?********************************************* changed:?[192.168.121.129] changed:?[192.168.121.128] TASK?[redis?:?create?redis?init?script]?**************************************** changed:?[192.168.121.128] changed:?[192.168.121.129] TASK?[redis?:?redis?init?script?cover]?***************************************** changed:?[192.168.121.129][WARNING]:?Consider?using?template?or?lineinfile?module?rather?than?running?sed changed:?[192.168.121.128] TASK?[redis?:?替換redis啟動腳本CLIEXEC參數]?******************************************** changed:?[192.168.121.128] changed:?[192.168.121.129] TASK?[redis?:?/etc/profile]?**************************************************** changed:?[192.168.121.129]?=>?(item=export?PATH=\$PATH:/usr/local/redis/bin) changed:?[192.168.121.128]?=>?(item=export?PATH=\$PATH:/usr/local/redis/bin) TASK?[redis?:?create?redis?config?directory]?*********************************** changed:?[192.168.121.129] changed:?[192.168.121.128] TASK?[redis?:?redis?template]?************************************************** changed:?[192.168.121.129] changed:?[192.168.121.128] TASK?[redis?:?start?redis?service]?********************************************* skipping:?[192.168.121.128] changed:?[192.168.121.129][WARNING]:?Consider?using?service?module?rather?than?running?service TASK?[redis?:?替換master_ip]?***************************************************** changed:?[192.168.121.129] changed:?[192.168.121.128] TASK?[redis?:?stop?redis?service]?********************************************** changed:?[192.168.121.128] changed:?[192.168.121.129] TASK?[redis?:?reload?redis?service]?******************************************** changed:?[192.168.121.129] changed:?[192.168.121.128] PLAY?RECAP?********************************************************************* 192.168.121.128????????????:?ok=14???changed=12???unreachable=0????failed=0??? 192.168.121.129????????????:?ok=15???changed=13???unreachable=0????failed=0#192.168.121.129從庫的狀態,主庫set 一個值,從庫也是可以get到的。
127.0.0.1:6379>?info?Replication #?Replication role:slave master_host:192.168.121.128 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:323 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 127.0.0.1:6379>?GET?name "meng"總結
以上是生活随笔為你收集整理的Ansible-playbook 部署redis主从的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用css3制作旋转加载动画的几种方法
- 下一篇: 关于浮点数精度的问题