服务器群集—LVS+Keepalived群集

目录

  • 一、Keepalived
    • 1.1 为什么要用Keepalived
    • 1.2 Keepalived工具介绍
    • 1.3 Keepalived实现原理剖析
    • 1.4 Keepalived安装与启动
  • 二、配置Keepalived master服务器
    • 2.1 常用配置选项
  • 三、配置Keepalived slave服务器
  • 四、Keepalived双机热备效果测试
  • 五、LVS+Keepalived高可用群集搭建
    • 5.1 配置环境:VMnet1
    • 5.2 配置NFS
    • 5.3 配置web1和web2
    • 5.4 配置LVS调度服务器
      • 5.41 配置lvs1主调度服务器
      • 5.42 配置lvs2备用调度服务器
      • 5.43 lvs1设置免密登录
      • 5.44 继续配置lvs2备用调度服务器
  • 六、效果验证
    • 6.2 查看主备LVS转换
    • 6.3 LVS1上开启keepalived.service ,查看效果
    • 6.4 打开网页查看调度
    • 6.5 lvs查看调度情况

一、Keepalived

1.1 为什么要用Keepalived

● 企业应用中,单台服务器承担应用存在单点故障的危险
● 单点故障一旦发生,企业服务将发生中断,造成极大的危害

1.2 Keepalived工具介绍

专为LVS和HA设计的一款健康检查工具
● 支持故障自动切换(Failover)
● 支持节点健康状态检查(Health Checking)

1.3 Keepalived实现原理剖析

Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能

VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
● 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
● 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
● 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

1.4 Keepalived安装与启动

在LVS群集环境中应用时,也需用到lipvsadm管理工具
YUM安装Keepalived
启用Keepalived服务

二、配置Keepalived master服务器

Keepalived配置目录位于/etc/keepalived/
keepalived.conf是主配置文件
● global_defs {…}区段指定全局参数
● ovrrp_instanc实例名称{…}区段指定VRRP热备参数
● 注释文字以"!"”符号开头
● 目录samples,提供了许多配置样例作为参考

2.1 常用配置选项

● router idHA_TEST_R1:本路由器(服务器)的名称
● vrrp_instance VI_1·定义VRRP热备实例
● state MASTER:热备状态,MASTER表示主服务器i
● interface ens33:承载VIP地址的物理接口
● virtual_router_id 1:虚拟路由器的ID号,每个热备组保持一致
● priority 100:优先级,数值越大优先级越高
● advert_int 1:通告间隔秒数(心跳频率)
● auth_type PASS:认证类型
● auth_pass 123456:密码字串
● virtual_ipaddress { vip}:指定漂移地址(VIP),可以有多个

三、配置Keepalived slave服务器

Keepalived备份服务器的配置与master的配置有三个选项不同
● router id:设为自有名称
● state:设为BACKUP
● priority:值低于主服务器
其他选项与master相同

四、Keepalived双机热备效果测试

测试双机热备的效果
● 主、备机均启用Web服务,设置不同内容
● 先后禁用、启用主服务器的网卡
执行的测试
● 测试1:使用ping检测192.168.10.72的连通性
● 测试2:访问http://192.168.10.72,确认可用性及内容变化
● 测试3:查看日志文件/var/log/messages中的变化

五、LVS+Keepalived高可用群集搭建

5.1 配置环境:VMnet1

192.168.100.10 lvs1+keepalive(主)
192.168.100.20 lvs2+keepalive(备)
192.168.100.30 web1
192.168.100.40 web2
192.168.100.50 nfs
192.168.100.60 client

5.2 配置NFS

[root@server5 ~]# systemctl stop firewalld   #关闭防火墙
[root@server5 ~]# setenforce 0
[root@server5 ~]# yum -y install rpcbind nfs-utils
[root@server5 ~]# mkdir /opt/web1 /opt/web2      #创建网页
[root@server5 ~]# echo "

this is web1.

"
> /opt/web1/index.html [root@server5 ~]# echo "

this is web2.

"
> /opt/web2/index.html [root@server5 ~]# vi /etc/exports #添加 /opt/web1 192.168.100.30/24(ro) /opt/web2 192.168.100.40/24(ro) [root@server5 ~]# systemctl restart nfs [root@server5 ~]# systemctl restart rpcbind [root@server5 ~]# showmount -e #查看 Export list for server5: /opt/web2 192.168.100.40/24 /opt/web1 192.168.100.30/24

服务器群集—LVS+Keepalived群集_第1张图片
服务器群集—LVS+Keepalived群集_第2张图片

5.3 配置web1和web2

web1:

[root@server3 ~]# systemctl stop firewalld   #关闭防火墙
[root@server3 ~]# setenforce 0
[root@server3 ~]# yum -y install httpd     #新系统未下载过
[root@server3 ~]# showmount -e 192.168.100.50
Export list for 192.168.100.50:
/opt/web2 192.168.100.40/24
/opt/web1 192.168.100.30/24
[root@server3 ~]# mount 192.168.100.50:/opt/web1 /var/www/html   #挂载到ftp服务器
[root@server3 ~]# df -Th   #检查挂载  
[root@server3 ~]# systemctl restart httpd
[root@server3 ~]# netstat -anpt |grep httpd   #检查服务是否开启
tcp6       0      0 :::80                   :::*                    LISTEN      54179/httpd  

[root@server3 ~]# curl http://localhost
<h1> this is web1. </h1>
[root@server3 ~]# vi web1.sh
#!/bin/bash
ifconfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up    #生成lo端口为VIP地址,广播地址255.255.255.255,为了能让调度器发消息可接收
route add -host 192.168.100.100 dev lo:0    #lo接口生成一个路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore      #只有发给lo网卡的请求才会响应
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce   #回包时使用lo网卡地址回包,而不是虚拟地址
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore      #所有网卡发送给自己网卡的请求才会响应
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce        #所有网卡回包时使用自己网卡地址回包,而不是虚拟地址
sysctl -p &> /dev/null         #生效并不输出信息

[root@server3 ~]# sh web1.sh
[root@server3 ~]# ifconfig  #检查下ip是否生成
[root@server3 ~]# route -n

服务器群集—LVS+Keepalived群集_第3张图片
在这里插入图片描述
服务器群集—LVS+Keepalived群集_第4张图片

web2:

[root@server4 ~]# systemctl stop firewalld   #关闭防火墙
[root@server4 ~]# setenforce 0
[root@server4 ~]# yum -y install httpd
[root@server4 ~]# showmount -e 192.168.100.50
Export list for 192.168.100.50:
/opt/web2 192.168.100.40/24
/opt/web1 192.168.100.30/24
[root@server4 ~]# mount 192.168.100.50:/opt/web2 /var/www/html    #挂载到ftp服务器
[root@server4 ~]# df -Th
[root@server4 ~]# systemctl start httpd
[root@server4 ~]# netstat -anpt |grep httpd   #检查服务是否开启
tcp6       0      0 :::80                   :::*                    LISTEN      54055/httpd 

[root@server4 ~]# curl http://localhost
<h1> this is web2. </h1>
[root@server4 ~]# vi web2.sh
#!/bin/bash
ifconfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up   #生成lo端口为VIP地址,广播地址255.255.255.255,为了能让调度器发消息可接收
route add -host 192.168.100.100 dev lo:0   #lo接口生成一个路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore   #只有发给lo网卡的请求才会响应
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce   #回包时使用lo网卡地址回包,而不是虚拟地址
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore   #所有网卡发送给自己网卡的请求才会响应
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce   #所有网卡回包时使用自己网卡地址回包,而不是虚拟地址
sysctl -p &> /dev/null   #生效并不输出信息
[root@server4 ~]# sh web2.sh
[root@server4 ~]# ifconfig  #检查下ip是否生成
[root@server4 ~]# route -n

服务器群集—LVS+Keepalived群集_第5张图片
在这里插入图片描述
服务器群集—LVS+Keepalived群集_第6张图片

5.4 配置LVS调度服务器

5.41 配置lvs1主调度服务器

放入keepalived-2.0.13.tar软件包

[root@server1 ~]# systemctl stop firewalld   #关闭防火墙
[root@server1 ~]# setenforce 0
[root@server1 ~]# modprobe ip_vs      #对ip_vs的探测加载
[root@server1 ~]# cat /proc/net/ip_vs      #查看基本信息
IP Virtual Server version 1.2.1 (size=4096)     #显示版本信息
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn    #lvs未设置
[root@server1 ~]# yum -y install ipvsadm      #安装管理软件ipvsadm,不需要启动
[root@server1 ~]# vi dr.sh     #编写调度脚本
#!/bin/bash
ifconfig ens33:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up      #生成ens33:0端口为VIP地址,广播地址255.255.255.255,为了能让调度器发消息可接收
route add -host 192.168.100.100 dev ens33:0                 #给ens33:0添加路由
ipvsadm -C                                                   #清除虚拟服务器表中所有记录
ipvsadm -A -t 192.168.100.100:80 -s rr                      #创建虚拟服务器
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.30:80 -g    #添加服务器节点,虚拟地址映射真实web地址
ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.40:80 -g    #添加服务器节点,虚拟地址映射真实web地址
ipvsadm -Ln                                                #查看节点状态,加个“-n”将以数字形式显示地址、端口信息



 ###参数注释
"-A"表示添加虚拟服务器
"-a"表示添加真实服务器
"-t"用来指定VIP地址及TCP端口
"-r"用来指定RIP地址及TCP端口
"-s"用来指定负载调度算法一一rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接)
"-m"表示使用NAT群集模式("-g"DR模式,"-i"TUN模式)
[root@server1 ~]# sh dr.sh
[root@server1 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel   #安装依赖包
[root@server1 ~]# tar zxvf keepalived-2.0.13.tar.gz      #解压缩keepalived软件包
[root@server1 ~]# cd keepalived-2.0.13/
[root@server1 keepalived-2.0.13]# ./configure --prefix=/    #配置
[root@server1 keepalived-2.0.13]# make && make install   #编译与安装
[root@server1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d     #把keepalived加入系统管理服务
[root@server1 keepalived-2.0.13]# cd
[root@server1 ~]# systemctl enable keepalived.service     #设置开机自启
[root@server1 ~]# vim /etc/keepalived/keepalived.conf     #删除所有配置,重新添加
! Configuration File for keepalived
global_defs {
     router_id lvs_01                               #本服务器的名称
}
vrrp_instance vi_1 {                              #定义VRRP热备实例
    state MASTER                                  #热备状态,MASTER(主服务器)
    interface ens33                                #承载VIP地址的物理接口
    virtual_router_id 51                          #虚拟路由器的ID号,每个热备组保持一致
    priority 110                                       #优先级,数值越大优先级越高
    advert_int 1                                      #通告间隔秒数
    authentication {                                #热备认证信息,每个热备组保持一致
          auth_type PASS                        #认证类型
          auth_pass 6666                        #密码字符串
    }
     virtual_ipaddress {                         #指定漂移地址(VIP192.168.100.100
}
}
virtual_server 192.168.100.100 80 {     #虚拟服务器地址(VIP)、端口
     delay_loop 6                                  #健康检查的间隔时间(秒)
     lb_algo rr                                        #调度算法(rr)         
     lb_kind DR                                     #群集工作模式(DR)
     persistence_timeout 6                   #连接保持时间(秒)
     protocol TCP                                 #应用服务器采用的TCP协议
real_server 192.168.100.30 80 {          #第一个web服务器节点的地址、端口
     weight 1                                         #节点权重
     TCP_CHECK {                              #健康检查方式
         connect_port 80                        #检查的目标端口
         connect_timeout 3                    #连接超时(秒)
         nb_get_retry 3                          #重试次数
         delay_before_retry 3                 #重试间隔
      }
}
real_server 192.168.100.40 80 {        #第二个web服务器节点的地址、端口
     weight 1
     TCP_CHECK {
         connect_port 80
         connect_timeout 3
         nb_get_retry 3
         delay_before_retry 3
      }
}
}
[root@server1 ~]# systemctl start keepalived.service    #启动服务
[root@server1 ~]# ipvsadm -Ln    #查看后台调度情况

服务器群集—LVS+Keepalived群集_第7张图片

5.42 配置lvs2备用调度服务器

放入keepalived-2.0.13.tar软件包

配置跟主调度器一样,安装后...
........
[root@server2 keepalived-2.0.13]# cd
[root@server2 ~]# systemctl enable keepalived.service     #设置开机自启

5.43 lvs1设置免密登录

[root@server1 ~]# ssh-keygen -t rsa
[root@server1 ~]# ssh-copy-id 192.168.100.20     #输入yes    然后输入密码
[root@server1 ~]# scp /etc/keepalived/keepalived.conf root@192.168.100.20:/etc/keepalived/     #拷贝文件
keepalived.conf                                               100%  814   383.3KB/s   00:00  

5.44 继续配置lvs2备用调度服务器

[root@server2 ~]# vim /etc/keepalived/keepalived.conf     #修改
修改参数
 router_id lvs_02   服务器名称
state BACKUP                         热备状态,从服务器
 priority 105                              优先级

服务器群集—LVS+Keepalived群集_第8张图片

[root@server2 ~]# systemctl start keepalived.service   #启动服务
[root@server2 ~]# systemctl status keepalived.service   #查看服务状态

服务器群集—LVS+Keepalived群集_第9张图片

六、效果验证

6.1 查看漂移地址

[root@server1 ~]# ip addr
[root@server2 ~]# ip addr

服务器群集—LVS+Keepalived群集_第10张图片
服务器群集—LVS+Keepalived群集_第11张图片

6.2 查看主备LVS转换

[root@server1 ~]# systemctl stop keepalived.service    #断掉主LVS
[root@server1 ~]# ip addr    #查看地址信息
[root@server2 ~]# tail -f /var/log/messages
[root@server2 ~]# ip addr   #查看地址信息

服务器群集—LVS+Keepalived群集_第12张图片
服务器群集—LVS+Keepalived群集_第13张图片
服务器群集—LVS+Keepalived群集_第14张图片

6.3 LVS1上开启keepalived.service ,查看效果

[root@server1 ~]# systemctl start keepalived.service     #开启服务
[root@server1 ~]# ip addr  #查看地址信息

服务器群集—LVS+Keepalived群集_第15张图片

6.4 打开网页查看调度

服务器群集—LVS+Keepalived群集_第16张图片
服务器群集—LVS+Keepalived群集_第17张图片
服务器群集—LVS+Keepalived群集_第18张图片

6.5 lvs查看调度情况

服务器群集—LVS+Keepalived群集_第19张图片

你可能感兴趣的:(服务器群集,linux,java,运维,centos,数据库)