一、keepalivedi简介
1.keepalived原理
利用VRRP协议原理,主备模式通过优先级判断谁是主谁是备。备机是否切换为主机依靠的是主备之间的心跳线。
2. keepalived作用
保证负载均衡的高可用性,完美解决了LVS所有问题,可以检查后端服务器池种的服务器健康。
3. keepalived工作模式
抢占模式(默认模式):主坏了之后直接切换备为主服务器,主修好后直接抢占回主服务器。
不抢占模式:主坏了之后切换备为主服务器,原来的主服务器修好也不会再抢占为主服务器。
延时抢占模式:主坏了之后直接切换备为主服务器,主修好后检查是否完全稳定后再抢占回主服务器。
心跳线模式:主备服务器之间心跳线模式默认是广播模式,可以根据需求改为组播或者单播模式。
4. keepalived优化及问题
默认是抢占模式,根据需求改为非抢占模式或延时抢占模式。
心跳线默认是广播模式,根据需求改为组播或单播模式。
日志分隔:keepalived的默认日志在/var/log/message里,通过修改 /etc/sysconfig/keepalived中参数KEEPALIVED_OPTIONS="-D -S local数字" ,并利用rsyslog将日志分隔出来。
脑裂:备机由于种种原因收不到主机发送的心跳线,导致用户不知道访问那个服务器。例如:防火墙拦截心跳线广播报文、主备之间物理网线心跳线断裂等。
二、LVS+keepalived架构
1. 实验目的
①通过客户端访问LVS高可用集群虚IP 192.168.30.100可以访问到NFS业务服务器的内容。
②当LVS_01负载均衡断开服务后,LVS_02可以进行备用,不影响用户访问业务。
③当WEB1或者WEB2关闭服务后,另外一台服务器可以正常访问业务。
2. 实验拓扑
3. 实验准备
①1台客户机用于访问业务,IP地址192.168.30.10。
②2台LVS负载均衡,并使用keepalived做成高可用,LVS_01 IP地址:192.168.30.14,LVS_02 IP地址:192.168.30.15。
③2台nginx web代理服务器安装nginx并将nfs服务器内容挂载到默认目录,web1 IP地址:192.168.30.12,web2 IP地址:192.168.30.13。
④NFS业务服务器创建文件夹共享给web1和web2,内容为"this is nfs share"
4. 实验过程
4.1 关闭防火墙和安全防护模块
1 systemctl stop firewalld.service 2 setenforce 0
4.2 NFS业务服务器配置,创建共享文件夹 /share,并在/share文件夹中创建index.html文件,输入内容为"this is nfs share"
1 mkdir /share 2 #创建共享文件夹 3 echo "this is nfs share">/share/index.html 4 #创建共享文件内容 5 vim /etc/exports 6 内容: 7 /share 192.168.30.0/24(rw,sync) 8 #配置共享文件夹/share 共享网段192.168.0.0/24 rw可读写,sync并同步 9 systemctl start nfs 10 #启动ngs服务 11 exportfs -vr 12 显示内容:exporting 192.168.30.0/24:/share 13 #热加载并查看本机nfs共享
4.3 配置web服务器,安装nginx并挂载NFS到默认根目录下并创建虚拟网卡lo:0配置ip192.168.30.100。
1 web1和web2执行: 2 yum install epel-release -y 3 #先安装额外源 4 yum install nginx -y 5 #yum安装nginx 6 systemctl start nginx 7 #开启nginx服务 8 showmount -e 192.168.30.11 9 显示内容:/share 192.168.30.0/24 10 #查看此服务器是否有NFS共享 11 rpm ql nginx |grep html 12 #查看nginx默认web根目录 13 mount 192.168.30.11:/share /usr/share/nginx/html/ 14 #临时挂载 nfs服务器的/share文件夹到/usr/share/nginx/html/目录下,所以问/usr/share/nginx/html/的内容即访问/share内容 15 curl 192.168.30.13 16 curl 192.168.30.12 17 #显示内容this is nfs share 18 #分别访问俩个web服务器内容,查看是否挂载nfs成功显示网页内容。 19 ifconfig lo:0 192.168.30.100 netmask 255.255.255.2555 20 #添加虚拟网卡lo:0并配置ip 21 route add -host 192.168.30.100 dev lo:0 22 #添加路由192.168.30.100走lo:0网卡 23 vim /etc/sysctl.conf 24 #编辑内核参数,添加内容 25 net.ipv4.conf.all.arp_ignore = 1 26 net.ipv4.conf.all.arp_announce = 2 27 net.ipv4.conf.default.arp_ignore = 1 28 net.ipv4.conf.default.arp_announce = 2 29 net.ipv4.conf.lo.arp_ignore = 1 30 net.ipv4.conf.lo.arp_announce = 2 31 #保存退出后查看配置 32 sysctl -p 33 #查看内核参数是否配置完成
4.4 LVS_01和LVS_02安装ipvsadm并启动服务。
1 yum install ipvsadm -y 2 #yum安装ipvsadm服务,即LVS负载均衡的真实服务名 3 systemctl start ipvsadm.service 4 #开启ipvsadm服务,此步骤启动服务报错 5 systemctl status ipvsadm.service>1.txt 6 cat 1.txt 7 #将ipvsadm服务启动报错提示导给1.txt文件并查看。内容如下截图 8 ipvsadm-save>/etc/sysconfig/ipvsadm 9 #报错信息提示是没有/etc/sysconfig/ipvsadm文件,解决方法是将ipvsadm保存到/etc/sysconfig/ipvsadm文件下。 10 systemctl restart ipvsadm.service 11 #重新启动ipvsadm成功
4.5 LVS_01和LVS_02安装keepalived服务并配置启动.
1 yum install keepalived.x86_64 -y 2 #安装keepalived.x86_64 3 vim /etc/sysctl.conf 4 #编辑内核文件 5 添加内容: 6 net.ipv4.conf.all.send_redirects = 0 7 net.ipv4.conf.default.send_redirects = 0 8 net.ipv4.conf.ens33.send_redirects = 0 9 #保存退出 10 sysctl -p 11 #查看添加内核内容有则成功 12 vim keepalived.conf 13 #编辑配置文件 14 修改内容: 15 global_defs模块中 16 smtp_server 127.0.0.1 17 #改为127.0.0.1即改为本机 18 router_id LVS_01 19 #第一条LVS名称改为LVS_01 20 #vrrp_skip_check_adv_addr 21 #vrrp_strict 22 #vrrp_garp_interval 0 23 #vrrp_gna_interval 0 24 #以上4行安全机制添加#号注释掉 25 virtual_ipaddress { 26 192.168.30.100 27 } 28 #虚拟主机地址改为要配置的虚拟ip,可配置多个,若只写一个将模板的其他2个删除。 29 virtual_server 192.168.30.100 80 { 30 #虚拟ip地址改为配置的虚拟ip和web服务端口号 31 delay_loop 6 32 lb_algo rr 33 lb_kind DR 34 #模式改为DR模式即直连模式 35 persistence_timeout 50 36 protocol TCP 37 38 real_server 192.168.30.12 80 { 39 #第一台真实ip地址和web服务端口号 40 weight 1 41 TCP_CHECK { 42 #添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器 43 connect_port 80 44 #添加连接端口80 45 connect_timeout 3 46 nb_get_retry 3 47 delay_before_retry 3 48 } 49 } 50 real_server 192.168.30.13 80 { 51 #第二台真实ip地址和web服务端口号 52 weight 1 53 TCP_CHECK { 54 #添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器 55 connect_port 80 56 #添加连接端口80 57 connect_timeout 3 58 nb_get_retry 3 59 delay_before_retry 3 60 } 61 } 62 } 63 #俩台真实服务器后的所有内容删除即可,修改完成后保存退出。完整配置文件如下图 64 scp keepalived.conf 192.168.30.15:/etc/keepalived/ 65 LVS_02配置文件修改: 66 #将配置好的配置文件传到LVS_02服务器上 67 #第一步修改 router_id LVS_02 名称改为LVS_02 68 #第二步要修改vrrp_instance VI_1模块中的state为BACKUP,和priority 90改为比主LVS优先级低的等级 69 #其他不用修改保存即可 70 systemctl restart ipvsadm keepalived 71 #重启服务 72 ipvsadm -ln 73 显示内容: 74 TCP 192.168.30.100:80 rr persistent 50 75 -> 192.168.30.12:80 Route 1 0 0 76 -> 192.168.30.13:80 Route 1 0 1 77 #查看有2个真实服务器的ip即可。
4.5 实验结果检验
在客户机上curl 192.168.30.100查看内容是否为nfs服务器共享的内容“this is nfs share”
关闭LVS_01测试查看内容是否还为nfs服务器共享的内容“this is nfs share”
关闭nginx web1服务器测试查看内容是否还为nfs服务器共享的内容“this is nfs share”