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实现应用层的负载均衡.这里大家都可 ...
随机推荐
- 在Nutz中如何配置多个数据库源,并且带事务控制
在Nutz中如何配置多个数据库源,并且带事务控制 发布于 560天前 作者 Longitude 995 次浏览 复制 上一个帖子 下一个帖子 标签: 无 在Nutz中如何配置多个数据库源, ...
- ELF文件中section与segment的区别
http://blog.csdn.net/joker0910/article/details/7655606 1. ELF中的section主要提供给Linker使用, 而segment提供给Load ...
- 【[TJOI2018]碱基序列】
题目 为什么没人用\(SAM\)啊 我们先把原来的模式串建一遍\(SAM\),之后我们就可以求出\(SAM\)上每一个节点的\(|endpos|\)就可以知道每一个子串出现的次数了,也就是在模式串上的 ...
- dotNetFx40_Client_x86_x64和dotNetFx40_Full_x86_x64这两个有什么区别?两个都要安装还是安装其中一个?
这个是NET Framework 4.0的安装文件它是支持生成和运行下一代应用程序和 XML Web Services 的内部 Windows 组件,很多基于此架构的程序需要它的支持才能够运行.简单的 ...
- UIView的层次调整,及子view布局模式自动布局模式(停靠模式)
UIView*view1=[[UIView alloc]initWithFrame:CGRectMake(10,30,300,30)]; view1.backgroundColor=[UIColor ...
- BCB:如何在BCB中使用CodeGuard
www.educity.cn 发布者:xjxyj2006 来源:网络转载 发布日期:2013年12月13日 文章评论 发表文章 一. 为什么写这篇东西 自己在使用 BCB5 写一些程序时需要检查很多东 ...
- JSON 与 XML 的比较 - iOS
在与 web 服务进行数据交换的时候,通常支持两种主要的数据格式(即:JavaScript 对象表示法 JSON 与可扩展标记语言 XML),两者在可读性上都不分高下,接下来对此进行简单的总结和分析, ...
- JavaScript的变量命名规则和关键字的介绍
变量的名字 就像 人的名字一样,不能乱起. 你的代码不是只有你一个人看,变量既然是名字,那就这个名字就要有特殊的意义: 举个栗子:翠花,我们能从这个名字中得到什么信息?(这个 ...
- 牛客小白月赛2 H 武 【Dijkstra】
链接:https://www.nowcoder.com/acm/contest/86/H来源:牛客网 题目描述 其次,Sεlιнα(Selina) 要进行体力比武竞赛. 在 Sεlιнα 所在的城市, ...
- 灵光一现的trick
感觉平时会丢掉好多挺好的trick…… 图论 1.图G,固定S,T.可以将任意一条边加上权值$k(k>0)$,求最大化加权后最短路. 2.图G,固定S,T.可以将任意一条边乘以权值$k(k> ...