二、LVS+Keepalived群集部署
实验拓扑
主DR服务器:7-4 192.168.109.134
备DR服务器:7-5 192.168.109.135
web1:7-2 192.168.109.132
web2:7-3 192.168.109.133
客户端:w7 192.168.109.200
#每台机子关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld setenforce 0
2.1 配置负载均衡器(主备相同)
主DR服务器:7-4 192.168.109.134
备DR服务器:7-5 192.168.109.135
1.下载相应的软件包
yum install -y ipvsadm keepalived
2.修改keepalived配置文件
#找到配置文件位置 [root@localhost ~]# rpm -qc keepalived /etc/keepalived/keepalived.conf /etc/sysconfig/keepalived [root@localhost ~]# cd /etc/keepalived/ [root@localhost keepalived]# ls keepalived.conf #备份配置文件 [root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak [root@localhost keepalived]# ls keepalived.conf keepalived.conf.bak #修改配置文件 [root@localhost keepalived]# vim keepalived.conf ! Configuration File for keepalived #全局配置 global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 #将邮箱地址改为本地 smtp_connect_timeout 30 router_id LVS_01 #设置名称,便于区分 #vrrp_skip_check_adv_addr #将四行vrrp的配置删掉 #vrrp_strict #vrrp_garp_interval 0 #vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER #主备服务器的名称,但真正区分主备是用优先级区分 interface ens33 #改为ens33,跟自己的机子对应 virtual_router_id 51 #主备保持一致,默认51 nopreempt #添加这行,意味着非抢占模式,抢占模式下宕机后恢复的主服务器会将备服务器挤掉继续自己执行, #来回切换会造成脑裂,出现网络波动现象 priority 100 #优先级越大就是主 advert_int 1 #报文间隔时间 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.109.188 } } #配置虚拟服务器实例 #virtual_server 192.168.200.100 443 { #指定虚拟IP和端口号,443是https协议,80是http协议 virtual_server 192.168.109.188 80 { delay_loop 6 #健康检查的时间,检查节点服务器 lb_algo rr #调度算法,默认轮询算法 lb_kind DR #LVS工作模式,默认是NAT,我们实验用DR persistence_timeout 0 #长连接,默认50s,不想这么长改成0 protocol TCP #健康检查的协议 #配置真实服务器 real_server 192.168.109.132 80 { weight 1 #权重,采用加权轮询算法时要改 # SSL_GET { #健检查的方式,默认SSL_GET ,我们采用TCP_CHECK #url { # path / # digest ff20ad2481f97b1754ef3e12ecd3a9cc # } # url { # path /mrtg/ # digest 9b3a0c85a887a256d6939da88aabd8cd # } TCP_CHECK{ connect_port 80#指定端口号 connect_timeout 3 #超时时间 nb_get_retry 3 #重试次数 delay_before_retry 3 #间隔时间 } } #再添加一台真实服务器配置 real_server 192.168.109.133 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } #下面其余的内容全部删掉 #保存后重启 [root@localhost keepalived]# systemctl restart keepalived.service #传给备服务器 [root@localhost keepalived]# scp keepalived.conf 192.168.109.135:`pwd` #开启ipvsadm工具(两台一样) [root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm [root@localhost ~]# systemctl start ipvsadm [root@localhost ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.109.188:80 rr -> 192.168.109.132:80 Route 1 0 0 -> 192.168.109.133:80 Route 1 0 0
主要改的地方:
邮箱地址
router_id
状态:主MASTER 备BACKUP
网卡名称
keepalived是通过ip命令生成VIP,使用ip命令查看
3.调整 proc 响应参数
#调整 proc 响应参数,关闭Linux 内核的重定向参数响应 vim /etc/sysctl.conf ...... net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 ...... sysctl -p
2.2 http服务器配置
web服务器1centos7-2 192.168.109.132
web服务器2centos7-3 192.168.109.133
#下载http服务并开启 yum install -y httpd systemctl start httpd systemctl enable httpd #web1加入这行网页内容 echo "<h1>web1</h1>" > /var/www/html/index.html #web2加入这行网页内容 echo "<h1>web2</h1>" > /var/www/html/index.html
(1)配置虚拟IP地址(VIP:192.168.109.188)
#此地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口1o:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地,以避免通信紊乱。
[root@web1 ~]# cd /etc/sysconfig/network-scripts/ [root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0 [root@web1 network-scripts]# vim ifcfg-lo:0 DEVICE=lo:0 ONBOOT=yes IPADDR=192.168.109.188 NETMASK=255.255.255.255 #注意:子网掩码必须全为1 [root@web1 network-scripts]# ifup lo:0 #开启虚拟网卡 [root@web1 network-scripts]# ifconfig lo:0 lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 192.168.109.188 netmask 255.255.255.255 loop txqueuelen 1 (Local Loopback) #临时添加路由 [root@web1 network-scripts]# route add -host 192.168.109.188 dev lo:0 #-host 添加一个主机 #-net添加一个网段 #dev代表出站网卡 [root@web1 network-scripts]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.109.2 0.0.0.0 UG 100 0 0 ens33 192.168.109.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 192.168.109.188 0.0.0.0 255.255.255.255 UH 0 0 0 lo 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 #开机自动加入路由 [root@web1 network-scripts]# vim /etc/rc.local [root@web1 network-scripts]# cat /etc/rc.local |grep route /sbin/route add -host 192.168.109.188 dev lo:0 [root@web1 network-scripts]# chmod +x /etc/rc.d/rc.local
(2)调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突
vim /etc/sysctl.conf ...... net.ipv4.conf.lo.arp_ignore=1 #系统只响应目的IP为本地IP的ARP请求 net.ipv4.conf.lo.arp_announce=2 #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址 net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.all.arp_announce=2 ...... sysctl -p
2.3 客户端测试
总结
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个浮动IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管浮动IP,继续提供服务,从而保证了高可用性。