keepalived高可用lvs集群

实验拓扑

 1.png

keepalived高可用配置

HA01和HA02的keepalived安装及配置(安装及配置均相同)

~]# yum -y install keepalived

HA01和HA02做时间同步,crontab中添加时间同步脚本

~]# date; ssh 192.168.150.140 'date'     此命令可以同时查看两台时间快速进行比较

~]# crontab -l     添加对时服务

*/5 * * * * /sbin/ntpdate 10.53.1.9 &>/dev/null

确认防火墙规则及selinux

~]# iptables -vnL

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         

~]# getenforce

Disabled

keepalived的整个安装包

~]# rpm -ql keepalived     配置文件,服务启动模块,执行文件,说明

/etc/keepalived

/etc/keepalived/keepalived.conf

/etc/sysconfig/keepalived

/usr/bin/genhash

/usr/lib/systemd/system/keepalived.service

/usr/libexec/keepalived

/usr/sbin/keepalived

/usr/share/doc/keepalived-1.2.13

/usr/share/doc/keepalived-1.2.13/AUTHOR

/usr/share/doc/keepalived-1.2.13/CONTRIBUTORS

/usr/share/doc/keepalived-1.2.13/COPYING

/usr/share/doc/keepalived-1.2.13/ChangeLog

/usr/share/doc/keepalived-1.2.13/NOTE_vrrp_vmac.txt

/usr/share/doc/keepalived-1.2.13/README

/usr/share/doc/keepalived-1.2.13/TODO

/usr/share/doc/keepalived-1.2.13/VERSION

/usr/share/doc/keepalived-1.2.13/keepalived.conf.SYNOPSIS

/usr/share/doc/keepalived-1.2.13/samples

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.HTTP_GET.port

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.IPv6

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.SMTP_CHECK

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.SSL_GET

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.fwmark

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.inhibit

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.misc_check

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.misc_check_arg

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.quorum

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.sample

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.status_code

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.track_interface

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.virtual_server_group

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.virtualhost

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.vrrp

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.vrrp.localcheck

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.vrrp.lvs_syncd

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.vrrp.routes

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.vrrp.scripts

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.vrrp.static_ipaddress

/usr/share/doc/keepalived-1.2.13/samples/keepalived.conf.vrrp.sync

/usr/share/doc/keepalived-1.2.13/samples/sample.misccheck.smbcheck.sh

/usr/share/man/man1/genhash.1.gz

/usr/share/man/man5/keepalived.conf.5.gz

/usr/share/man/man8/keepalived.8.gz

/usr/share/snmp/mibs/KEEPALIVED-MIB.txt

keepalived.config配置

~]# cd /etc/keepalived/

keepalived]# ls

keepalived.conf

keepalived]# cp keepalived.conf{,.bak}

! Configuration File or keepalived

global_defs {

   notification_email {

       root@localhost

    }

   notification_email_from kaadmin@void.com

   smtp_server 127.0.0.1     指定邮件网关

   smtp_connect_timeout 30

   router_id node1

    vrrp_mcast_group4 224.0.0.18

}

vrrp_instance VI_1 {     配置vrrp

    state MASTER

    interface eno33554976

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass Iyd4q2Yg    生成一个随机数进行密码设置,两边设置一样,长度为8位

加密时产生随机密码

~]# openssl rand -base64 10

    }

    virtual_ipaddress {

        192.168.150.131 dev eno33554976 label eno33554976:0

    }

    notify_master "/etc/keepalived/notify.sh master"     vrrp健康检查脚本

    notify_backup "/etc/keepalived/notify.sh backup"

    notify_fault "/etc/keepalived/notify.sh fault"

}

virtual_server 192.168.150.131 80 {     LVS配置

    delay_loop 6

    lb_algo rr

    lb_kind DR

    protocol TCP

    sorry_server 127.0.0.1 80     sorry_sever指向本机

   real_server 192.168.150.138 80 {     real server指定

        weight 1

        HTTP_GET {

            url {

              path /

              status_code 200

        }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

   real_server 192.168.150.139 80 {

        weight 2

        HTTP_GET {

            url {

              path /

              status_code 200

        }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

健康检查脚本

keepalived]# cat notify.sh

#!/bin/bash

#

contact='root@localhost'

notify() {

    mailsubject="$(hostname) to be $1: vip floating"

    mailbody="$(date +'%F %T'):vrrp transation,$(hostname) change to be $1"

    echo $mailbody | mail -s "$mailsubject" $contact

}

case $1 in

master)

    notify master

    ;;

backup)

    notify backup

    ;;

fault)

    notify fault

    ;;

*)

    echo "Usage: $(basename $0) {master|backup|fault}"

    ;;

esac

安装httpd服务,并开启,创建一个简单的saysorry页面

~]# yum -y install httpd

~]# cat /var/www/html/index.html

<h1>sorry server1</h1>

~]# systemctl start httpd.service

~]# ss -tnl

State       Recv-Q Send-Q     Local Address:Port                    Peer Address:Port             

LISTEN      0      128                    *:22                                 *:*                 

LISTEN      0      100            127.0.0.1:25                                 *:*                 

LISTEN      0      128                   :::80                                :::*                 

LISTEN      0      128                   :::22                                :::*                 

LISTEN      0      100                  ::1:25                                :::*     

将相关配置一并copy至HA02的对应目录,配合当中state改为BACKUP,优先级改为98

keepalived]# scp keepalived.conf 192.168.150.140:/etc/keepalived/

root@192.168.150.140's password:

keepalived.conf                                                    100% 1299     1.3KB/s   00:00   

两台开启keepalived配置

keepalived]# systemctl start keepalived.service

keepalived]# ifconfig

eno33554976: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.150.137  netmask 255.255.255.0  broadcast 192.168.150.255

        inet6 fe80::20c:29ff:fe87:41fd  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:87:41:fd  txqueuelen 1000  (Ethernet)

        RX packets 37718  bytes 18787553 (17.9 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 47265  bytes 21013002 (20.0 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno33554976:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.150.131  netmask 255.255.255.255  broadcast 0.0.0.0

        ether 00:0c:29:87:41:fd  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 0  (Local Loopback)

        RX packets 35  bytes 3063 (2.9 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 35  bytes 3063 (2.9 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

DR模式的LVS集群,RS之前已经有配置,拿来使用即可

实验测试:

HA01宕机后HA02可以正常接管

模拟HA01宕机

keepalived]# systemctl stop keepalived.service

此时客户端访问无任何影响

~]# curl http://192.168.150.131

<h1>RS2</h1>

~]# curl http://192.168.150.131

<h1>RS1</h1>

HA01上的状态,serviceIP已经漂移至HA02上

[root@localhost keepalived]# ifconfig

eno33554976: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.150.137  netmask 255.255.255.0  broadcast 192.168.150.255

        inet6 fe80::20c:29ff:fe87:41fd  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:87:41:fd  txqueuelen 1000  (Ethernet)

        RX packets 46766  bytes 19985732 (19.0 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 62940  bytes 22209972 (21.1 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 0  (Local Loopback)

        RX packets 271  bytes 21439 (20.9 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 271  bytes 21439 (20.9 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

此时HA02上状态 service已经至此服务器上

~]# ifconfig

eno33554976: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.150.140  netmask 255.255.255.0  broadcast 192.168.150.255

        inet6 fe80::20c:29ff:fe85:df69  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:85:df:69  txqueuelen 1000  (Ethernet)

        RX packets 48744  bytes 19388076 (18.4 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 21722  bytes 1924405 (1.8 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno33554976:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.150.131  netmask 255.255.255.255  broadcast 0.0.0.0

        ether 00:0c:29:85:df:69  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 0  (Local Loopback)

        RX packets 222  bytes 15909 (15.5 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 222  bytes 15909 (15.5 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.150.131:80 rr

  -> 192.168.150.138:80           Route   1      0          0         

  -> 192.168.150.139:80           Route   2      0          0     

查看监控检查邮件预警机制正常

~]# mail

Heirloom Mail version 12.5 7/5/10.  Type ? for help.

"/var/spool/mail/root": 20 messages 20 new

>N  1 root                  Fri Dec  2 18:54  18/730   "localhost.localdomain to be backup: vip floating"

HA01恢复正常后服务恢复至HA01

~]# systemctl start keepalived.service 模拟HA01正常恢复

HA01状态

~]# ifconfig

eno33554976: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.150.137  netmask 255.255.255.0  broadcast 192.168.150.255

        inet6 fe80::20c:29ff:fe87:41fd  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:87:41:fd  txqueuelen 1000  (Ethernet)

        RX packets 46963  bytes 20002522 (19.0 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 63078  bytes 22223988 (21.1 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno33554976:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.150.131  netmask 255.255.255.255  broadcast 0.0.0.0

        ether 00:0c:29:87:41:fd  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 0  (Local Loopback)

        RX packets 273  bytes 21543 (21.0 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 273  bytes 21543 (21.0 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

~]# mail

Heirloom Mail version 12.5 7/5/10.  Type ? for help.

"/var/spool/mail/root": 13 messages 13 new

>N  1 root                  Fri Dec  2 18:55  18/730  

~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.150.131:80 rr

  -> 192.168.150.138:80           Route   1      0          0         

  -> 192.168.150.139:80           Route   2      0          0   

客户端无任何影响

HA02状态

~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.150.131:80 rr

  -> 192.168.150.138:80           Route   1      0          0         

  -> 192.168.150.139:80           Route   2      0          0         

您在 /var/spool/mail/root 中有新邮件

~]# ifconfig

eno33554976: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.150.140  netmask 255.255.255.0  broadcast 192.168.150.255

        inet6 fe80::20c:29ff:fe85:df69  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:85:df:69  txqueuelen 1000  (Ethernet)

        RX packets 49491  bytes 19470170 (18.5 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 22457  bytes 1988047 (1.8 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 0  (Local Loopback)

        RX packets 224  bytes 16015 (15.6 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 224  bytes 16015 (15.6 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

RS单台宕机HA的状态

~]# systemctl stop httpd.service     RS2模拟宕机

客户端访问,只能访问其余一台

[root@localhost ~]# curl http://192.168.150.131

<h1>RS1</h1>

[root@localhost ~]# curl http://192.168.150.131

<h1>RS1</h1>

[root@localhost ~]# curl http://192.168.150.131

<h1>RS1</h1>

[root@localhost ~]# curl http://192.168.150.131

<h1>RS1</h1>

[root@localhost ~]# curl http://192.168.150.131

<h1>RS1</h1>

[root@localhost ~]# curl http://192.168.150.131

<h1>RS1</h1>

HA01状态     RS主机只剩一台

~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.150.131:80 rr

  -> 192.168.150.138:80           Route   1      0          5

HA02状态    

~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.150.131:80 rr

  -> 192.168.150.138:80           Route   1      0          0       

RS宕机后 sorry_server是否可行

~]# systemctl stop httpd.service     RS模拟宕机

客户端访问     已指向sorry_server,HA主机http服务

~]# curl http://192.168.150.131

<h1>sorry server1</h1>

此时HA01状态

~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.150.131:80 rr

  -> 127.0.0.1:80                 Route   1      0          3         

HA02状态

~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.150.131:80 rr

  -> 127.0.0.1:80                 Route   1      0          0   

RS恢复后是否可正常恢复所有状态

 ~]# systemctl start httpd.service     RS恢复

客户端请求     全部恢复正常

[root@localhost ~]# curl http://192.168.150.131

<h1>RS1</h1>

[root@localhost ~]# curl http://192.168.150.131

<h1>RS2</h1>

[root@localhost ~]# curl http://192.168.150.131

<h1>RS1</h1>

[root@localhost ~]# curl http://192.168.150.131

<h1>RS2</h1>

 

原创文章,作者:N23-苏州-void,如若转载,请注明出处:http://www.178linux.com/62861

(0)
N23-苏州-voidN23-苏州-void
上一篇 2016-12-06 15:45
下一篇 2016-12-06 17:07

相关推荐

  • 从增删改查角度学习linux基础命令

    从增删改查角度学习linux基础命令   本文从文件的增加、删除、修改、查询四个角度介绍linux的基本命令,介绍如下:   一.增 touch命令是最常用的创建文件的命令,它的常见参数如下: -a 或–time=atime或–time=access或–time=use  只更改存取时间。 -c 或&#…

    2017-07-15
  • Shell脚本自动部署(编译)LAMP平台

    Shell脚本自动部署(编译)LAMP平台 Shell脚本自动部署(编译)LAMP平台 为什么要用脚本进行部署? 脚本功能介绍 笔者环境 准备工作 声明 使用测试 脚本代码 Shell脚本自动部署(编译)LAMP平台 LAMP是当下非常流行的一套Web架构,我们可以在GNU/Linux下通过其他人打包的程序包来进行安装; 但是在生产环境中,很多时候都需要我们…

    Linux干货 2016-03-26
  • bash(awk递归)N阶【斐波那契数列】多种实现(含递归解析图)

    【版权所有】转载请说明作者【Jev Tes】        【本文导航】        零、关于斐波那契数列        一、输入参数合法性判断       &nbsp…

    Linux干货 2016-11-24
  • DNS and BIND

    DNS and BIND 名称解析:把一种代号转换成为另一种代号的功能是应用程序基于某个搜索键在指定的数据库查询,查询到对应的键以后,对应键被找出来的过程!passwd —《nsswith》/etc/nsswith.conf 注意:查询的时候用到的是UDP的53,主从复制走的是tcp(但是也用到udp) DNS: Domain Name Serv…

    Linux干货 2016-10-21
  • 正则表达式、扩展正则表达式

    正则表达式:支持:grep,sed,awk,vim, less,nginx,varnish等

    2018-03-16
  • 第六周作业

    请详细总结vim编辑器的使用并完成以下练习题 vim总结:     模式:编辑模式                 插入模式                 末行模式  …

    Linux干货 2017-02-06

评论列表(1条)

  • 马哥教育
    马哥教育 2017-03-13 23:53

    赞,有拓扑图也有实战的例子,不错的文章~~加油!