Board logo

标题: Keepalived+LVS [打印本页]

作者: admin    时间: 2020-7-27 12:42     标题: Keepalived+LVS

LVS(Linux Virtual Server,Linux虚拟服务器)是一种群集技术。 负载均衡群集的分层结构: 负载调度器,这是访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP地址,也称为群集IP地址。通常会配置主、备两台调度服务器实现热备份,当主调度服务器失效以后平滑换至备用调度服务器,确保高可用性。 服务器池,群集所提供的应用服务(如HTTP、FTP等等)由服务器池承担,其中的每个节点具有独立的RIP(真实IP)地址,只处理调度服务器分发过来的客户机请求。当某个节点暂时失效时,负载调度服务器的容错机制会将其隔离,等待错误排除后再重新纳入服务器池。 共享存储,为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性。在Linux/UNIX环境中,共享存储可以使用NAS设备,或者提供NFS共享服务的专用服务器。 负载均衡的工作模式: 直接路由,简称DR模式,采用半开放式的网络结构,各节点与调度服务器在同一个物理网络(内网)。负载调度服务器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。 LVS的调度算法: 调度器把客户端发来的请求分发给后端的真实服务器,这是依靠预先设定好的调度算法实现的,调度算法主要有8种。 带权重的轮询调度(WRR):权重越高的服务器被分配到的请求就越多,这样后端服务器性能不一致时,就可以给配置低的服务器较小的权重。 最小连接调度(LC):这种算法会根据各真实服务器上的连接数来决定把新的请求分配给谁,连接数少说明服务器是空闲的,这样把新的请求分配到空闲服务器上才更加合理。 带权重最小连接调度(WLC):在最小连接调度的基础上再增加一个权重设置,这样可以人为地控制哪些服务器上多分配请求,哪些少分配请求。 NFS共享存储服务: NFS是一种基于TCP/IP传输的网络文件系统协议,通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。 ###################################### ###################################### 主调度器master:192.168.168.130/24 master的操作系统为 CentOS release 6.9 (Final) 使用VIP:192.168.168.180 web-1: 192.168.168.135 web-2: 192.168.168.154 图片1.png 备注:所有服务器都要在同一内网里。 master的配置:(实验中用的是本地光盘YUM源) yum -y install gcc-c++ vim yum -y install kernel-devel openssl-devel popt-devel yum -y install ipvsadm* 查看系统的内核版本: [root@master ~]# uname -r 2.6.32-696.el6.x86_64 下载keepalived-1.2.24.tar.gz:https://pan.baidu.com/s/1w3Nv9DhaErcp1HK7WeDinw 提取码:p2it 编译安装Keepalived: tar -zxvf keepalived-1.2.24.tar.gz -C /usr/local cd /usr/local/keepalived-1.2.24/ ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-696.el6.x86_64/ make && make install master的keepalived配置文件: cat >/etc/keepalived/keepalived.conf<< EOF ! Configuration File for keepalived global_defs { router_id Master ## 每个参与热备的调度器都要指定不同的名字 } vrrp_instance VI_1 { state MASTER ## 热备状态,MASTER表示主调度器 interface eth0 ## 承载VIP地址的物理接口 virtual_router_id 1 ## 虚拟路由器的ID,每个热备组保持一致 priority 100 ## 优先级,数值越大,优先级越高 advert_int 1 authentication { auth_type PASS auth_pass 888 ## 自定义密码,密码要一致 } virtual_ipaddress { 192.168.168.180 ## 指定虚拟IP地址 } virtual_ipaddress { 192.168.168.181 ## 可以有多个虚拟IP地址 } } EOF 启动Keepalived: chmod a+x /etc/init.d/keepalived chkconfig --add keepalived chkconfig --level 35 keepalived on service keepalived start 验证: [root@master ~]# ip addr show dev eth0 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:2b:17:3a brd ff:ff:ff:ff:ff:ff inet 192.168.168.130/24 brd 192.168.168.255 scope global eth0 inet 192.168.168.180/32 scope global eth0 inet 192.168.168.181/32 scope global eth0 inet6 fe80::20c:29ff:fe2b:173a/64 scope link valid_lft forever preferred_lft forever 以下是做Apache/Nginx的集群,使用TCP 80端口。 master和 slave在Web服务器池的配置是一样的: cat >>/etc/keepalived/keepalived.conf<< EOF virtual_server 192.168.168.180 80 { protocol TCP ## 用TCP协议检查realserver的状态 delay_loop 10 ## 每隔10秒检查realserver的状态 lb_algo wlc ## LVS算法 lb_kind DR ## LVS模式 persistence_timeout 60 ## 同一IP的连接60秒内分配到同一台realserver; ## 假如60秒内有任何操作,则客户端始终在同一台Web服务器上; ## 假如60秒内没有任何操作,与客户端的连接会中断!! real_server 192.168.168.135 80 { weight 100 ## 权重 TCP_CHECK { connect_timeout 10 ## 10秒无响应视为超时 connect_port 80 nb_get_retry 3 delay_before_retry 4 } } real_server 192.168.168.154 80 { weight 100 ## 权重 TCP_CHECK { connect_timeout 10 ## 10秒无响应视为超时 connect_port 80 nb_get_retry 3 delay_before_retry 4 } } } EOF 重启Keepalived: service keepalived restart 添加虚拟网卡: [root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0:0 DEVICE=eth0:0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.168.180 NETMASK=255.255.255.255 ### [root@master ~]# route add -host 192.168.168.180 dev eth0 echo "route add -host 192.168.168.180 dev eth0" >> /etc/rc.local echo "net.ipv4.conf.all.send_redirects = 0">> /etc/sysctl.conf echo "net.ipv4.conf.default.send_redirects = 0">>/etc/sysctl.conf echo "net.ipv4.conf.eth0.send_redirects = 0">>/etc/sysctl.conf sysctl -p modprobe ip_vs 重启网络服务: [root@master ~]# service network stop;service network start 创建虚拟服务器: ipvsadm -A -t 192.168.168.180:80 -s wlc 添加服务器节点: ipvsadm -a -t 192.168.168.180:80 -r 192.168.168.135:80 -g -w 100 ipvsadm -a -t 192.168.168.180:80 -r 192.168.168.154:80 -g -w 100 备注,删除虚拟服务器: ipvsadm -D -t 192.168.168.180:80 查看节点状态:( ipvsadm -ln ) 图片2.png 保存负载分配策略: [root@master ~]# service ipvsadm save ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [确定] 确定保存结果: [root@master ~]# cat /etc/sysconfig/ipvsadm -A -t 192.168.168.180:80 -s wlc -a -t 192.168.168.180:80 -r 192.168.168.135:80 -g -w 100 -a -t 192.168.168.180:80 -r 192.168.168.154:80 -g -w 100 开机自动运行ipvsadm: chkconfig --level 35 ipvsadm on 重启ipvsadm、keepalived: service ipvsadm restart service keepalived restart 防火墙开启 TCP 80 端口: iptables -I INPUT -p tcp --dport 80 -j ACCEPT iptables-save > /etc/sysconfig/iptables ###################################### ###################################### web-1的操作系统为 Oracle Linux Server release 6.9 web-2的操作系统为 CentOS Linux release 8.2.2004 (Core) web-1的服务器配置: 笺注:Apache或Nginx的安装这里就省略了 添加虚拟网卡: [root@oracle-linux6 ~]# vi /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.168.180 NETMASK=255.255.255.255 重启网络服务: [root@oracle-linux6 ~]# service network restart ### [root@oracle-linux6 ~]# route add -host 192.168.168.180 dev lo:0 echo "route add -host 192.168.168.180 dev lo:0">> /etc/rc.local echo "net.ipv4.conf.all.arp_ignore = 1">> /etc/sysctl.conf echo "net.ipv4.conf.all.arp_announce = 2">> /etc/sysctl.conf echo "net.ipv4.conf.default.arp_ignore = 1">> /etc/sysctl.conf echo "net.ipv4.conf.default.arp_announce = 2">> /etc/sysctl.conf echo "net.ipv4.conf.lo.arp_ignore = 1">> /etc/sysctl.conf echo "net.ipv4.conf.lo.arp_announce = 2">> /etc/sysctl.conf sysctl -p 重启网络服务: [root@oracle-linux6 ~]# service network restart 检验:(主要看有没有漂移IP地址出现) [root@oracle-linux6 ~]# ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.168.180/32 brd 192.168.168.180 scope global lo:0 valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:01:1a:af brd ff:ff:ff:ff:ff:ff inet 192.168.168.135/24 brd 192.168.168.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe01:1aaf/64 scope link valid_lft forever preferred_lft forever ###### web-2的服务器配置: 笺注:Apache或Nginx的安装这里就省略了 添加虚拟网卡: [root@centos8 ~]# vi /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.168.180 NETMASK=255.255.255.255 安装network服务 [root@centos8 ~]# yum -y install network-scripts 重启network服务 [root@centos8 ~]# systemctl restart network 开机自动开启network服务 [root@centos8 ~]# systemctl enable network ### [root@centos8 ~]#route -bash: route: 未找到命令 [root@centos8 ~]# [root@centos8 ~]# yum -y install net-tools [root@centos8 ~]# route add -host 192.168.168.180 dev lo:0 echo "route add -host 192.168.168.180 dev lo:0">> /etc/rc.local echo "net.ipv4.conf.all.arp_ignore = 1">> /etc/sysctl.conf echo "net.ipv4.conf.all.arp_announce = 2">> /etc/sysctl.conf echo "net.ipv4.conf.default.arp_ignore = 1">> /etc/sysctl.conf echo "net.ipv4.conf.default.arp_announce = 2">> /etc/sysctl.conf echo "net.ipv4.conf.lo.arp_ignore = 1">> /etc/sysctl.conf echo "net.ipv4.conf.lo.arp_announce = 2">> /etc/sysctl.conf sysctl -p [root@centos8 ~]# chmod a+x /etc/rc.d/rc.local 重启network服务 [root@centos8 ~]# systemctl restart network 检验:(主要看有没有漂移IP地址出现) [root@centos8 ~]# ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.168.180/32 brd 192.168.168.180 scope global lo:0 valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens160: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:cb:1e:40 brd ff:ff:ff:ff:ff:ff inet 192.168.168.154/24 brd 192.168.168.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::92ab:5fb4:5373:ad53/64 scope link noprefixroute valid_lft forever preferred_lft forever ###### 客户端访问的效果:(要访问漂移IP地址) 图片3.png web-1关闭Apache: [root@oracle-linux6 ~]# service httpd stop 停止 httpd:[确定] 图片4.png web-1开启Apache: [root@oracle-linux6 ~]# service httpd start 正在启动 httpd:[确定] web-2关闭Apache: [root@centos8 ~]# systemctl stop httpd 图片5.png 调度服务器要看到轮询效果: [root@master ~]# ipvsadm -lnc IPVS connection entries pro expire state source virtual destination TCP 01:48 FIN_WAIT 192.168.168.166:1265 192.168.168.180:80 192.168.168.154:80 TCP 00:55 FIN_WAIT 192.168.168.166:1254 192.168.168.180:80 192.168.168.135:80 注释: 正常情况下,客户端会稳定地停留在某一台Web服务器上,访问是不会突然中断的; 同一时刻,只有一台负载调度器在工作; 只要还有一台负载调度器、一台Web服务器还在正常工作,就不会影响到客户端的访问。 如果要修改Web程序池的节点(即修改Web服务器群集),可以先删除虚拟服务器,再重新创建虚拟服务器,并添加服务器节点。 相关文章: Keepalived+LVS(二) NFS共享存储服务 Keepalived双机热备+Nginx CentOS8_Keepalived+LVS

图片附件: 图片1.png (2020-7-27 12:43, 74.88 KB) / 下载次数 132
http://blog.zhuohua.store/attachment.php?aid=9872&k=7f2a968a28cb9b7e831882a03e079d9e&t=1714699622&sid=BzfwNL



图片附件: 图片2.png (2020-7-27 12:45, 35.77 KB) / 下载次数 156
http://blog.zhuohua.store/attachment.php?aid=9873&k=4846786bd75e07d5f370e794acbc3585&t=1714699622&sid=BzfwNL



图片附件: 图片3.png (2020-7-27 12:46, 17.51 KB) / 下载次数 145
http://blog.zhuohua.store/attachment.php?aid=9874&k=98e26a46b7288ecc4e6deae5862b0835&t=1714699622&sid=BzfwNL



图片附件: 图片4.png (2020-7-27 12:46, 18.06 KB) / 下载次数 143
http://blog.zhuohua.store/attachment.php?aid=9875&k=7d36df46d3e591cc10db3ebcd6f9de32&t=1714699622&sid=BzfwNL



图片附件: 图片5.png (2020-7-27 12:47, 17.51 KB) / 下载次数 139
http://blog.zhuohua.store/attachment.php?aid=9876&k=5d5aa76fdd55d3e74d33301d1131811a&t=1714699622&sid=BzfwNL






欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2