Nginx+keepalived高可用配置记录

master服务器ip地址:192.168.100.161
slave服务器ip地址:192.168.100.162
虚拟ip(VIP,一个尚未占用的内网ip即可)地址: 192.168.100.168

确认使用的网卡

ip a
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: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:0c:29:f9:1d:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.162/24 brd 192.168.100.255 scope global ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fef9:1d13/64 scope link 
       valid_lft forever preferred_lft forever

使用第2个网卡ens192

  • 下载keepalived
wget http://www.keepalived.org/software/keepalived-2.2.7.tar.gz
#要以不安全的方式连接至 www.keepalived.org,使用“--no-check-certificate
wget http://www.keepalived.org/software/keepalived-2.2.7.tar.gz --no-check-certificate
  • 安装依赖包
yum install gcc openssl-devel popt-devel -y  

解压,编译安装

tar zxf keepalived-2.2.7.tar.gz -C /usr/local/src/
cd /usr/local/src/keepalived-2.2.7
./configure --prefix=/usr/local/keepalived
image.png
make && make install

ll /usr/local/src/keepalived-2.2.7/keepalived/etc/init.d/keepalived
-rwxrwxr-x 1 shida shida 1308 9月  15 2016 /usr/local/src/keepalived-2.2.7/keepalived/etc/init.d/keepalived

cp /usr/local/src/keepalived-2.2.7/keepalived/etc/init.d/keepalived    /etc/init.d/
mkdir -p /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf.sample    /etc/keepalived/keepalived.conf
cp /usr/local/src/keepalived-2.2.7/keepalived/etc/sysconfig/keepalived     /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived    /usr/sbin/
  • 修改配置文件:

master服务器配置:

! Configuration File for keepalived

global_defs {
   router_id lvs_slb0
            }

# 检测nginx是否运行
vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
        weight -20
                      }

vrrp_instance VI_1 {
    #state MASTER
    #此处不设置为MASTER,通过priority来竞争master
    state MASTER
    #网卡名字,ip a 可查看
    interface ens192
    #同一个keepalived集群的virtual_router_id相同
    virtual_router_id 51
    #权重,master要大于slave
    priority 100
    #主备通讯时间间隔
    advert_int 1
    #主备保持一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }
     # 与上方nginx运行状况检测呼应
    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        # 虚拟ip地址
        192.168.100.168
                      }
}

slave服务器配置:

! Configuration File for keepalived

global_defs {
   router_id lvs_lsb1
            }

# 检测nginx是否运行
vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
        weight -20
                      }

vrrp_instance VI_1 {
    state BACKUP
    interface ens192
    virtual_router_id 51
    priority 90
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 1111
                   }
#与上方nginx运行状况检测呼应
    track_script {
        chk_nginx
                 }

virtual_ipaddress {
        # 虚拟ip地址
        192.168.100.168
                   }
                    }
  • nginx监听脚本:
#创建nginx检测脚本
#touch nginx_check.sh

#给脚本增加可执行权限
#chmod +x nginx_check.sh
  • 脚本添加如下内容:
#! /bin/bash
pidof nginx
if [ $? -ne 0 ];then
/etc/init.d/keepalived stop
fi
  • 防止出现脑裂现象(主备同时获取了VIP地址) 我没有应用。
# 指定keepalived配置的网卡:enp0s3,固定的VRRP广播地址:224.0.0.18
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface enp0s3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface enp0s3 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

# 查看配置的规则
firewall-cmd --direct --get-rules ipv4 filter INPUT
firewall-cmd --direct --get-rules ipv4 filter OUTPUT
image.png
  • 启动服务:
# 启动服务
service keepalived start

# 配置开机自启动
systemctl enable keepalived
  • 查看服务启动情况:
ps -aux |grep keepalived
image.png
  • 查看启动日志:
journalctl -xe
image.png
  • 查看keepalived日志
tail -f  /var/log/messages
image.png

配置成功后的效果。ens192是网卡名字;192.168.100.168是虚拟ip,已经成功绑定到网卡上。

image.png
  • 关于keepalived配置中的 mcast_src_ip 和 unicast_src_ip

如果两节点的上联交换机允许组播,采用组播模式(默认)

如果两节点的上联交换机禁用了组播,则只能采用vrrp单播通告的方式
https://www.jianshu.com/p/7c709c3be4a9

  • Keepalived两节点出现双VIP的情况

https://www.cnblogs.com/netonline/archive/2017/10/09/7642595.html

  • keepalived 配置文件参数详解

https://blog.csdn.net/mofiu/article/details/76644012

https://www.cnblogs.com/along1226/p/5027838.html

  • MySQL共享存储主备模式利用Keepalived实现双机高可用

http://blog.51cto.com/7424593/1893767

  • keepalived Unsafe permissions found for script

http://old.gebiji.com/2016/12/21/ka-warning-default-user/

  • How do I enable: script_security?

https://github.com/acassen/keepalived/issues/901

  • Keepalived+Nginx架构整理版

https://linuxeye.com/448.html

  • LVS的原理介绍

https://www.cnblogs.com/along1226/p/5014363.html

更多的监控nginx健康脚本

#!/bin/sh
nginxPidNum=`ps -C nginx --no-header |wc -l`
keepalivedPidNum=`ps -C keepalived --no-header |wc -l`
if [$nginxPidNum -eq 0 ];then
    killall keepalived
elif [$keepalivedPidNum -eq 0 ];then
    service keepalived start
fi
A=`ps -C nginx --no-header |wc -l`                 ## 查看是否有 nginx进程 把值赋给变量A 
if [ $A -eq 0 ];then                               ## 如果没有进程值得为 零
      /usr/local/nginx/sbin/nginx
      sleep 3
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
            killall keepalived                     ## 则结束 keepalived 进程
      fi
fi 
#!/bin/bash
ps -C nginx --no-header
if [ $? -ne 0 ]; then
        /usr/local/nginx/sbin/nginx
        sleep 5
        ps -C nginx --no-header
        if [ $? -ne 0 ]; then
                /etc/init.d/keepalived stop
        fi
fi
sleep 5
#!/bin/bash
while :
do
nginxpid=`ps -C nginx --no-header | wc -l`
if [ $nginxpid -eq 0 ];then
   /usr/local/nginx/sbin/nginx
   sleep 5
   nginxpid=`ps -C nginx --no-header | wc -l`
   echo $nginxpid
      if [ $nginxpid -eq 0 ];then
       /etc/init.d/keepalived stop
      fi
fi
sleep 5
done
#!/bin/sh
white true
do
PNUM=`ps -ef|grep nginx|wc -l`
#这里也可使用nmap 192.168.1.3 -p 80|grep open|wc -l来判断个数
if [ $PNUM -lt 3 ];then
/etc/init.d/keepalived stop >/dec/null 2>&1
kill -9 keealived >/dec/null 2>&1
kill -9 keealived >/dec/null 2>&1
fi
sleep 5
done

检查nginx配置文件

/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容