主备(keepalived+nginx)
实验环境
系统: centos 6.9 mini
机器名 ip 虚拟ip
kn1 192.168.126.10
kn2 192.168.126.20 192.168.126.100
web1 192.168.126.30
web2 192.168.126.40
1、在kn1和kn2上分别安装keepalived
[root@kn1 ~]# yum install -y keepalived
[root@kn2 ~]# yum install -y keepalived
2、在web1和web2上分别部署web服务,并且启动服务
[root@web1 yum.repos.d]# yum install -y httpd
[root@web1 yum.repos.d]# echo "web1" >/var/www/html/index.html
[root@web1 yum.repos.d]# service httpd restart
停止 httpd: [确定]
正在启动 httpd:
[root@web2 ~]# yum install -y httpd
[root@web2 ~]# echo "web2">/var/www/html/index.html
[root@web2 ~]# service httpd restart
停止 httpd: [确定]
正在启动 httpd: [确定]
3、配置keepalived,编写nginx进程检测脚本nginx.sh
(keepalived是通过检测keepalived进程是否存在判断服务器是否宕机,如果keepalived进程在但是nginx进程不在了那么keepalived是不会做主备切换,所以我们需要写个脚本来监控nginx进程是否存在,如果nginx不存在,则试着启动它,如果启动不成功,就将keepalived进程杀掉。)
3.1 在kn1上
[root@kn1 keepalived]# cat nginx.sh
#!/bin/bash
N=`ps -C nginx --no-header |wc -l`
if [ $N -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 10
if [ `ps -C nginx --no-header |wc -l` -eq 0 ]; then
killall keepalived
fi
fi
[root@kn1 keepalived]# chmod 755 /etc/keepalived/nginx.sh
[root@kn1 ~]# crontab -l
*/2 * * * * /etc/keepalived/nginx.sh
[root@kn1 ~]# vi /etc/keepalived/keepalived.conf
#全局配置
global_defs {
router_id kn1 #运行keepalived机器的一个标识,用hostname
}
vrrp_script nginx {
script "/etc/keepalived/nginx.sh" ##监控脚本
interval 10 ##时间间隔,10秒
weight 2 ##权重
}
vrrp_instance VI_1 {
state MASTER #标示状态为MASTER 备份机为BACKUP
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 100 #MASTER权重要高于BACKUP
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication {
auth_type PASS #设置认证
auth_pass 1111 #主从服务器验证方式
}
track_script {
nginx #监控脚本
}
virtual_ipaddress { #设置vip
192.168.126.100 #可以多个虚拟IP,换行即可
}
}
[root@kn1 ~]# /etc/init.d/keepalived restart
停止 keepalived: [失败]
正在启动 keepalived: [确定]
3.2 在kn2上
[root@kn1 keepalived]# cat nginx.sh
#!/bin/bash
N=`ps -C nginx --no-header |wc -l`
if [ $N -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 10
if [ `ps -C nginx --no-header |wc -l` -eq 0 ]; then
killall keepalived
fi
fi
[root@kn1 keepalived]# chmod 755 /etc/keepalived/nginx.sh
[root@kn1 ~]# crontab -l
*/2 * * * * /etc/keepalived/nginx.sh
[root@kn2 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id kn2
}
vrrp_script nginx {
script "/etc/keepalived/nginx.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
nginx
}
virtual_ipaddress {
192.168.126.100
}
}
[root@kn2 ~]# /etc/init.d/keepalived restart
停止 keepalived: [确定]
正在启动 keepalived: [确定]
4、安装并且配置nginx(kn1和kn2的操作是一样的)
4.1 安装依赖包
[root@kn1 ~]#yum -y install gcc pcre-devel zlib-devel openssl-devel wget
4.2 安装nginx
[root@kn1 ~]#cd /usr/local/src/
[root@kn1 src]#wget http://nginx.org/download/nginx-1.9.5.tar.gz
[root@kn1 src]#tar zxvf nginx-1.9.5.tar.gz
[root@kn1 src]#cd nginx-1.9.5
[root@kn1 src]#./configure --with-http_stub_status_module
[root@kn1 src]#make && make install
4.3 配置nginx(红色的部分就是添加的)
[root@kn1 ~]# cat /usr/local/nginx/conf/nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
upstream web_up {
server 192.168.126.30 max_fails=3 fail_timeout=60s weight=1;
server 192.168.126.40 max_fails=3 fail_timeout=60s weight=2;
}
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://web_up;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
}
4.4 启动服务
[root@kn1 ~]#/usr/local/nginx/sbin/nginx
[root@kn1 ~]#/usr/local/nginx/sbin/nginx -s reload
[root@kn1 ~]#/etc/init,d/keepalive restart
5、测试
5.1 在kn1上查看虚拟ip
[root@kn1 ~]# ip addr list
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:d1:9e:5c brd ff:ff:ff:ff:ff:ff
inet 192.168.126.20/24 brd 192.168.126.255 scope global eth0
inet 192.168.126.100/32 scope global eth0
inet6 fe80::20c:29ff:fed1:9e5c/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
5.2 通过虚拟ip(域名)访问nignx
[root@kn1 ~]# curl http://192.168.126.100
web2
[root@kn1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.126.100 test.ku.com
[root@kn19 ~]# curl http://test.ku.com
web2
5.3 当kn1 的nginx 服务不能启动了,检查脚本nginx.sh就会执行,stop掉keepalived,此时,vip切换到kn2上
在kn1上的操作
[root@kn1 ~]# /usr/local/nginx/sbin/nginx -s stop
[root@kn1 ~]# /etc/init.d/keepalived status
keepalived 已死,但是 subsys 被锁
You have new mail in /var/spool/mail/root
[root@kn1 ~]# tail -10 /var/log/messages
Feb 5 13:56:01 kn1 Keepalived_healthcheckers[2590]: Netlink reflector reports IP 192.168.126.100 removed
在kn2上的操作
[root@kn2 ~]# ip addr list
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:35:6d:f2 brd ff:ff:ff:ff:ff:ff
inet 192.168.126.20/24 brd 192.168.126.255 scope global eth0
inet 192.168.126.100/32 scope global eth0
inet6 fe80::20c:29ff:fe35:6df2/64 scope link
valid_lft forever preferred_lft forever
5.4 在kn1和kn2 的keepalived.cof 中 配置多个虚拟ip,并且访问
[root@kn1 ~]# vi /etc/keepalived/keepalived.conf
virtual_ipaddress {
192.168.126.100
192.168.126.150
}
}
[root@kn2 ~]# vi /etc/keepalived/keepalived.conf
virtual_ipaddress {
192.168.126.100
192.168.126.150
}
}
[root@kn1 ~]# /etc/init.d/keepalived restart
[root@kn2 ~]# /etc/init.d/keepalived restart
[root@kn2 ~]# ip addr list
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:35:6d:f2 brd ff:ff:ff:ff:ff:ff
inet 192.168.126.20/24 brd 192.168.126.255 scope global eth0
inet 192.168.126.100/32 scope global eth0
inet 192.168.126.150/32 scope global eth0
[root@kn2 ~]# curl http://192.168.126.100
web2
[root@kn2 ~]# curl http://192.168.126.150
web2
主备(keepalived+nginx)的更多相关文章
- keepalived+Nginx实现主备保障Nginx的高可用。
1.什么是keepalived? Keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障. Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工 ...
- Keepalived 主备配置
keepalived主备或多主多备,配置都是一样配置方法,只是搭建多少的问题. 1.keepalived安装 参考:https://www.cnblogs.com/zwcry/p/9542867.ht ...
- keepalived+nginx实现高可用+tomcat
1.keepalived的yum安装 安装依赖包[root@localhost ~]# yum install -y curl gcc openssl-devel libnl3-devel net-s ...
- keepalived+nginx安装配置
软件版本号: pcre8.36 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz keepalived1.2 ...
- keepalived + nginx 实现高可用
原理 nginx 可以实现负载均衡,但 nginx 自身存在单点故障的问题,这时候最先想到的就是 keepalived,可以解决单点故障的问题 由于没有使用 lvs,所以这里 nginx 之间不存在负 ...
- LVS+KeepAlived+Nginx高可用实现方案
文章目录概念LVSKeepAlived为什么要使用准备软件安装KeepAlived 安装源码安装yum安装服务启动.重启.关闭安装ipvsadmnginx安装防火墙(iptables)防火墙配置(方式 ...
- Centos7.6部署k8s v1.16.4高可用集群(主备模式)
一.部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6. ...
- docker 搭建keepalived+nginx高可用
前言 最近工作 中 有用到keepalived,就想着 在 本地 搭建一套环境验证一下相关的功能.因为创建虚拟机比较麻烦,就借助 docker来搭建这样 一套 环境 ,顺带学习 巩固下docker的 ...
- KeepAlived主备/主主模型高可用Nginx
部署准备: 两台CentOS 7主机HA1和HA2 CentOS 7 基于rpm包安装Nginx: 由于Base源中没有Nginx,所以要安装EPEL源,命令如下: wget http://dl.fe ...
- Nginx+Keepalived主备切换(包含nginx服务停止)
原文地址:http://blog.sina.com.cn/s/blog_79ac6aa80101bmed.html Nginx+Keepalived主备切换(包含nginx服务停止) 环境: VM中4 ...
随机推荐
- 合并 CentOS 6.8 的两个ISO镜像
合并 CentOS 6.8 的两个ISO镜像 1.创建相关目录: [root@local ~] mkdir -p /mnt/dvd1 /mnt/dvd2 /mnt/dvd3 /mnt/iso 说明: ...
- 高通msm8909耳机调试
http://blog.csdn.net/mike8825/article/details/69489865?locationnum=3&fps=1 1.DTS相应修改: DTS相关代码:ke ...
- TLD网络资源汇总--学习理解之(四)
原文:http://blog.csdn.net/mysniper11/article/details/8726649 引文地址:http://www.cnblogs.com/lxy2017/p/392 ...
- ubuntu16中遇到libgstreamer-0.10.so.0缺失解决方案
1. error while loading shared libraries: libgstreamer-0.10.so.0: cannot open shared object file: No ...
- python中List添加、删除元素的几种方法
一.python中List添加元素的几种方法 List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非你对它们进行排序或其他修改操作).在Pytho ...
- Hadoop(十)Hadoop IO之数据完整性
前言 上一篇我分享了Hadoop的压缩和编解码器,在我们开发的过程中其实是经常会用到的,所以一定要去掌握.这一篇给大家介绍的是Hadoop的数据完整性! Hadoop用户在使用HDFS储存和处理数据不 ...
- HDU 2147 kiki's game(规律,博弈)
kiki's game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 40000/10000 K (Java/Others)Total ...
- Linux6.X图形界面如何打开终端以及如何将终端加入右键
今天刚安装了一个centos 6.9图形界面的系统,安装完成后,鼠标右击没有打开终端的按钮,在网上查了一些资料,搞明白了,分享给大家. 在左上角菜单[Applications]--->[Syst ...
- centos7下安装mysql5.7.17
约定:本文基于Centos7,Mysql5.7.17,经过博主多次测试成功 1.下载mysql.tar.gz 官网下载MySQL安装包,Linux-Generic 64位(根据系统选择64or32) ...
- JavaScript八张思维导图—字符串用法
JS基本概念 JS操作符 JS基本语句 JS数组用法 Date用法 JS字符串用法 JS编程风格 JS编程实践 不知不觉做前端已经五年多了,无论是从最初的jQuery还是现在火热的Angular,Vu ...