脚本实现通过ansible-playbook自动化安装Keepalived和配置,主要解决问题如下:
- Keepalived自动化安装;
- keepalived_vrid配置,自动根据vip获取最后一段作为vrid,确保同一网段不会出现vrid冲突导致HA切换失败的问题;
- 自动配置Keepalived;
- HA检测脚本自定义,根据脚本内容,来做redis或nginx或其他软件的双机热备;
- 自动配置vip给Keepalived
- 设置Keepalived开机启动,加入系统服务;
Keepalived安装脚本如下:
1 - name: keepalived install and configuration 2 hosts: "{{ host }}" 3 user: root 4 5 tasks: 6 - name: Create the dir 7 file: path={{ item }} state=directory 8 with_items: 9 - /usr/local/keepalived 10 - /etc/keepalived 11 - /keepalived_install 12 13 - name: install rpm pkgs for Keepalived 14 yum: name={{ item }} state=present 15 with_items: 16 - make 17 - wget 18 - gcc 19 - gcc-c++ 20 - openssl 21 - openssl-devel 22 - popt-devel 23 - automake 24 - autoconf 25 - libtool 26 - ipvsadm 27 - popt-devel 28 - popt-static 29 - libnl-devel 30 - libnfnetlink-devel 31 - nmap 32 33 - name: download keepalived 34 get_url: url=https://www.keepalived.org/software/keepalived-1.2.19.tar.gz dest=/keepalived_install 35 36 - name: unarchive keepalived 37 unarchive: src=/keepalived_install/keepalived-1.2.19.tar.gz dest=/keepalived_install copy=no 38 39 - name: compile and install keepalived 40 shell: cd /keepalived_install/keepalived-1.2.19 && ./configure --prefix=/usr/local/keepalived && make && make install 41 42 - name: compile and install keepalived 43 command: "{{ item }}" 44 with_items: 45 - /bin/cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ 46 - /bin/cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 47 - /bin/cp /usr/local/keepalived/sbin/keepalived /bin/keepalived 48 - /bin/chmod +x /etc/init.d/keepalived 49 - /sbin/chkconfig --add keepalived 50 - /sbin/chkconfig --level 345 keepalived on 51 52 - name: configure keepalived 53 template: src=/ansible/roles/test/template/keepalived.conf.j2 dest=/etc/keepalived/keepalived.conf 54 notify: restart keepalived 55 56 - name: copy nginx service check scripts to remote host 57 template: src=/ansible/roles/test/template/check_nginx.sh.j2 dest=/usr/local/keepalived/check_nginx.sh mode=0755 58 59 - name: copy vrid config_scripts to remote host 60 template: src=/ansible/roles/test/template/replace_vrid.sh.j2 dest=/tmp/keepalived.sh mode=0755 61 62 - name: modify keepalived_vrid 63 shell: sh /tmp/keepalived.sh 64 65 - name: delete the tmp files. 66 file: path={{ item }} state=absent 67 with_items: 68 - /keepalived_install/keepalived-1.2.19.tar.gz 69 - /keepalived_install/keepalived-1.2.19 70 - /keepalived_install 71 - /tmp/keepalived.sh 72 73 handlers: 74 - name: config vrid 75 shell: bash /tmp/keepalived.sh 76 77 handlers: 78 - name: restart keepalived 79 service: name=keepalived enabled=yes state=restarted