设为首页 收藏本站
查看: 799|回复: 0

[经验分享] keepalive+nginx集群架构文档

[复制链接]

尚未签到

发表于 2018-11-14 09:00:53 | 显示全部楼层 |阅读模式
  1.准备两台机器
  A机器:192.168.232.132
  B机器:192.168.232.131
  A级器作为master,B机器作为backup
  2.两台机器都安装:keepalived
A机器  
[root@aaa-01 ~]# yum install -y keepalived
  
B机器
  
[root@bbb-01 ~]# yum install -y keepalived
  3.两台机器上都安装nginx
  若是A、B机器没有装nginx服务,可以直接 yum安装
  因为我A机器上已经源码包安装编译过nginx了所以就不用再安装了
  B机器安装完之后启动nginx
[root@bbb-01 ~]# yum install -y nginx  
[root@bbb-01 ~]# service nginx start
  
Redirecting to /bin/systemctl start nginx.service
  
[root@bbb-01 ~]# 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 {
  
     aming@aminglinux.com
  
   }
  
   notification_email_from root@aminglinux.com
  
   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服务)
[root@aaa-01 ~]# chmod 755 /usr/local/sbin/check_ng.sh  4.启动keepalived服务,并查看是否启动成功
[root@aaa-01 ~]# systemctl start keepalived  
[root@aaa-01 ~]# 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服务进程,会看到自动加载了
[root@aaa-01 ~]# /etc/init.d/nginx stop  
Stopping nginx (via systemctl):                            [  确定  ]
  
[root@aaa-01 ~]# 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
[root@aaa-01 ~]# ip add  
1: lo:  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:  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
  编辑配置文件:
[root@bbb-01 ~]# vim /etc/keepalived/keepalived.conf  增加以下内容:
global_defs {  
   notification_email {
  
     aming@aminglinux.com
  
   }
  
   notification_email_from root@aminglinux.com
  
   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里面已定义过
[root@bbb-01 ~]# 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权限
[root@bbb-01 ~]# chmod 755 /usr/local/sbin/check_ng.sh  4.启动keepalived服务:
[root@bbb-01 ~]# systemctl start keepalived  
[root@bbb-01 ~]# 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配置好的环境虚拟主机内容)
[root@aaa-01]# 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.索引页:
[root@aaa-01~]# cat /data/wwwroot/default/index.html  
This is the default sete.
  
[root@aaa-01~]# vim /data/wwwroot/default/index.html   #增加内容
  
master This is the default sete.
  3.用网页查看
DSC0000.jpg

  B机器是yum安装的nginx
  默认的索引页在 /usr/share/nginx/html/index.html
  [root@bbb-01 ~]# vim /usr/share/nginx/html/index.html    #增加内容
  backup backup.
  网页查看
DSC0001.jpg

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

  测试高可用
  1.模拟线上生产环境,主机器宕机环境,最简单直接的方法,就是直接关闭keepalived服务
  关闭master机器(即A机器)上的keepalived服务关闭
  查看A机器上的VIP被已经释放掉了
[root@aaa-01 ~]# systemctl start keepalived  
[root@aaa-01 ~]# ip add
  
1: lo:  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:  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
[root@bbb-01 ~]# ip add  
1: lo:  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:  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机器上的了
DSC0003.jpg

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



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-634791-1-1.html 上篇帖子: Nginx + Django-Jeff 下篇帖子: Nginx RTMP模块 nginx-rtmp-module指令详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表