用Keepalived搭建双Nginx server集群,防止单点故障
综述:
浏览器访问虚拟IP: 192.168.1.57, 该虚拟IP被Keepalived接管,两个Keepalived进程分别运行在物理IP为192.168.1.56和192.168.1.59服务器上,这两个服务器上都运行着Nginx server。Nginx server都监听虚拟IP 192.168.1.57. Nginx背后有一些web app集群,已经配置成upstream.
为了防止Nginx自己成为单点瓶颈,这里采用了双Nginx server的方式。每个Server都是Ubuntu 12.04.
假定我的第一台Ubuntu server物理IP地址是192.168.1.56,已经安装了Nginx server,现在安装Keepalived,后面称这台为master server.
- apt-get install keepalived
另外一台Ubuntu server物理IP是192.168.1.59, 也安装Nginx server和Keapalived. 后面称这台为backup server. Nginx的安装以及配置不是本文关注内容,请参考我的其他文章。
现在开始配置master server. 安装完成keepalived后,通过查看脚本/etc/init.d/keepalived里面发现,启动配置文件的路径是
- CONFIG=/etc/keepalived/keepalived.conf
但是该文件现在还不存在。所以我创建一个,内容如下:
- # Settings for notifications
- global_defs {
- notification_email {
- csfreebird@gmail.com # Email address for notifications
- }
- notification_email_from keepalived@your_company.com # The from address for the notifications
- smtp_server 127.0.0.1
- smtp_connect_timeout 15
- }
- # Define the script used to check if haproxy is still working
- vrrp_script chk_http_port {
- script "/etc/keepalived/check_nginx.sh" # check Nginx is alive or not
- interval 2 #
- weight 2
- }
- # Configuation for the virtual interface
- vrrp_instance VI_1 {
- interface eth0
- state MASTER # set this to BACKUP on the other machine
- priority 101 # set this to 100 on the other machine
- virtual_router_id 51
- smtp_alert # Activate email notifications
- authentication {
- auth_type PASS
- auth_pass 1111 # Set this to some secret phrase
- }
- # The virtual ip address shared between the two loadbalancers
- virtual_ipaddress {
- 192.168.1.57
- }
- # Use the script above to check if we should fail over
- track_script {
- chk_http_port
- }
- }
说明:
1. smtp_server必须要用127.0.0.1
2. 自己要创建一个检查nginx进程的脚本
- /etc/keepalived/check_nginx.sh
内容如下:
- !/bin/bash
- # try to start nginx if nginx process is dead
- # shutdonw keepalived process if start nginx failed
- pid=`ps -C nginx --no-header |wc -l`
- if [ $pid -eq 0 ];then
- service nginx start
- sleep 3
- if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
- service keepalived stop
- fi
- fi
3. 修改nginx的所有server配置,将server_name都改为虚拟IP
- server_name 192.168.1.57;
4. 注意,这里的虚拟IP不是用修改/etc/network/interfaces的方式,而是在keepalived配置文件中直接设置,要想判断是否成功,直接ping 就行了,ifconfig是看不到的。
- ping 192.168.1.57
- PING 192.168.1.57 (192.168.1.57) 56(84) bytes of data.
- 64 bytes from 192.168.1.57: icmp_req=1 ttl=64 time=0.024 ms
- 64 bytes from 192.168.1.57: icmp_req=2 ttl=64 time=0.020 ms
对192.168.1.59做相同的配置,略有变化的是:
- vrrp_instance VI_1 {
- interface eth0
- state BACKUP // changed
- priority 100 // changed
通过轮流关闭master和backup,证明keepalived已经有效工作了。
参考资料:Keepalived官方文档真是够差的。
http://blog.csdn.net/zmj_88888888/article/details/8825471
用Keepalived搭建双Nginx server集群,防止单点故障的更多相关文章
- 基于keepalived搭建MySQL高可用集群
MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...
- 003.Keepalived搭建LVS高可用集群
一 基础环境 1.1 IP规划 OS:CentOS 6.8 64位 节点类型 IP规划 主机名 类型 主 Director Server eth0:172.24.8.10 DR1 公共IP eth1: ...
- Window平台搭建Redis分布式缓存集群 (一)server搭建及性能測试
百度定义:Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对很多其它.包含string(字符串).list(链表).set(集合).zset(sort ...
- spring boot 2.0.3+spring cloud (Finchley)1、搭建服务注册和发现组件Eureka 以及构建高可用Eureka Server集群
一 .搭建Eureka 编写Eureka Server 由于有多个spring boot项目,采用maven多module的结构,项目结构如下: 新建一个maven主工程,在主maven的pom文件中 ...
- CanalAdmin搭建Canal Server集群
CanalAdmin搭建Canal Server集群 一.背景 二.机器情况 三.实现步骤 1.下载canal admin 2.配置canalAdmin 3.初始化canal admin数据库 4.启 ...
- centos7.4安装高可用(haproxy+keepalived实现)kubernetes1.6.0集群(开启TLS认证)
目录 目录 前言 集群详情 环境说明 安装前准备 提醒 一.创建TLS证书和秘钥 安装CFSSL 创建 CA (Certificate Authority) 创建 CA 配置文件 创建 CA 证书签名 ...
- 使用Kubeadm搭建高可用Kubernetes集群
1.概述 Kubenetes集群的控制平面节点(即Master节点)由数据库服务(Etcd)+其他组件服务(Apiserver.Controller-manager.Scheduler...)组成. ...
- mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离
数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...
- 亿级Web系统搭建——单机到分布式集群
当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...
随机推荐
- 免费手机号码归属地API查询接口
免费手机号码归属地API查询接口 一.淘宝网API API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=1585078144 ...
- C++中malloc / free 和 new / delete 的区别?
1.malloc/free 是C++/C语言的标准库函数,New/delete是C++运算符:都是用于申请动态内存和释放内存. 2.new做两件事:分配内存和调用类的构造函数,delete是:调用类的 ...
- Mybatis中关于OGNL表达式冲突
注意设计表字段不能用bor xor and band eq neq lt gt lte gte shl shr ushr
- Luogu P2073 送花
权值线段树的模板题 然而AC后才发现,可以用\(\tt{set}\)水过-- 权值线段树类似于用线段树来实现平衡树的一些操作,代码实现还是比较方便的 #include<iostream> ...
- Nginx超时配置
Nginx超时配置 1.client_header_timeout 语法client_header_timeout time 默认值60s 上下文http server 说明 指定等待client发送 ...
- 【转】Windows 邮件槽(MailSlot)
Windows 邮件槽(MailSlot) 来自<Windows网络编程第二版 中文版> 优点:通过网络,将一条消息广播给一台或多台计算机. 缺点:只允许从客户机到服务器,建立一种不可 ...
- 【SAM】bzoj5084: hashit
做得心 力 憔 悴 Description 你有一个字符串S,一开始为空串,要求支持两种操作 在S后面加入字母C 删除S最后一个字母 问每次操作后S有多少个两两不同的连续子串 Input 一行一个字符 ...
- 201621123080《Java程序设计》第1周学习总结
作业01-Java基本概念 1. 本周学习总结 关键词: JDK.JAVA.编程.基础语法 概念之间的关系: JDK是JAVA的开发工具,学习JAVA的主要方法是大量编程,语法是JAVA的基础 2. ...
- python爬虫用到的一些东西
原装requests >>> import requests >>> response = requests.get('http://www.baidu.com') ...
- ccf 201712-4 行车路线(Python实现)
一.原题 问题描述 试题编号: 201712-4 试题名称: 行车路线 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将 ...