本文共 6207 字,大约阅读时间需要 20 分钟。
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
实验需求
服务器主机 | IP: ( VIP:192.168.200.100) | 需要安装配置 |
---|---|---|
NFS共享服务器 | 192.168.100.100 | NFS共享存储 |
LVS主调度器 | 192.168.200.103 | keepalived 、ipvsadm |
LVS从调度器 | 192.168.200.104 | keepalived 、ipvsadm |
节点服务器1 | 192.168.200.101 /192.168.100.101 | httpd 、NFS |
节点服务器2 | 192.168.200.102 /192.168.100.102 | httpd 、NFS |
windows客户机 | 192.168.200.200 | 测试专用 |
主从调度服务器配置基本相同(不同之处已经标注)
# yum install keepalived ipvsadm -y
调整proc响应参数
# vi /etc/sysctl.conf net.ipv4.ip_forward=1 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 //proc响应关闭重定向功能// # sysctl -p //立即生效
配置虚拟VIP
# cd /etc/sysconfig/network-scripts# cp ifcfg-ens33 ifcfg-ens33:0# vim ifcfg-ens33:0 DEVICE=ens33:0 ONBOOT=yes IPADDR=192.168.200.100 NETMASK=255.255.255.255# ifup ens33:0 //启用虚拟IP
编写脚本方便管理
# cd /etc/init.d/ # vi dr.sh #!/bin/bash GW=192.168.200.1 VIP=192.168.200.100 RIP1=192.168.200.101 RIP2=192.168.200.102 case "$1" in start) /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm systemctl start ipvsadm /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up /sbin/route add -host $VIP dev ens33:0 /sbin/ipvsadm -A -t $VIP:80 -s rr /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g echo "ipvsadm starting --------------------[ok]" ;; stop) /sbin/ipvsadm -C systemctl stop ipvsadm ifconfig ens33:0 down route del $VIP echo "ipvsamd stoped----------------------[ok]" ;; status) if [ ! -e /var/lock/subsys/ipvsadm ];then 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部署
# vim /etc/keepalived/keepalived.conf global_defs {...smtp_server 127.0.0.1 #指向本地router_id LVS_01 #指定名称,备份服务器不同名称... }vrrp_instance VI_1 {state MASTER #备份服务器是BACKUPinterface ens33 #承载VIP的物理接口ens33virtual_router_id 10 # 组号 备份服务器相同...auth_pass abc123 #验证密码 备份服务器相同priority 100 #优先级 备份小于主...virtual_ipaddress {192.168.200.100 //指定VIP地址 }...virtual_server 192.168.200.100 80 { lb_kind DR //指定DR模式...real_server 192.168.200.101 80 { #web节点地址端口weight 1 #节点的权重TCP_CHECK { #健康检查方式 connect_port 80 #添加端口 connect_timeout 3 #连接超时 nb_get_retry 3 #重试次数 delay_before_retry 3 #重试间隔(秒)} } real_server 192.168.200.102 80 {weight 1TCP_CHECK { connect_port 80 #添加端口 connect_timeout 3 nb_get_retry 3 delay_before_retry 3} } }# systemctl start keepalived # ip addr show dev ens33:0 #查看虚拟网卡# systemctl stop firewalld.service #关防火墙# setenforce 0
考虑到数据的安全性,共享存储设备会放在内部的专用网络中
# systemctl stop firewalld.service //关防火墙# setenforce 0# yum install nfs-utils rpcbind -y //安装NFS服务# systemctl start rpcbind.service# systemctl start nfs.service # cd /opt | mkdir benet accp //创建共享目录(在实际工作中 还是要共享挂载磁盘阵列raid的目录)# vi /etc/exports /usr/share *(ro,sync) /opt/benet 192.168.100.0/24(rw,sync) /opt/accp 192.168.100.0/24(rw,sync) # exportfs -rv //发布共享
节点2服务器添加一个网卡 IP 设为192.168.100.102/24
# yum install nfs-utils rpcbind -y //安装NFS服务# mount.nfs 192.168.100.100:/opt/benet /var/www/html //节点1挂载NFS# mount.nfs 192.168.100.100:/opt/accp /var/www/html //节点2挂载NFS# yum install -y httpd #安装httpd服务# systemctl start httpd.service #启动httpd服务# systemctl stop firewalld.service #关防火墙# setenforce 0
两个节点服务器测试页面要不同
# echo "this is 7.1 web" > /var/www/html/index.html #节点服务器1# echo "this is 7.2 web" > /var/www/html/index.html #节点服务器2 (方便查看测试结果)
作用:仅发送web响应数据包的源地址
# cd /etc/sysconfig/network-scripts# cp ifcfg-lo ifcfg-lo:0# vim ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.200.100 NETMASK=255.255.255.255 ONBOOT=yes
调整proc响应
# cd /etc/init.d/ # vim web.sh #!/bin/bash VIP=192.168.200.100 case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /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 # ifup lo:0 //启用虚拟VIP # firefox "http://127.0.0.1/" & //火狐查看测试页 # service web.sh stop # service web.sh start //(建议重启服务)
测试
在windows7 浏览器输入 虚拟VIP 192.168.200.100 (多刷新几次可以看到节点1和节点2的测试页面为成功)
转载于:https://blog.51cto.com/13630803/2131530