作用介绍:
对外提供统一的一个虚拟IP服务,对内多台机器实现高可用的负载均衡,Keepalived无win安装版。
硬件环境:
硬件:两台机器安装win7的32位系统,上面分别安装VMware上装CentOS
软件环境:
win7上下载Nginx32位版本(也可是一个web服务软件,例如netbox)
CentOS7中安装配置Keepalived,让其产生一个虚拟IP地址,指向Nginx服务
安装计划:
虚拟IP192.168.1.200,指向win7A机或B机的真实IP
win7A机192.168.1.11承担NginxA服务 CertOS7A机192.168.1.101承担keepalived主要服务
win7B机192.168.1.51承担NginxB服务 CertOS7B机192.168.1.105承担keepalived备用服务
--------------------------------
实际实验情况在win7A的VMware中同时安装两个CertOS7,B机VMware未装,后面有说明,若是在CentOS中直接安装Keepalived和Nginx不装虚拟网卡,不使用win则无任何问题,全部测试通过。
--------------------------------
在配置过程中参考了网络上的很多教程,需要在win7A和B机分别添加硬件(微软的)Microsoft Loopback Adapter虚拟网卡,然后再配置虚拟IP192.168.1.200/32,在网络“更改适配器设置”右击本地连接改名为“local”,虚拟网卡改名为“realserver”,并设置两块网卡的weakhostreceive和weakhostsend为启用,可以把下面的脚本保存为bat文件,双击运行,也可在cmd命令下分条运行。
@echo off
netsh interface ipv4 set interface "realserver" weakhostreceive=enabled
netsh interface ipv4 set interface "realserver" weakhostsend=enabled
netsh interface ipv4 set interface "local" weakhostreceive=enabled
netsh interface ipv4 set interface "local" weakhostsend=enabled
pause
最后在所有四个操作系统配置完成后测试,虚拟IP漂移正常,Ping也正常,但是在win7的B机win中每隔一段时间就会跳出“IP地址冲突”,就在win7B机的win上必须把虚拟网卡禁用并再次启用一次才会正常,且所有服务在win7重启网卡前均不正常。
后来我把win7B机中的CentOS7关机,然后在win7A机中使用VMware的虚拟机克隆功能再次完整的复制了运行正常的CentOS7作为实验的B系统用(即win7A机VMware同时运行两个CentOS系统),同时Win7B机win系统保留,重新测试就没出现过IP地址冲突提示了,也不知道是什么原因。
由于Nginx配置在win7下,在配置keepalived时也没有检测Nginx服务是否正常,网络上的一些教程基本上是把Nginx和keepalived一并安装到CertOS7下,在keepalived配置文件中每隔几秒判断Nginx服务是否正常,若不正常自动启动Nginx等待几秒后再次判断Nginx服务,若还不正常自动停止本机的keepalived服务,另外一台keepalived机器根据设置的时间自动切换成主服务。
在CentOS7的A机主服务keepalived配置文件:
global_defs {
router_id NodeA
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
mcast_src_ip 192.168.1.101
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200
}
}
virtual_server 192.168.1.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.11 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.51 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
在CentOS7的B机备用服务keepalived配置文件:
global_defs {
router_id NodeB
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
mcast_src_ip 192.168.1.105
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200
}
}
virtual_server 192.168.1.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.11 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.51 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
启动停止重启查看服务命令:systemctl start/stop/restart/stauts keepalived
编辑配置文件命令:vi /etc/keepalived/keepalived.conf
保存:按Esc后输入:wq回车
查看IP地址的漂移情况:ip a回车
查看进程:ps aux|grep keepalived
--------------------------------**
关于在一个CentOS7上同时安装keepalived和Nginx的配置相关:
首先这两个系统上使用vi建立判断脚本文件,然后为该文件加入可执行权限
vi /etc/keepalived/check_nginx.sh然后输入以下
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ]
then
systemctl start nginx
sleep 3
if [ `ps -C nginx --no-header | sc -l` -eq 0 ]
then
systemctl stop keepalived
fi
fi
保存:按Esc后输入:wq回车,以下命令务必运行
chmod +x /etc/keepalived/check_nginx.sh
CentOS7A机的keepalived.conf
global_defs {
router_id NodeA
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
mcast_src_ip 192.168.1.101
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx
}
virtual_ipaddress {
192.168.1.200
}
}
virtual_server 192.168.1.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.101 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.105 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
CentOS7B机的keepalived.conf
global_defs {
router_id NodeB
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
mcast_src_ip 192.168.1.105
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx
}
virtual_ipaddress {
192.168.1.200
}
}
virtual_server 192.168.1.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.101 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.105 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
为什么win7虚拟网卡都开启,配置同一个虚拟IP(没有配置网关,子网掩码全为255),只是把CentOS全都移动到一台机器上IP就不冲突了呢~~~
本文介绍了如何在CentOS7中配置Keepalived以创建虚拟IP,并与Windows下的Nginx搭配,实现高可用负载均衡。在实验中,遇到了IP地址冲突的问题,通过克隆CentOS7实例解决了此问题。同时探讨了在Keepalived配置文件中检查Nginx服务状态的方法。

8271

被折叠的 条评论
为什么被折叠?



