LVS+Keepalived实现负载均衡
LVS和keepalived实现负载均衡
一、测试浮动IP,三步走
1.配置主机名
[root@ser01 ~]# hostnamectl set-hostname ser02 [root@ser01 ~]# su -l
2.关闭防火墙:
[root@ds01 ~]# systemctl stop firewalld [root@ds01 ~]# systemctl disable firewalld [root@ds01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config [root@ds01 ~]# setenforce 0
3.时钟同步
yum install ntp ntpdate ntpdate cn.pool.ntp.org hwclock --systohc
二、在ser01 、ser02 配置web服务器
[root@ser01 ~]# yum install httpd -y
1 、启动服务
[root@ser01 ~]# systemctl start httpd [root@ser01 ~]# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
2 、编辑网页测试
vi /var/www/html/index.html this is a test from web01... this is a test from web02...
三、配置LVS 负载调度器
1、 在两个DS节点上配置负载均衡
1.1下载ipvs管理工具
[root@ds01 ~]# yum install ipvsadm -y [root@ds02 ~]# yum install ipvsadm -y
1.2 在ds01 ds02配置LVS(绑定浮动IP)
[root@ds01 ~]# nmcli con sh NAME UUID TYPE DEVICE ens33 c96bc909-188e-ec64-3a96-6a90982b08ad ethernet ens33 [root@ds01 ~]# nmcli con mod ens33 +ipv4.addr 192.168.131.200/24 [root@ds01 ~]# systemctl restart network [root@ds01 ~]# ipvsadm -A -t 192.168.131.200:80 -s rr [root@ds01 ~]# ipvsadm -a -t 192.168.131.200:80 -r 192.168.131.152:80 -g [root@ds01 ~]# ipvsadm -a -t 192.168.131.200:80 -r 192.168.131.153:80 -g [root@ds01 ~]# 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.131.200:80 rr -> 192.168.131.152:80 Route 1 0 0 -> 192.168.131.153:80 Route 1 0 0 ds02 做同样步骤
1.3 在ser01 和 ser02 上配置网络,绑定服务IP到回环网卡上
[root@ser01 ~]# cd /etc/sysconfig/network-scripts/ [root@ser01 network-scripts]# cp ifcfg-lo ifcfg-lo:10 [root@ser01 network-scripts]# vi ifcfg-lo:10 [root@ser01 network-scripts]# systemctl restart network DEVICE=lo IPADDR=192.168.131.200 NETMASK=255.255.255.255 NETWORK=127.0.0.0 If you're having problems with gated making 127.0.0.0/8 a martian, you can change this to something else (255.255.255.255, for example) BROADCAST=127.255.255.255 ONBOOT=yes NAME=loopback
1.4 调整内核参数,关闭ARP响应
vim /etc/sysctl.conf net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
2、DR 模式主从master 及 backup 机器keepalived 配置对比:
主从库只有优先级不同,其余均相同;
主库ds01: [root@ds01 keepalived]# cat 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 lb01 //主库为1 } vrrp_instance VI_1 { state MASTER //master 主库 interface ens33 //类型ens33 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.131.200/24 // VIP (浮动IP) } } virtual_server 192.168.131.200 80 { //为浮动IP设置真实服务器 delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.255 persistence_timeout 1 protocol TCP real_server 192.168.131.152 80 { //真实服务器IP地址 weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.131.153 80 { //真实服务器IP地址 weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 connect_port 80 } } }
从库ds02: [root@ds02 keepalived]# cat 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 lb02 } vrrp_instance VI_1 { state BACKUP //从库 interface ens33 //网卡类型 virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.131.200 //浮动IP } } virtual_server 192.168.131.200 80 { //为浮动IP设置添加真实服务器地址 delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.255 persistence_timeout 1 protocol TCP real_server 192.168.131.152 80 { //真实服务器地址 weight 1 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.131.153 80 { //真实服务器地址 weight 1 TCP_CHECK { //检查 connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
3、结果测试
1.分别在ds01 ds02 上查看浮动IP信息
2.在网页上进行访问测试
4、模拟故障切换
1.在Linux终端上写测试脚本
vi test.sh [root@keepalived ~]# cat test.sh #!/bin/bash while true do curl 192.168.131.200 sleep 1 done
2.运行脚本,持续监控
3.模拟故障,查看网卡
在所有主机上分别进行故障检测产 systemctl stop keepalived systemctl stop httpd
四、keepalived 监控
安装killall yum install psmisc