ansible自动部署Keepalived实现Nginx服务双机热备
脚本实现通过ansible-playbook自动化安装Keepalived和配置,主要解决问题如下:
- Keepalived自动化安装;
- keepalived_vrid配置,自动根据vip获取最后一段作为vrid,确保同一网段不会出现vrid冲突导致HA切换失败的问题;
- 自动配置Keepalived;
- HA检测脚本自定义,根据脚本内容,来做redis或nginx或其他软件的双机热备;
- 自动配置vip给Keepalived
- 设置Keepalived开机启动,加入系统服务;
Keepalived安装脚本如下:
- name: keepalived install and configuration
hosts: "{{ host }}"
user: root tasks:
- name: Create the dir
file: path={{ item }} state=directory
with_items:
- /usr/local/keepalived
- /etc/keepalived
- /keepalived_install - name: install rpm pkgs for Keepalived
yum: name={{ item }} state=present
with_items:
- make
- wget
- gcc
- gcc-c++
- openssl
- openssl-devel
- popt-devel
- automake
- autoconf
- libtool
- ipvsadm
- popt-devel
- popt-static
- libnl-devel
- libnfnetlink-devel
- nmap - name: download keepalived
get_url: url=https://www.keepalived.org/software/keepalived-1.2.19.tar.gz dest=/keepalived_install - name: unarchive keepalived
unarchive: src=/keepalived_install/keepalived-1.2.19.tar.gz dest=/keepalived_install copy=no - name: compile and install keepalived
shell: cd /keepalived_install/keepalived-1.2.19 && ./configure --prefix=/usr/local/keepalived && make && make install - name: compile and install keepalived
command: "{{ item }}"
with_items:
- /bin/cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
- /bin/cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
- /bin/cp /usr/local/keepalived/sbin/keepalived /bin/keepalived
- /bin/chmod +x /etc/init.d/keepalived
- /sbin/chkconfig --add keepalived
- /sbin/chkconfig --level 345 keepalived on - name: configure keepalived
template: src=/ansible/roles/test/template/keepalived.conf.j2 dest=/etc/keepalived/keepalived.conf
notify: restart keepalived - name: copy nginx service check scripts to remote host
template: src=/ansible/roles/test/template/check_nginx.sh.j2 dest=/usr/local/keepalived/check_nginx.sh mode=0755 - name: copy vrid config_scripts to remote host
template: src=/ansible/roles/test/template/replace_vrid.sh.j2 dest=/tmp/keepalived.sh mode=0755 - name: modify keepalived_vrid
shell: sh /tmp/keepalived.sh - name: delete the tmp files.
file: path={{ item }} state=absent
with_items:
- /keepalived_install/keepalived-1.2.19.tar.gz
- /keepalived_install/keepalived-1.2.19
- /keepalived_install
- /tmp/keepalived.sh handlers:
- name: config vrid
shell: bash /tmp/keepalived.sh handlers:
- name: restart keepalived
service: name=keepalived enabled=yes state=restarted
keepalived_install.yml
使用方法:
Usage: ansible-playbook -i /tmp/testhost /ansible/roles/keepalived/tasks/keepalived_install.yml -e "{'host':'10.99.99.99','nginx_havip':'10.99.99.100'}"
Keepalived配置模板
! Configuration File for keepalived
global_defs {
router_id Nginx
}
vrrp_script chk_nginx {
script "/usr/local/keepalived/check_nginx.sh"
interval 2
fall 3
weight -5
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface {{ ansible_default_ipv4['alias'] }}
virtual_router_id keepalived_vrid
priority 90
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
{{ nginx_havip }}
}
track_script {
chk_nginx
}
}
keepalived.conf.j2
NGINX服务检测脚本模板
#!/bin/sh
# check nginx server status # Source Function Library
. /etc/init.d/functions NGINX="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usr/local/nginx/logs/nginx.pid"
PORT= start_nginx() {
daemon $NGINX -c $NGINX_CONF
} stop_nginx() {
killproc -p $NGINX_PID $NGINX -TERM
} nmap localhost -p $PORT | grep "$PORT/tcp open" if [ $? -ne ];then
stop_nginx
start_nginx
sleep
nmap localhost -p $PORT | grep "$PORT/tcp open"
[ $? -ne ] && /etc/init.d/keepalived stop
fi
check_nginx.sh.j2
keepalived配置中虚拟路由id替换脚本
#!/bin/sh
havip={{ nginx_havip }}
vrid=`echo ${havip##*.}`
sed -i "s/keepalived_vrid/$vrid/" /etc/keepalived/keepalived.conf
replace_vrid.sh.j2
说明:
执行此脚本之前,需要安装nginx。
ansible自动部署Keepalived实现Nginx服务双机热备的更多相关文章
- Nginx+keepalived 脚本安装主从双机热备自动切换解决方案
Nginx+keepalived 脚本安装主从双机热备自动切换解决方案 2013-07-02 19:24:13 标签:filesnginx keepalived 原创作品,允许转载,转载时请务必以超链 ...
- Nginx+Keeplived双机热备(主从模式)
Nginx+Keeplived双机热备(主从模式) 参考资料: http://www.cnblogs.com/kevingrace/p/6138185.html 双机高可用一般是通过虚拟IP(漂移IP ...
- nginx简单双机热备:backup参数的使用
nginx简单双机热备:backup参数的使用 nginx简单双机热备:backup参数的使用
- keepalived+nginx实现双机热备
keepalived是一个类似于layer3, 4, 5 交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机, ...
- 使用keepalived监控tomcat 达到双机热备
通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务. 当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短.下面来以keepalived结合to ...
- HA(High available)-Keepalived高可用性集群(双机热备)单点实验-菜鸟入门级
HA(High available)-Keepalived高可用性集群 Keepalived 是一个基于VRRP虚拟路由冗余协议来实现的WEB 服务高可用方案,虚拟路由冗余协议 (Virtual ...
- keepalived + nginx 实现双机热备
# docker run -itd --name centos_m1 centos # 进入容器 # docker exec -it centos_m1 /bin/bash # 安装nginx # r ...
- KeepAlived+HaProxy+MyCat+Percona双机热备PXC集群
一.搭建PXC集群 1.环境:centos7+PXC5.7.21+mycat1.6.5 2.卸载mariadb rpm -qa | grep mariadb* yum -y remove mariad ...
- keepalived+LVS 实现双机热备、负载均衡、失效转移 高性能 高可用 高伸缩性 服务器集群
本章笔者亲自动手,使用LVS技术实现实现一个可以支持庞大访问量.高可用性.高伸缩性的服务器集群 在读本章之前,可能有不少读者尚未使用该技术,或者部分读者使用Nginx实现应用层的负载均衡.这里大家都可 ...
随机推荐
- java的sleep方法详解
java的sleep方法详解: sleep并不是永久占有CPU,没有那个线程能永久占用CPU.它是指在自己时间片内睡眠,而不是急着交出CPU.yield()就是自己愿意立即交出时间片.因此一个线程sl ...
- framework7 1.3.5 路由跳转后DOM失效问题
再这个版本的7会存在一个问题,那就是loadpage到指定页面后才做其中的DOM比如DIV里面的text或者HTML,虽然控制台会显示改变后的值但是页面上却还是原值,这时候需要改变方法使用reload ...
- bzoj3882 [Wc2015]K小割
Description Input Output Sample Input 3 3 1 3 100 1 2 3 2 3 4 1 3 5 Sample Output 8 9 12 -1 正解:暴搜+ ...
- 字符串处理(POJ1782)
题目链接:http://poj.org/problem?id=1782 解题报告: #include <iostream> #include <cstdio> #include ...
- POJ1286 Necklace of Beads(Polya定理)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9359 Accepted: 3862 Description Beads ...
- datatable中reload和load的区别
ajax.reload()用于datatable表某个数据的变化而重新加载 ajax.url(url).load() 用于切换url时,datatable重新获取数据,加载.
- JS获取元素属性和自定义属性
获取元素的属性分为两种类型: 1-获取元素常见的属性(class,id,type,value……) 2-获取自定义的元素的属性(data-value,data-mess…….) 获取元素的属性,设置元 ...
- go get超时解决办法
go get gopkg.in/yaml.v2超时,发现被墙了,解决办法如下: 1.安装golang.org/x/net $ mkdir -p $GOPATH/src/golang.org/x/ $ ...
- dts--tests(二)
rxtx_callbacks.py """ DPDK Test suite. Test Rxtx_Callbacks. """ import ...
- python__高级 : GC垃圾回收相关
python的垃圾回收机制是以引用计数为主,加上标记-清除,分代收集等辅助方式组成的,如果想打开gc功能,需要 import gc 模块 ,然后 gc.enable() 就打开了这个功能,关闭是 gc ...