keepalive+nginx集群架构文档

1.准备两台机器

A机器:192.168.232.132

B机器:192.168.232.131

A级器作为master,B机器作为backup

2.两台机器都安装:keepalived

A机器
[[email protected] ~]# yum install -y keepalived
B机器
[[email protected] ~]# yum install -y keepalived

3.两台机器上都安装nginx

若是A、B机器没有装nginx服务,可以直接 yum安装

因为我A机器上已经源码包安装编译过nginx了所以就不用再安装了

B机器安装完之后启动nginx

[[email protected] ~]# yum install -y nginx
[[email protected] ~]# service nginx start
Redirecting to /bin/systemctl start nginx.service
[[email protected] ~]# ps aux|grep nginx
root     16687  0.0  0.0  46364   964 ?        Ss   11:51   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx    16688  0.0  0.1  46764  1924 ?        S    11:51   0:00 nginx: worker process
root     16690  0.0  0.0 112676   980 pts/0    R+   11:51   0:00 grep --color=auto nginx

注意:有时直接yum安装不了,需要安装yum扩展源:yum install -y epel-release

下面是在A机器上操作的

1.更改A机器上的更改keepalived配置文件

默认的配置文件路径在/etc/keepalived/keepalived.conf

清空文件内容

> /etc/keepalived/keepalived.conf

编辑配置文件

vim /etc/keepalived/keepalived.conf

添加加以下内容:

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"
    interval 3
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {
        192.168.232.100
    }
    track_script {
        chk_nginx
    }
}

这里需要注意的是:"virtual_ipaddress"也就是所谓的vip我们设置为192.168.232.100

2.定义监控脚本

脚本路径在keepalived配置文件中有定义,路径为/usr/local/sbin/check_ng.sh

编辑配置文件:

vim /usr/local/sbin/check_ng.sh

增加以下内容:

#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        /etc/init.d/nginx start
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi

3.脚本创建完之后,还需要改变脚本的权限(不更改权限,就无法自动加载脚本,那就无法启动keepalived服务)

[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh

4.启动keepalived服务,并查看是否启动成功

[[email protected] ~]# systemctl start keepalived
[[email protected] ~]# ps aux |grep keepalived
root     34653  0.0  0.1 118652  1400 ?        Ss   12:16   0:00 /usr/sbin/keepalived -D
root     34654  0.0  0.2 122852  2392 ?        S    12:16   0:00 /usr/sbin/keepalived -D
root     34655  0.0  0.2 122852  2448 ?        S    12:16   0:00 /usr/sbin/keepalived -D
root     34661  0.0  0.0 112720   988 pts/1    S+   12:16   0:00 grep --color=auto keepalived

启动不成功,有可能是防火墙未关闭或者规则限制导致的

systemctl stop firewalld 关闭firewalld
iptables -nvL查看防火墙
setenforce 0 临时关闭selinux
getenforce命令查看是否为Permissive

这时再来启动keepalived,就会看到keepalived进程服务了

5.这时停止nginx服务

/etc/init.d/nginx stop

再来查看nginx服务进程,会看到自动加载了

[[email protected] ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  确定  ]
[[email protected] ~]# ps aux |grep nginx
root     34813  0.0  0.0  20548   628 ?        Ss   12:17   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody   34817  0.0  0.3  22992  3216 ?        S    12:17   0:00 nginx: worker process
nobody   34818  0.0  0.3  22992  3216 ?        S    12:17   0:00 nginx: worker process
root     34832  0.0  0.0 112720   984 pts/1    R+   12:17   0:00 grep --color=auto nginx

6.查看ip地址,使用 ip add 命令,可以查看到vip192.168.232.100

[[email protected] ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:c2:05:5a brd ff:ff:ff:ff:ff:ff
    inet 192.168.232.132/24 brd 192.168.232.255 scope global dynamic ens33
       valid_lft 1559sec preferred_lft 1559sec
    inet 192.168.232.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fec2:55a/64 scope link 
       valid_lft forever preferred_lft forever

以下是B机器上的配置

1.自定义B机器keepalived配置文件,更改虚拟IP和主一样的,首先清空B机器keepalived里面自带的配置文件

配置文件路径:/etc/keepalived/keepalived.conf
清空:> /etc/keepalived/keepalived.conf

编辑配置文件:

[[email protected] ~]# vim /etc/keepalived/keepalived.conf

增加以下内容:

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"
    interval 3
}
vrrp_instance VI_1 {
    state BACKUP        //这里 和master不一样的名字
    interface eno16777736        //网卡和当前机器一致,否则无法启动keepalived服务
    virtual_router_id 51        //和主机器 保持一致
    priority 90            //权重,要比主机器小的数值
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {
        192.168.74.100        //这里更改为192.168.232.100
    }
    track_script {
        chk_nginx
    }
}

2.定义监控脚本,路径再keepalived里面已定义过

[[email protected] ~]# vim /usr/local/sbin/check_ng.sh

增加以下内容:

#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        systemctl start nginx
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi

3.改动脚本的权限,设置为755权限

[[email protected] ~]# chmod 755 /usr/local/sbin/check_ng.sh

4.启动keepalived服务:

[[email protected] ~]# systemctl start keepalived
[[email protected] ~]# ps aux |grep keep
root     19134  0.0  0.1 118608  1384 ?        Ss   12:33   0:00 /usr/sbin/keepalived -D
root     19135  0.0  0.2 122804  2384 ?        S    12:33   0:00 /usr/sbin/keepalived -D
root     19136  0.0  0.2 122804  2424 ?        S    12:33   0:00 /usr/sbin/keepalived -D
root     19143  0.0  0.0 112676   984 pts/0    R+   12:33   0:00 grep --color=auto keep

区分主和从上的nginx

1.A机器,是源码包安装的nginx(PS:这是lnmp配置好的环境虚拟主机内容)

[[email protected]]# cat /usr/local/nginx/conf/vhost/aaa.com.conf
server
{
    listen 80 default_server; 
    server_name aaa.com;
    index index.html index.htm index.php;
    root /data/wwwroot/default;
}

2.索引页:

[[email protected]~]# cat /data/wwwroot/default/index.html 
This is the default sete.
[[email protected]~]# vim /data/wwwroot/default/index.html   #增加内容 
master This is the default sete.

3.用网页查看

B机器是yum安装的nginx

默认的索引页在 /usr/share/nginx/html/index.html

[[email protected] ~]# vim /usr/share/nginx/html/index.html    #增加内容

backup backup.

网页查看

访问192.168.132.100这个VIP会看到和主机器(即A机器相同的内容),说明现在访问到的是机器master,VIP在master上

测试高可用

1.模拟线上生产环境,主机器宕机环境,最简单直接的方法,就是直接关闭keepalived服务

关闭master机器(即A机器)上的keepalived服务关闭

查看A机器上的VIP被已经释放掉了

[[email protected] ~]# systemctl start keepalived
[[email protected] ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:c2:05:5a brd ff:ff:ff:ff:ff:ff
    inet 192.168.232.132/24 brd 192.168.232.255 scope global dynamic ens33
       valid_lft 1532sec preferred_lft 1532sec
    inet6 fe80::20c:29ff:fec2:55a/64 scope link 
       valid_lft forever preferred_lft forever

2.查看backup机器(即B机器)发现它在监听VIP

[[email protected] ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:fb:fc:6f brd ff:ff:ff:ff:ff:ff
    inet 192.168.232.131/24 brd 192.168.232.255 scope global dynamic ens33
       valid_lft 1179sec preferred_lft 1179sec
    inet 192.168.232.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fefb:fc6f/64 scope link 
       valid_lft forever preferred_lft forever

3.浏览器访问vip,会看到已经变成backup机器上的了

这证明成功了,当A机器出现问题B机器就顶了上去

原文地址:http://blog.51cto.com/12922638/2155817

时间: 2024-11-05 14:39:20

keepalive+nginx集群架构文档的相关文章

线上测试高可用集群部署文档【我的技术我做主】

线上测试高可用集群部署文档 目录: 目录:1 项目需求:2 实现方式:2 拓扑图:3 系统及软件版本:3 安装步骤:4 IP分配:4 LVS和keepalived的安装和配置:4 LVS主配置:4 LVS2备 配置:7 web服务器配置9 Mysql-MHA高可用:13 Mysql主配置:13 manager管理端操作:15 VIP切换:16 测试:26 下面是centos5.6的系统环境,如果是centos6版本,只需改动少许地方即可,步骤一致 . ---- by 金戈铁马行飞燕 项目需求:

Redis集群部署文档(Ubuntu15.10系统)

Redis集群部署文档(Ubuntu15.10系统)(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)127.0.0.1:7000127.0.0.1:7001127.0.0.1:7002127.0.0.1:7003127.0.0.1:7004127.0.0.1:7005 1:下载redis.官网下载3.0.0版本,之前2.几的版本不支持集群模式下载地址:http://download.redis

redis多机集群部署文档

redis多机集群部署文档(centos6.2) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 10.168.32.116:6379 10.168.32.117:6379 10.168.32.118:6379 10.168.32.119:6379 10.168.32.120:6379 10.168.32.121:6379 在安装集群之前,需要在服务器上安装ruby环境, yum insta

kafka集群部署文档(转载)

原文链接:http://www.cnblogs.com/luotianshuai/p/5206662.html Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户的搜索关键词进行统计,分析出当前的流行趋势 有些数据,存储数据库浪费,直接存储硬盘效率又低 这些场景都有一个共同点: 数据是由上游模块产生,上游模块,使用上游模块的数据计算.统计.分析,这

Redis集群明细文档

Redis目前版本是没有提供集群功能的,如果要实现多台Redis同时提供服务只能通过客户端自身去实现(Memchached也是客户端实现分布式).目前根据文档已经看到Redis正在开发集群功能,其中一部分已经开发完成,但是具体什么时候可以用上,还不得而知.文档来源:http://redis.io/topics/cluster-spec 一.介绍 该文档是开发之中的redis集群实现细节.该文档分成两个部分,第一部分为在redis非稳定版本代码分支上已经实现的,另外一部分为还需要去实现的.在未来若

nginx集群架构

Linux集群从功能分类 高可用集群,高可用集群通常为俩台服务器,一台工作,另一台冗余,当提供服务器的服务器宕机时候,冗余服务器将接替宕机的服务器继续提供服务.实现高可用的集群开源软件有Heatbeat和Keepalived. 负载均衡集群,需要有一台服务器作为分发器,它负载把用户的请求分发给后端的服务器处理,在负载均衡集群中,除分发器外,就是给用户提供服务的服务器了,这些服务器的数量至少是俩台.实现负载均衡的开源软件有很多,如:LVS,keepalived,Haproxy,Nginx,商业版有

Apache HBase 集群安装文档

简介: Apache HBase 是一个分布式的.面向列的开源 NoSQL 数据库.具有高性能.高可靠性.可伸缩.面向列.分布式存储的特性. HBase 的数据文件最终落地在 HDFS 之上,所以在 Hadoop 集群中,DataNode 节点都需安装 HBase Worker Node. 另外,HBase 受 ZooKeeper 管理,还需安装 ZooKeeper 单机或集群.建议 HBase Master 节点不要与集群中其余 Master 节点安装在同一台物理服务器. HBase Mast

kubeadm安装Kubernetes V1.10集群详细文档

1:服务器信息以及节点介绍 系统信息:centos1708 minimal    只修改IP地址 主机名称 IP 备注 node01 192.168.150.181 master and etcd rode02 192.168.150.182 master and etcd node03 192.168.150.183 master and etcd node04 192.168.150.184 node VIP 192.168.150.186 软件版本: docker17.03.2-ce so

Apache Hadoop 集群安装文档

简介: 软件:jdk-8u111-linux-x64.rpm.hadoop-2.8.0.tar.gz http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz 系统:CentOS 6.8 x64 主机列表及配置信息: master.hadoop datanode[01:03].hadoop CPU: 8 4 MEM: 16G 8G DISK: 100G*2 100G*2 一.系统初始化