使用Keepalived构建LVS-DR模式的高可用集群

一、准备四台主机

主机名			IP					            网关			    作用
client10		DIP: 192.168.10.62/24		192.168.10.2		主LVS
				VIP: 192.168.10.111/24
client20		DIP: 192.168.10.63/24		192.168.10.2		备LVS
				VIP: 192.168.10.111/24
client30		192.168.10.64/24		    192.168.10.2		RS1	WEB1

client40		192.168.10.65/24		    192.168.10.2		RS2	WEB2

二、配置主节点client10

安装ipvsadm

[root@client10 ~]# yum -y install ipvsadm

安装完不需要做任何配置,启动方式由keepalived控制

安装keepalived
1.yum安装

# yum install -y keepalived
# rpm -ql  keepalived-1.3.5-1.el7.x86_64	查看安装路径

2.源码安装

    # wget http://www.keepalived.org/software/keepalived-1.2.16.tar.gz
	# tar  zxvf  keepalived-1.2.16.tar.gz
	# cd	keepalived-1.2.16

解决依赖

# yum -y install gcc openssl-devel libnfnetlink-devel
# ./configure --prefix=/usr/local/keepalived
# make && make install

备份配置文件

[root@client10 ~]# cd /etc/keepalived/
	[root@client10 keepalived]# ls
	keepalived.conf  keepalived.conf.bak 

修改配置文件

[root@client10 keepalived]# vim keepalived.conf		
	  1! Configuration File for keepalived
	  2 
	  3 global_defs {
	  4    notification_email {
	  5     root@localhost		#默认三个地址,修改可用地址
	  6    }
	  7    notification_email_from root@localhost
	  8    smtp_server localhost
	  9    smtp_connect_timeout 30
	 10    router_id client10		#标识当前节点名字,两个节点的此项需要不相同。
	 11 #   vrrp_skip_check_adv_addr
	 12 #   vrrp_strict
	 13 #   vrrp_garp_interval 0
	 14 #   vrrp_gna_interval 0		#这四行注释掉
	 15 }
	 16 
	 17 vrrp_instance apache {	#定义一个实例,一个集群就是一个实例。 默认VI_1 可以随意改	
	 18     state MASTER		#指定 A 节点为主节点 备用节点上设置为 BACKUP 即可
	 19     interface ens33	#绑定虚拟 IP 的网络接口
	 20     virtual_router_id 51	#VRRP 组名,两个节点的设置必须一样,以指明各个节点属于同一 VRRP 组
	 21     priority 100	#主节点的优先级(1-254 之间),备用节点必须比主节点优先级低
	 22     advert_int 1	#组播信息发送间隔,两个节点设置必须一样
	 23     authentication {	#设置验证信息,两个节点必须一致
	 24         auth_type PASS
	 25         auth_pass 1111
	 26     }
	 27     virtual_ipaddress {
	 28         192.168.10.111	#指定虚拟 IP, 两个节点设置必须一样
	 29     }
	 30 }
	#类似添加虚拟一个服务 ipvsadm -A -t 192.168.10.111 80 -s rr
	 31 virtual_server 192.168.10.111 80 {
	 32     delay_loop 6		#Keepalived 多长时间监测一次 RS
	 33     lb_algo rr 		#分发算法
	 34     lb_kind DR			#DR 模式
	 35     persistence_timeout 50		 #同一IP50秒内的请求都发到同个real server,这个会影响LVS的 rr 调度算法, 
	 同一 IP 超过 50 秒后,再次访问,才会被转发到另一台 real server 上。 persistence 持久性的意思,测试效果可把时间改为1s
	 36     protocol TCP
	# ipvsadm -a -t 192.168.10.111:80 -r 192.168.10.64 -g 添加的内容,类似这条命令
	# ipvsadm -a -t 192.168.10.111:80 -r 192.168.10.65 –g 添加的内容,类似这条命令
	
	 37     
	#配置服务节点1,需要指定 realserver 的真实 IP 地址和端口,IP不端口之间用空格隔开
	 38     real_server 192.168.10.64 80 {
	 39         weight 1 	#配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
	 40          TCP_CHECK {					#这段内容手动添加,把以前的内容删除
	 41                 connect_timeout 3		#表示 3 秒无响应超时
	 42                 nb_get_retry 3		#表示重试次数
	 43                 delay_before_retry 3	#表示重试间隔
	 44                 connect_port 80		#检测端口
	 45         }       
	 46     }   
	 47     real_server 192.168.10.65 80 {
	 48           weight 1 
	 49            TCP_CHECK {
	 50                   connect_timeout 3
	 51                   nb_get_retry 3
	 52                   delay_before_retry 3
	 53                   connect_port 80
	 54           }       
	 55       }   
	 56 }
	其余的模板删除
[root@client10 ~]# systemctl restart keepalived
[root@client10 ~]# systemctl enable keepalived

[root@client10 keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.111:80 rr

realservem 没有启动httpd,所以这里看不到ip

三、配置备用节点client20

安装ipvsadm
安装keepalived
从client10上拷贝配置文件到client20
[root@client10 ]# scp /etc/keepalived/keepalived.conf 	192.168.10.63:/etc/keepalived/
router_id client20		#运行 keepalived 的机器标示符
vrrp_instance apache {
      state BACKUP	#当前 LVS 状态为备用分发器
      interface ens32	#修改成本机网卡名
      virtual_router_id 51
      priority 90		 #LVS 优先级,备的要比主的小
[root@client20 ~]# systemctl restart keepalived
[root@client20 ~]# systemctl enable keepalived

四、测试LVS IP漂移

[root@client10 ~]# systemctl stop keepalived
[root@client20 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:8b:98:8f brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.63/16 brd 192.168.255.255 scope global noprefixroute ens32
       valid_lft forever preferred_lft forever
    inet 192.168.10.111/32 scope global ens32   #.111的ip漂移到了client20上
       valid_lft forever preferred_lft forever
    inet6 fe80::31c9:6153:d0f6:bc68/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

五、配置RS1

[root@client30 ~]# vim /etc/init.d/lvsrsdr 		#写一个配置RS的脚本
[root@client30 ~]# cat !$
cat /etc/init.d/lvsrsdr
#!/bin/bash
#description:start relserver
VIP=192.168.10.111	#定义变量			
source /etc/init.d/functions                #加载环境变量(可以加载所有的环境变量)
case $1 in
start)
        echo 'start LVS of Realserver DR'
        /sbin/ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255 up
        /sbin/route add -host $VIP dev lo:1
        echo '1' > /proc/sys/net/ipv4/conf/lo/arp_ignore     
        echo '2' > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo '1' > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo '2' > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
stop)
        /sbin/ifconfig lo:1 down
        echo 'Close LVS of Realserver DR'
        echo '0' > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo '0' > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo '0' > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo '0' > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
*)
        echo "Usage:$0 (start|stop)"
exit 1
esac


[root@client30 ~]# chmod +x /etc/init.d/lvsrsdr 		#给可执行权限
[root@client30 ~]# /etc/init.d/lvsrsdr start			#启动脚本
Starting lvsrsdr (via systemctl):                          [  OK  ]
[root@client30 ~]# ifconfig -a
......
lo:1: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.10.111  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

[root@client30 ~]# yum install -y httpd
[root@client30 ~]# echo 192.168.10.64 > /var/www/html/index.html
[root@client30 ~]# systemctl restart httpd.service

六、配置RS2

从client30上拷贝脚本到client40
[root@client30 ~]# scp /etc/init.d/lvsrsdr 192.168.10.65:/etc/init.d/
[root@client40 ~]# chmod +x /etc/init.d/lvsrsdr 
[root@client40 ~]# /etc/init.d/lvsrsdr start
Starting lvsrsdr (via systemctl):                          [  OK  ]
[root@client40 ~]# ifconfig -a
......
lo:1: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.10.111  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
[root@client40 ~]# yum install -y httpd
[root@client40 ~]# echo 192.168.10.65 > /var/www/html/index.html
[root@client40 ~]# systemctl restart httpd

七、测试

测试主备切换,在主上查看client10上的状态
[root@client10 ~]# ip addr
......
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:6c:b9:62 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.62/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.111/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe6c:b962/64 scope link 
       valid_lft forever preferred_lft forever

在备上查看client20的状态
[root@client20 ~]# ip addr
......
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:8b:98:8f brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.63/16 brd 192.168.255.255 scope global noprefixroute ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::31c9:6153:d0f6:bc68/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

在client10上停掉keepalived,模拟故障,再查看client20
[root@client10 ~]# systemctl stop keepalived.service
[root@client20 ~]# ip addr
......
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:8b:98:8f brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.63/16 brd 192.168.255.255 scope global noprefixroute ens32
       valid_lft forever preferred_lft forever
    inet 192.168.10.111/32 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::31c9:6153:d0f6:bc68/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

[root@client10 ~]# systemctl restart keepalived.service
重启主上的keepalived,VIP则会自动从备分发器转到主分发器上,因为备的优先级低。

测试RS容错,停掉client40上的httpd之后在client10查看
[root@client10 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.10.111:80 rr
  -> 192.168.10.64:80             Route   1      0          0         
client40的ip不在列表中了

[root@client10 ~]# tail -f /var/log/messages
查看日志,可以看到192.168.10.65重连三次失败后被剔除

配置文件模板详解
! Configuration File for keepalived
global_defs {
   notification_email {
     root@localhost                       #设置报警邮件地址,即收件人地址
   }
   notification_email_from admin@localhost  #设置邮件的发送地址
   smtp_server 127.0.0.1                    #设置smtp server的ip地址
   smtp_connect_timeout 30                  #设置连接smtp server的超时时间
   router_id LTT                            #表示运行keepalived服务器的一个标识名字可以随便取,
   名字会显示在发邮件时邮件的主题信息
}
vrrp_instance IN_1 {
    state MASTER               			  #指定keepalived的角色,此服务为master
    interface ens160                        #指定监测网络的接口
    virtual_router_id 22                    #虚拟路由的标识
    priority 100                            #定义优先级,数字越大优先级越高,1-255之间
    advert_int 1                            #设置同步检查的时间间隔,单位是秒
    authentication {                        #设置验证类型
        auth_type PASS                      #验证类型为PASS
        auth_pass aaaa                      #验证的密码
    }
    virtual_ipaddress {
        192.168.2.111                        #设置虚拟IP
    }
}
virtual_server 192.168.2.111 80 {            #定义虚拟服务器,需指定虚拟ip和端口
    delay_loop 6                            #设置健康检查时间,单位为秒
    lb_algo wlc                             #设置负载调度算法,此处为加权轮叫算法
    lb_kind DR                              #设置LVS实现负载均衡的模式
    persistence_timeout 120                 #设置会话持续时间
    nat_mask 255.255.255.0                  # 设置子网掩码
    protocol TCP                            #设置转发协议的类型
    real_server 192.168.2.64 80 {           #定义realserver,需指定ip和端口
        weight 1                            #指定权重
        HTTP_GET {                          #设置检测后端realserver的方式为获取http协议报文
            url {
              path /
              status_code 200               #状态码为200则证明后端服务器是在线的
           }
            connect_timeout 3               #设置超时时间
            nb_get_retry 3                  #设置超时时候重试几次
            delay_before_retry 3            #在重试的时候的时间间隔
        }
    }
virtual_server 192.168.2.111 8090 {          #定义虚拟服务器,需指定虚拟ip和端口
    delay_loop 6                            #设置健康检查时间,单位为秒
    lb_algo wlc                             #设置负载调度算法,此处为加权轮叫算法
    lb_kind DR                              #设置LVS实现负载均衡的模式
    persistence_timeout 120                 #设置会话持续时间
    nat_mask 255.255.255.0                  #设置子网掩码
    protocol TCP                            #设置转发协议的类型
    real_server 192.168.2.90 80 {           #定义realserver,需指定ip和端口
        weight 1                            #指定权重
        HTTP_GET {               #设置检测后端realserver的方式为获取http协议报文
            url {
              path /
              status_code 200     #状态码为200则证明后端服务器是在线的
           }
            connect_timeout 3             #设置超时时间
            nb_get_retry 3                 #设置超时时候重试几次
            delay_before_retry 3            #在重试的时候的时间间隔
        }
}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值