LVS+keepalived 高可用群集
实验目的:
使用 keepalived 实现 LVS 双机热备。
实验环境:
主机 | 操作系统 | IP地址 | 主要软件 |
---|---|---|---|
LVS 负载调度器 | CentOS 7.3 x86_64 | 192.168.217.128 | keepalived |
LVS 负载调度器 | CentOS 7.3 x86_64 | 192.168.217.129 | keepalived |
web 服务器 1 | CentOS 7.3 x86_64 | 192.168.217.130 | http |
web 服务器 2 | CentOS 7.3 x86_64 | 192.168.217.131 | http |
NFS 共享储存 | CentOS 7.3 x86_64 | 192.168.217.132 | |
客户机 | Windows 7 | 192.168.217.133 |
配置 LVS 负载调度器
-
安装所需软件 ,添加虚拟网卡:
yum install keepalived ipvsadm -y #安装lvs管理工具和keepalived cd /etc/sysconfig/network-scripts/ cp ifcfg-ens32 ifcfg-ens32:0 #复制现有的网卡做虚拟网卡 ,添加以下内容 DEVICE=ens32:0 ONBOOT=yes IPADDR=192.168.217.10 #虚拟网卡地址 VIP NETMASK=255.255.255.0
ifup ens32:0 #开启虚拟网卡
-
开启路由转发功能:
vim /etc/sysctl.conf net.ipv4.ip_forward=1 #开启路由转发功能 #proc响应关闭重定向功能 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens32.send_redirects = 0
-
制作 ipvsadm 启动脚本:
modprobe ip_vs #加载LVS模板
cd /etc/init.d/ vim dr.sh #!/bin/bash GW=192.168.217.1 #网关 VIP=192.168.217.10 #虚拟IP RIP1=192.168.217.130 #web服务器1地址 RIP2=192.168.217.131 #web服务器2地址 case "$1" in start) /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm #在centos 7 以上的版本 需要保存策略 才能开启服务 systemctl start ipvsadm #开启服务 /sbin/ifconfig ens32:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up /sbin/route add -host $VIP dev ens32:0 #添加网段 /sbin/ipvsadm -A -t $VIP:80 -s rr #添加虚拟服务机 /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g #添加真实服务机 使用DR群集模式 /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g echo "ipvsadm starting --------------------[ok]" ;; stop) /sbin/ipvsadm -C #清除节点服务器 systemctl stop ipvsadm #关闭服务 ifconfig ens32:0 down #关闭虚拟网卡 route del $VIP #删除网段 echo "ipvsamd stoped----------------------[ok]" ;; status) if [ ! -e /var/lock/subsys/ipvsadm ];then #如果没有匹配到/var..../ipvsadm这个文件 则 stoped 否则 runing echo "ipvsadm stoped---------------" exit 1 else echo "ipvsamd Runing ---------[ok]" fi ;; *) echo "Usage: $0 {start|stop|status}" exit 1 esac exit 0
chmod +x dr.sh #添加权限 service dr.sh start #开启服务
注:可以不做 keepalived ,做 web 服务器 ,测试能否调度 。
-
配置 keepalived :
vim /etc/keepalived/keepalived.conf global_defs { ... smtp_server 127.0.0.1 #指向本地 router_id LVS_01 #主调度服务器名称,要与从调度服务器不同名称 ... } vrrp_instance VI_1 { state MASTER #从调度服务器是BACKUP virtual_router_id 10 #组号 主从组号要相同 ... auth_pass abc123 #验证密码 主从相同 priority 100 #优先级大的为主,从优先级不能大于主 ... virtual_ipaddress { #虚拟IP地址池 192.168.217.10 } ... virtual_server 192.168.217.10 80 { #虚拟IP地址 delay_loop 6 lb_algo rr #负载调度算法 lb_kind DR #群集模式 ... real_server 192.168.217.130 80 { #web服务器地址 weight 1 #权重 TCP_CHECK { #检查方式 connect_port 80 #监听端口 connect_timeout 3 #链接超时(秒) nb_get_retry 3 #重试次数 delay_before_retry 3 #重试间隔(秒) } } real_server 192.168.1217.131 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
systemctl start keepalived #开启服务 ip addr show dev ens32:0 #查看虚拟网卡 systemctl stop firewalld.service # 关闭防火墙
注:主、从调度器名称要不同、组号要相同、验证密码相同、优先级不能大于主 。
主从调度器除了以上不同 ,其他的配置都相同 ,IP地址也不同 ,虚拟IP相同 。
配置 web 服务器
-
安装服务 ,开启 、关闭 ,挂载 :
yum install http -y systemctl start httpd.service systemctl stop firewalld.service mount.nfs 192.168.217.132:/opt/benet /var/www/html #挂载nfs提供的文件 cd /var/www/html/ echo "this is accp web" > index.html #添加不同的测试首页 ,便于区别 。
-
配置虚拟IP :
cd /etc/sysconfig/network-scripts cp ifcfg-lo ifcfg-lo:0 #复制回环地址 做虚拟IP
vim ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.217.10 NETMASK=255.255.255.0 ONBOOT=yes
ifup lo:0 #启动虚拟地址 会把原本地址覆盖
-
制作接受调度服务器的脚本:
cd /etc/init.d/ vim web.sh #!/bin/bash VIP=192.168.217.10 case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP #开启虚拟IP /sbin/route add -host $VIP dev lo:0 #添加网段 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 sysctl -p >/dev/null 2>&1 echo "RealServer Start OK " ;; #以上内容是只接受调度服务器给予的回馈 stop) ifconfig lo:0 down route del $VIP /dev/null 2>&1 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 "RealServer Stopd" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
chmod +x web.sh service web.sh start
注:web 服务器配置都一样 。
测试
使用win访问虚拟IP ,如果没问题 ,把 LVS 负载调度器 1 的虚拟网关关掉 ,ifdown ens32:0 , 继续测试 ,如果还能访问 ,则群集搭建成功 。
注:如果刷新不出 ,可以重启ipvsadm 服务 ,或者清除浏览器缓存 。
注:如果有错误的地方 ,麻烦指出 。谢谢观赏
原文地址:http://blog.51cto.com/13640803/2131617
时间: 2024-10-07 06:13:21