• Centos6.8 搭建Lvs+Keepalived


    Keepalived

      keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换。Keepalived是自动完成,不需人工干涉。

    简介:

      Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

    作用:

      主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
      高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)
     

    环境:

     Keepalived-Master:Centos6.8   192.168.126.129

     Keepalived-Slave:  Centos6.8   192.168.126.136

     Web-Server:Centos6.8    192.168.126.135

     Web-Server:Centos6.8    192.168.126.134

     事先已经搭建好Lvs,如果是全新环境,请参考:配置Lvs

    1、安装编译环境、关闭防火墙

    [root@localhost /]# service iptables stop
    [root@localhost /]#yum -y install openssl-devel kernel-devel make gcc openssl-devel libnl* popt*

    2、下载安装包

    [root@localhost /]#wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
    [root@localhost /]#http://mirror.centos.org/centos/6/os/x86_64/Packages/popt-static-1.13-7.el6.x86_64.rpm
    [root@localhost /]#yum -y install popt-static-1.13-7.el6.x86_64.rpm

    3、解压安装Keepalived

    [root@localhost /]#ln -s /usr/src/kernels/2.6.32-220.13.1.el6.x86_64/ /usr/src/linux  #设置软连接
    [root@localhost /]#tar zxvf keepalived-1.2.7.tar.gz
    [root@localhost /]#cd keepalived-1.2.7
    [root@localhost keepalived-1.2.7]# ./configure --with-kernel-dir=/usr/src/kernels/2.6.32-358.2.1.el6.x86_64/

    执行完上条命令,看是否和下图红色框中一致

    继续执行

    4、编译

    [root@localhost keepalived-1.2.7]# make && make install
    
    
    [root@localhost keepalived-1.2.7]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
    [root@localhost keepalived-1.2.7]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
    [root@localhost keepalived-1.2.7]# mkdir /etc/keepalived
    [root@localhost keepalived-1.2.7]# cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
    [root@localhost keepalived-1.2.7]# cp /usr/local/sbin/keepalived /usr/sbin/

    5、The First:打开IP Forward功能,如不打开此功能下面的配置都无济于事

    [root@localhost keepalived-1.2.7]# vim /etc/sysctl.conf 
    # Kernel sysctl configuration file for Red Hat Linux
    #
    # For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
    # sysctl.conf(5) for more details.
    #
    # Use '/sbin/sysctl -a' to list all possible parameters.
    
    # Controls IP packet forwarding
    
    net.ipv4.ip_forward = 1      #此处原本是0,一定要修改为1,一定要为1.
    [root@localhost keepalived-1.2.7]# sysctl -p   #使配置立即生效

    以上配置,需要在Master和Slave进行配置,以下配置请看清楚Master和Slave服务器

    Master服务器进行Keepalived配置  -  Keepalived-Master

    1、修改Keepalived配置

    [root@localhost keepalived-1.2.7]# vim /etc/keepalived/keepalived.conf 
    
    
    具体的参数详情请参考:http://zhumeng8337797.blog.163.com/blog/static/100768914201191762253640/
    下面是我配置好的文件内容
    (可以删除原先的配置,把下面的配置进行修改然后粘贴进去,邮箱我这边没有配置,如果你有需求可以进行配置)
    global_defs {
       notification_email {
        willam@cn.accommate.com   #设置报警邮件单个或多个地址
       }
       notification_email_from server@laiwojia.la #邮件的发送地址
       smtp_server 192.168.138.10 #smtp 地址
       smtp_connect_timeout 30 #连接smtp服务器超时的实际
       router_id LVS_MASTER  #路由ID两台机器不能相同。LVS2更改为不同
    }
    #vrrp 实例定义部分
    vrrp_instance VI_1 {
        state MASTER  #keepalived 的角色 MASTER 表示主服务器。LVS2更改为:BACKUP
        interface eth0 #指定监测网卡
        virtual_router_id 51 #虚拟路由标示,相同实例,需相同标示。
        priority 150 #优先级 数字越大 优先级越高 MASTER的优先级高于BACKUP优先级(如master 150,backup 100)
        advert_int 1 #设定主备之间检查时间 单位s
        authentication {  #设定验证类型和密码
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress { #设定虚拟IP地址 可以设置多个 每行一个
           192.168.126.100
        }
    }
    #虚拟服务器部分
    virtual_server 192.168.126.100 80 {
        delay_loop 6 #设定运行情况检查时间 单位s
        lb_algo rr #负载调度算法 rr即轮叫算法
        lb_kind DR #设置LVS负载机制 NAT TUN DR 三种模式可选
        persistence_timeout 0  #会话时间
                                #会话保持在某个服务节点
                                #用户在动态页面50s内没有任何动作,那么后面就会被分发到其他节点
                                #用户一直动作,不受50s限制
        protocol TCP  #使用协议
        #以下为real_server部分
        real_server 192.168.126.135 80 {
            weight 1  #服务节点权值,数字越大,权值越高
                      #权值的大小可以为不同性能的服务器分配不同的负载
                      #这样才能有效合理的利用服务器资源
            TCP_CHECK {  #状态检查部分
              connect_timeout 3 #3s无响应超时
              nb_get_retry 3  #重试次数
              delay_before_retry 3   #重试间隔
              connect_port 80 #连接端口
            }
        }
        real_server 192.168.126.134 80 {
            weight 1  #服务节点权值,数字越大,权值越高
                      #权值的大小可以为不同性能的服务器分配不同的负载
                      #这样才能有效合理的利用服务器资源
            TCP_CHECK {  #状态检查部分
              connect_timeout 3 #3s无响应超时
              nb_get_retry 3  #重试次数
              delay_before_retry 3   #重试间隔
              connect_port 80 #连接端口
            }
        }
    }

    2、重启服务

    [root@localhost keepalived-1.2.7]# chkconfig keepalived on
    [root@localhost keepalived-1.2.7]# service keepalived start

    3、查看进程

    [root@localhost keepalived-1.2.7]# ps aux | grep keepalived
    
    结果如下
    Keepalived正常运行时,共启动3个进程,其中一个进程是父进程,负责监控其子进程;一个是vrrp子进程;另外一个是checkers子进程。
    如果此时只看到2个进程,请从安装keepalived的步骤重新执行。
    
    root       5082  0.0  0.1  42172  1008 ?        Ss   07:02   0:00 keepalived -D   #进程1
    root       5084  0.1  0.2  44400  2312 ?        S    07:02   0:00 keepalived -D   #进程2
    root       5085  0.2  0.1  44276  1640 ?        S    07:02   0:00 keepalived -D   #进程3
    root       5087  0.0  0.0 103324   892 pts/2    S+   07:03   0:00 grep keepalived

    4、查看虚拟IP(重要

    [root@localhost keepalived-1.2.7]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:27:22:3f brd ff:ff:ff:ff:ff:ff
        inet 192.168.126.129/24 brd 192.168.126.255 scope global eth0
        inet 192.168.126.100/32 brd 192.168.126.100 scope global eth0:0     #如果看到此条信息,说明虚拟IP已经自动配置上了
        inet6 fe80::20c:29ff:fe27:223f/64 scope link 
           valid_lft forever preferred_lft forever

    还有3个命令在先列示下,并不用执行

    显示集群中服务器ip信息:ipvsadm -ln

    查看日志:tail -f /var/log/messages

    查看请求转发情况:ipvsadm -lcn | grep 虚拟IP

    至此,Keepalived_MASTER服务器已经配置好并启动了

    ------------------------------------------------------------------------------------------------

    Slave服务器进行Keepalived配置  -  Keepalived-Slave

    1、修改Keepalived配置文件

    [root@localhost keepalived-1.2.7]# vim /etc/keepalived/keepalived.conf 
    
    (注:相比keepalived-master,只有三处不同global_defs中的router_id、vrrp_instance中的state、priority
    (注意keepAlived的配置文件中有一个网卡设备,虚拟机的网卡设备可能是不一样的,有的是eth0,有的是eth1,所以也是要改动的,否则从服务器的服务器很有可能服务不正常)
    )
    
    ! Configuration File for keepalived
    global_defs {
            notification_email {
                    willam@cn.accommate.com
            }
            notification_email_from admin@test.com
            smtp_server 127.0.0.1
            smtp_connect_timeout 30
            router_id LVS_BACKUP     #BACKUP
    }
    
    vrrp_instance VI_1 {
        state BACKUP    #BACKUP
        interface eth1
        virtual_router_id 51   #此数值两边保持一致
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.126.100
        }
    }
    
    virtual_server 192.168.126.100 80 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        nat_mask 255.255.255.0
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.126.135 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                 delay_before_retry 3
            }
        }
    
        real_server 192.168.126.134 80 {
            weight 1
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
         

    2、重启服务

    [root@localhost keepalived-1.2.7]# chkconfig keepalived on
    [root@localhost keepalived-1.2.7]# service keepalived start

    测试LVS层

    1、执行ip a主服务器

    LVS_Master中的IP信息

    LVS_Backup中的IP信息

    现在停掉LVS_Master的Keepalived服务,看看LVS_Backup中是否可以自动家长虚拟IP地址,并且转发请求

    LVS_Master

    LVS_Backup:

    切换成功,访问网页:http://192.168.126.100 看看是否能正常显示

    测试WEB服务器,断掉web2访问网页

    断掉web1开启web2访问网页

    经过不断的测试,终于完成了,望大家能够指正。还有一点就是很多时候都是配置文件中的一些小毛病造成的,比如:

    1、keepAlived中的通知邮箱好像必须要写,否则不正确;

    2、keepAlived中的网卡设备要注意,按照服务器的实际情况填写;

    3、使用时,必要的端口要打开,或者关掉防火墙。否则有事不提供服务;

    4、一些命令行的执行,少一些参数执行就可能会有一些问题。

    .

  • 相关阅读:
    Linux服务器因为Nginx日志access.log文件过大项目无法访问的问题
    【译】StackExchange.Redis 中文文档(二)配置
    【译】StackExchange.Redis 中文文档(一)基础
    Redis应用(一)实时在线用户
    [.NET]Thread与Task的区别
    并查集(UnionFind)技巧总结
    [LeetCode题解]377. 组合总和 Ⅳ
    [LeetCode题解]216. 组合总和 III
    [LeetCode题解]39. 组合总和
    [LeetCode题解]40. 组合总和 II
  • 原文地址:https://www.cnblogs.com/willamwang/p/8086660.html
Copyright © 2020-2023  润新知