Keepalived主主虚拟路由器与虚拟服务器

![在这里插入图片描述](https://img-blog.csdnimg.cn/2020070114005098.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmd5ZTE5ODlfMDIyNg==,size_16,color_FFFFFF,t_70#pic_center)
Keepalived主主虚拟路由器与虚拟服务器
Keepalived主主虚拟路由器与虚拟服务器与Keepalived主从虚拟路由器与虚拟服务器配置差别不是很大,主主架构比主从架构多了一个vrrp_instance{}配置段和一个virtual_server {}配置段。
keepalived简介:
Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、
第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,
负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。
keepalived:
vrrp协议的软件实现,原生设计的目的为了高可用ipvs服务:
	基于vrrp协议完成地址流动;
	为vip地址所在的节点生成ipvs规则(在配置文件中预先定义);
	为ipvs集群的各RS做健康状态检测;
	基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务;
组件:
核心组件:
	vrrp stack
	ipvs wrapper
	checkers
控制组件:
	配置文件分析器
	IO复用器
	内存管理组件
HA Cluster的配置前提:
 (1) 各节点时间必须同步;
		ntp, chrony
 (2) 确保iptables及selinux不会成为阻碍;
 (3) 各节点之间可通过主机名互相通信(对KA并非必须);
		建议使用/etc/hosts文件实现; 
 (4) 确保各节点的用于集群服务的接口支持MULTICAST通信;
		D类:224-239;
程序环境:
主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
配置文件组件部分:
	TOP HIERACHY
	GLOBAL CONFIGURATION
		Global definitions
		Static routes/addresses
	VRRPD CONFIGURATION
		VRRP synchronization group(s):vrrp同步组;
		VRRP instance(s):每个vrrp instance即一个vrrp路由器;
	LVS CONFIGURATION
		Virtual server group(s)
		Virtual server(s):ipvs集群的vs和rs;用作定义虚拟服务器
准备:四台PC,其中两台作为实验的虚拟路由器的物理路由器(Director),两台用作RS。
1、主主虚拟路由器、服务器,lvs-dr、sorry_server、优先级调整

在其中一台Director主机keepalived.conf文件内添加虚拟服务器配置段,如下:

! Configuration File for keepalived
global_defs {
    notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id HA2
   vrrp_mcast_group4 224.18.18.19
#改变状态后邮件提示
  	notify_master "/etc/keepalived/notify.sh master" 
	    notify_backup "/etc/keepalived/notify.sh backup"
	    notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_script chk_down { #定义脚本
	  script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
	  interval 1
	  weight -5
}
vrrp_script chk_nginx { #定义脚本
	  script "killall -0 nginx && exit 0 || exit 1"
	  interval 1
	  weight -5
}
vrrp_instance VI_1 { #实例化第一个虚拟路由参数
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 96
    advert_int 1 
    authentication {
        auth_type PASS
        auth_pass a1b2c3d4
    }
    virtual_ipaddress { #虚拟IP设置
    	192.168.1.201/24 dev ens33 label ens33:0
	}
	track_script { #调用检测脚本
	  	chk_down
  		chk_nginx
	}
}
virtual_server 192.168.1.201 80 { #第一个虚拟服务器
	  delay_loop 3
  	lb_algo rr
  	lb_kind DR
	   protocol TCP
	   sorry_server 127.0.0.1 80
  	real_server 192.168.1.107 80 {
	    	weight 1
     		HTTP_GET {
      			url {
	       			path / 
	       			status_code 200	
       			}
	       	connect_timeout 3
	       	nb_get_retry 3
     		delay_before_retry 3
   		}
	}
	 real_server 192.168.1.108 80 {
	   	weight 1
	  	HTTP_GET {
	    		url {
     				path / 
	       			status_code 200	
     			}
	  	connect_timeout 3
  		nb_get_retry 3
  		delay_before_retry 3
	  	}
	 }
}
vrrp_instance VI_2 { #实例化第二个虚拟路由参数
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1 
    authentication {
        auth_type PASS
        auth_pass A5B6C7D8
    }
    virtual_ipaddress { #第二个虚拟IP
    	192.168.1.202/24 dev ens33 label ens33:1
	}
	track_script {
	  	chk_down
	  	chk_nginx
	}
}
virtual_server 192.168.1.202 80 { #配置第二个虚拟服务器
  	delay_loop 3
	    lb_algo rr
	    lb_kind DR
   	protocol TCP
	    sorry_server 127.0.0.1 80
	    real_server 192.168.1.107 80 {
		        weight 1
     		HTTP_GET {
      			url {
      				path / 
	       			status_code 200	
	       		}
	       	connect_timeout 3
     		nb_get_retry 3
	       	delay_before_retry 3
    		}
	}
	   real_server 192.168.1.108 80 {
     		weight 1
	       	HTTP_GET {
	       		url {
	       			path / 
	       			status_code 200	
      			}
   		connect_timeout 3
	   	nb_get_retry 3
		    delay_before_retry 3
		}
	}
}

在另一台Director主机keepalived.conf文件内添加虚拟服务器配置段,如下:

! Configuration File for keepalived
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id HA1
   vrrp_mcast_group4 224.18.18.19

	notify_master "/etc/keepalived/notify.sh master"
	notify_backup "/etc/keepalived/notify.sh backup"
	notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_script chk_down {
	script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
	interval 1
	weight -5
}
vrrp_script chk_nginx {
	script "killall -0 nginx && exit 0 || exit 1"
	interval 1
	weight -5
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1 
    authentication {
        auth_type PASS
        auth_pass a1b2c3d4
    }
    virtual_ipaddress {
    	192.168.1.201/24 dev eth0 label eth0:0
	}
	track_script {
		chk_down
		chk_nginx
	}
}
virtual_server 192.168.1.201 80 {
	delay_loop 3
	lb_algo rr
	lb_kind DR
	protocol TCP
	sorry_server 127.0.0.1 80
	
	real_server 192.168.1.107 80 {
		weight 1
		HTTP_GET {
			url {
				path / 
				status_code 200	
			}
		connect_timeout 3
		nb_get_retry 3
		delay_before_retry 3
		}
	}
	real_server 192.168.1.108 80 {
		weight 1
		HTTP_GET {
			url {
				path / 
				status_code 200	
			}
		connect_timeout 3
		nb_get_retry 3
		delay_before_retry 3
		}
	}
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 96
    advert_int 1 
    authentication {
        auth_type PASS
        auth_pass A5B6C7D8
    }
    virtual_ipaddress {
    	192.168.1.202/24 dev eth0 label eth0:1
	}
	track_script {
		chk_down
		chk_nginx
	}
}
virtual_server 192.168.1.202 80 {
	delay_loop 3
	lb_algo rr
	lb_kind DR
	protocol TCP
	sorry_server 127.0.0.1 80
	real_server 192.168.1.107 80 {
		weight 1
		HTTP_GET {
			url {
				path / 
				status_code 200	
			}
		connect_timeout 3
		nb_get_retry 3
		delay_before_retry 3
		}
	}
	real_server 192.168.1.108 80 {
		weight 1
		HTTP_GET {
			url {
				path / 
				status_code 200	
			}
		connect_timeout 3
		nb_get_retry 3
		delay_before_retry 3
		}
	}
}

文件全部编写完成后,需要修改系统参数,(每个RS主机都要修改)
在两台RS主机分别设置如下:(注意要把iptables,selinux关闭,或对相关请求放行)

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore#请求目标只有是自己的才给予响应
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore#请求目标只有是自己的才给予响应
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce#不对网段进行自身信息通告
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce#不对网段进行自身信息通告
ifconfig lo:0 192.168.1.201 netmask 255.255.255.255 broadcast 192.168.1.201 up#在lo配置VIP地址,只广播信息给自身
route add -host 192.168.1.201 dev lo:0#添加lo:0 VIP地址路由,响应报文要经过lo:0网卡发送到物理网卡以原地址为192.16.1.201发送出去,
ifconfig lo:1 192.168.1.202 netmask 255.255.255.255 broadcast 192.168.1.202 up#在lo配置VIP地址,只广播信息给自身,这里注意lo:0已被201占用,这里使用lo:1
route add -host 192.168.1.202 dev lo:1#添加lo:1VIP地址路由,响应报文要经过lo:1网卡发送到物理网卡以原地址为192.16.1.202发送出去,
启动Director主机的keepalived服务。
启动Director主机的nginx服务,提供宕机后的状态页。
启动RS主机的httpd服务,需要在站点根目录下建立index.html测试页,。

查看2个Director网络状态:
这里写图片描述

这里写图片描述
tcpdump -i ens33 -nn host 224.18.18.19监测组播信息
这里写图片描述
根据keepalived配置参数自动生成ipvsadm策略:
这里写图片描述

这里写图片描述
停掉一个Director的keepalived服务:
这里写图片描述
模型配置如下图:
这里写图片描述
使用浏览器测试:
这里写图片描述

这里写图片描述
把RS两台主机httpd服务停掉后访问:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值