搭建keepalived和nginx高可用步骤

 

环境信息说明:

ubutu-30 ubutu-31 分别安装keepalived 和nginx 使用apt-get install 安装,请自行百度

首先搭建keealived主备设备

keealived主节点

#configration File for keepalived

  global_defs {

  notification_email {
  aaa@qq.com
 }
    notification_email_from aa@qq.com
    smtp_server 127.0.0.1 #邮件服务器地址
    smtp_connect_timeout 30 #邮件服务器请求时间
    router_id LVS_01 #在不同keepalived服务不能一样

}

   vrrp_instance VI_1 {  #这个是一个实例
    state MASTER  #状态
    interface ens38
    virtual_router_id 51 #这里必须一样,不要就裂脑了
    priority 150 #优先级,master一般大于100
    advert_int 3 #心跳的间隔,如果对方3s没有收到消息,切换主机

    authentication {
        auth_type   PASS
        auth_pass   1111
    }


 virtual_ipaddress {
   192.168.13.150/24 # 子网掩码 255.255.255.0
   }
}

keepalived备节点

#configration File for keepalived

  global_defs {

  notification_email {
  aaa@qq.com
 }
    notification_email_from aa@qq.com
    smtp_server 127.0.0.1 #邮件服务器地址
    smtp_connect_timeout 30 #邮件服务器请求时间
    router_id LVS_02 #在不同keepalived服务不能一样

}

   vrrp_instance VI_1 {  #这个是一个实例
    state BACKUP  #状态
    interface ens38
    virtual_router_id 51 #这里必须一样,不要就裂脑了
    priority 100 #优先级,master一般大于100
    advert_int 3 #心跳的间隔,如果对方3s没有收到消息,切换主机

    authentication {
        auth_type   PASS
        auth_pass   1111
    }


 virtual_ipaddress {
   192.168.13.150/24 # 子网掩码 255.255.255.0
   }
}

启动keepalived主节点

root@ubuntu-131:~# cd /etc/keepalived/
root@ubuntu-131:/etc/keepalived# vim keepalived.conf
root@ubuntu-131:/etc/keepalived# /etc/init.d/keepalived
Usage: /etc/init.d/keepalived {start|stop|restart|reload|force-reload}
root@ubuntu-131:/etc/keepalived# /etc/init.d/keepalived  start
[ ok ] Starting keepalived (via systemctl): keepalived.service.
root@ubuntu-131:/etc/keepalived#
root@ubuntu-131:/etc/keepalived#
root@ubuntu-131:/etc/keepalived#
#或者采用第二种方式
root@ubuntu-131:/etc/keepalived# service keepalived start
root@ubuntu-131:/etc/keepalived#

 真实的keepalived脚本(出问题才查看)

#! /bin/sh
#
# keepalived   LVS cluster monitor daemon.
#
#              Written by Andres Salomon <dilinger@voxel.net>
#
### BEGIN INIT INFO
# Provides:          keepalived
# Required-Start:    $syslog $network $remote_fs
# Required-Stop:     $syslog $network $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts keepalived
# Description:       Starts keepalived lvs loadbalancer
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/keepalived
NAME=keepalived
DESC=keepalived
CONFIG=/etc/keepalived/keepalived.conf
TMPFILES="/tmp/.vrrp /tmp/.healthcheckers"

#includes lsb functions
. /lib/lsb/init-functions

test -f $CONFIG || exit 0
test -f $DAEMON || exit 0


# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

case "$1" in
  start)
        log_daemon_msg "Starting $DESC" "$NAME"
        for file in $TMPFILES
        do
                test -e $file && test ! -L $file && rm $file
        done
        if start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
               --exec $DAEMON -- $DAEMON_ARGS; then
                log_end_msg 0
        else
                log_end_msg 1
        fi
       ;;
  stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        if start-stop-daemon --oknodo --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec $DAEMON; then
                log_end_msg 0
        else
                log_end_msg 1
        fi
       ;;
  reload|force-reload)
        log_action_begin_msg "Reloading $DESC configuration..."
        if start-stop-daemon --stop --quiet --signal 1 --pidfile \
               /var/run/$NAME.pid --exec $DAEMON; then
               log_end_msg 0
        else
                log_action_end_msg 1
        fi
       ;;
  restart)
        log_action_begin_msg "Restarting $DESC" "$NAME"

        start-stop-daemon --stop --quiet --pidfile \
                /var/run/$NAME.pid --exec $DAEMON || true
       sleep 1
       if start-stop-daemon --start --quiet --pidfile \
               /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_ARGS; then
               log_end_msg 0
        else
                log_end_msg 1
        fi
       ;;
  *)
       echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload}" >&2
       exit 1
       ;;
esac

exit 0

keepalived启动日志位置(在/var/log/syslogs下)


root@ubuntu-130:/var/log# tail -f syslog
syslog       syslog.1     syslog.2.gz  syslog.3.gz  syslog.4.gz  syslog.5.gz  syslog.6.gz  syslog.7.gz
root@ubuntu-130:/var/log# tail -f syslog
syslog       syslog.1     syslog.2.gz  syslog.3.gz  syslog.4.gz  syslog.5.gz  syslog.6.gz  syslog.7.gz
root@ubuntu-130:/var/log# tail -f ryslog
tail: 无法打开'ryslog' 读取数据: 没有那个文件或目录
tail: 没有剩余文件
root@ubuntu-130:/var/log# tail -f syslog
Jan 27 23:10:12 ubuntu-130 dbus[1140]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Jan 27 23:10:12 ubuntu-130 systemd[1]: Started Network Manager Script Dispatcher Service.
Jan 27 23:10:12 ubuntu-130 nm-dispatcher: req:1 'dhcp4-change' [ens38]: new request (1 scripts)
Jan 27 23:10:12 ubuntu-130 nm-dispatcher: req:1 'dhcp4-change' [ens38]: start running ordered scripts...
Jan 27 23:11:40 ubuntu-130 systemd[1]: Started Keepalive Daemon (LVS and VRRP).
Jan 27 23:11:49 ubuntu-130 systemd[1]: Starting nginx - high performance web server...
Jan 27 23:11:49 ubuntu-130 systemd[1]: Started nginx - high performance web server.
Jan 27 23:17:01 ubuntu-130 CRON[10157]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jan 27 23:20:13 ubuntu-130 systemd[1]: Started Session 21 of user root.
Jan 27 23:20:13 ubuntu-130 systemd[1]: Started Session 22 of user root.

发现在keepalived主节点的ens38网卡上,绑定了一个浮动IP(关键)

 说明已经正常启动keepalived

root@ubuntu-130:/var/log# ps -ef | grep keepal
root       9203      1  0 22:59 ?        00:00:00 /usr/sbin/keepalived
root       9204   9203  0 22:59 ?        00:00:00 /usr/sbin/keepalived
root       9205   9203  0 22:59 ?        00:00:00 /usr/sbin/keepalived
root       9959   6197  0 23:14 pts/19   00:00:00 vim keepalived.conf
root      11041   5510  0 23:25 pts/20   00:00:00 grep --color=auto keepal

 

同理,将keepalived备节点启动,发现虚拟在ens38上虚拟的IP没有映射带备节点上,

至此主备keepalived搭建完成,

主备倒换:

将主节点ubutu-30宕机(重启),或者keepalived关闭,则发现虚拟浮动ip映射到备节点上,即ubutu-31

备节点重新接管浮动ip 192.168.13.150,当主节点重启完成,重新接管浮动ip

整合nginx和keepalived

ubutu-30 和ubutu-31 的nginx服务都起来了,并且是全ip监听,

root@ubuntu-130:~# netstat -luntp | grep nginx
tcp        0      0 0.0.0.0:8001            0.0.0.0:*               LISTEN      2021/nginx.conf
tcp        0      0 0.0.0.0:8002            0.0.0.0:*               LISTEN      2021/nginx.conf
tcp        0      0 0.0.0.0:8003            0.0.0.0:*               LISTEN      2021/nginx.conf
root@ubuntu-130:~#

http://192.168.13.135:8001/index.html 浮动ip就可以访问 nginx的web服务

当ubutu-30宕机,浏览器还可以根据keealived的主备切换能力,将浮动ip 转到 utubu-31上,进而访问ubutu-31上nginx的web服务。

 

思考几个问题:

1.需要将keepalived设置跟随操作系统一起启动,

2.nginx是如何保证nginx挂掉后,不断重拉的呢?

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值