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实现应用层的负载均衡.这里大家都可 ...
随机推荐
- POJ-2155 Matrix---二维树状数组+区域更新单点查询
题目链接: https://vjudge.net/problem/POJ-2155 题目大意: 给一个n*n的01矩阵,然后有两种操作(m次)C x1 y1 x2 y2是把这个小矩形内所有数字异或一遍 ...
- 【CCPC-Wannafly Winter Camp Day4 (Div1) F】小小马(分类讨论)
点此看题面 大致题意: 给你一张\(n*m\)的棋盘,问你一匹马在两个点中是否存在一条经过黑白格子数目相等的路径. 简化题目 首先,我们来简化一下题目. 考虑到马每次走的时候,所经过的格子的颜色必然发 ...
- memcache 基本操作
输入 telnet localhost 11211 步骤: 1.输入 set hans 0 0 3 回车 2. 输入 123 回车 3. get hans 回车 删除操作,输入 delete h ...
- Spring/Spring boot中静态变量赋值
情形1:静态变量为自动注入的对象 解决方案:设置两个变量,非静态变量使用@resource注入Bean,然后使用@PostConstruct在Spring初始化Bean成功后为静态变量赋值 @Comp ...
- typeid操作符
typeid() operator返回type_info,返回值不可拷贝.不可赋值 // Illustrates the typeid operator. #include <iostream& ...
- 打包时ElementUI使vendor.js文件体量过大优化方法
<h1> 1.在index.html中以CDN的方式引入 </h1> <p> 引入的时候注意:要先在引入之前引入VUE否则会报undedined prototype ...
- avalon.js的循环操作在表格中的应用
avalon.js的循环操作在表格中的应用 一个JAVA开发,因为做的门户系统中,数据的展示加载的速度很影响使用效果,想到的是尽量少的请求后台,然后接触到了avalon,看介绍这是一个很轻很轻的MVV ...
- 第34-1题:LeetCode112. Path Sum I
题目 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum ...
- 洛谷P4316 绿豆蛙的归宿(期望)
题意翻译 「Poetize3」 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出 ...
- 初探12C碰到的那些“坑”
一个昏天黑地的早上,刚搭建的系统忽然遭遇严重数据库问题.于是,主要人物闪亮登场了,他们分别是友商人员小灰和DBA小Y. 事情的开始,小Y接到小灰紧急救助电话... 小灰:小Y,我是友商的小灰,刚搭建的 ...