当前位置: 首页 > news >正文

高可用集群(HAC)

1、高可用集群+keepalive说明

高可用定义:

  • 目的:尽可能的提高服务的可用性
    • 99%、99.9%、99.99%、99.999%
  • 实现原理:心跳检测
  • 服务:
    • 有状态:
      • MySQL
    • 无状态:
      • apache
      • LVS

Keepalive原理

  • 案例环境专为 LVS和HA计一健康查工具
  • 支持故障自动切换(Failover)
  • 支持节点健康状态检查(Health Checking)
  • 官方网站:http://www.keepalived.org/

Keepalive的热备方式

  • VRRP(Virtual Router Redundancy Protocol:虚拟路由冗余协议)
    • 一主+多备:共用同一个IP地址,但是优先级不同

同一个网段才会进行IP的争夺;

  • 一个组里面各台主机会进行IP地址的漂移

2、LVS-DR+keepalive实验

首先搭建一个LVS-DR模式的均衡负载集群

规划:

  • LVS-负载调度器:
    • 192.168.75.10–LVS-master
      • LVS负载调度器都配置LVS-DR模式
        • 关闭广播功能;重定向功能
      • 关闭网卡守护进程NetworManager
      • 添加一个子网卡:eth0:0
        • 192.168.75.100(地址漂移使用的)
        • 然后拉起来ifup,ifdown eth0:0
      • 添加一个集群
        • 然后直接添加子节点
      • 安装keepalive
        • 安装gcc环境
        • 准备keepalive源码包–>源码编译安装
        • 安装完成后修改配置文件:并不是所有的都要使用,
    • 192.168.75.11–LVS-slave
      • 关闭网卡守护进程NetworManager
      • 配置好集群IP–eth0:0–>这里也是配置100;
        • 问题是:同一个局域网里面两个100的ip是不行的
        • 因此注释掉本机的一个文件/etc/sysconfig/networ-scripts/ifup-eth–>大概是注释257行
  • 后端服务器:
    • 192.168.75.12/13
    • 安装httpd服务–>开启并且永久开启
      • 编写一个网站
      • 然后自己测试一下;
    • 添加一个100的接口–>lo:0
      • 子网掩码是4个255
    • 然后修改一下内核参数
      • sysctl -p
    • 添加路由记录
  • 客户端:
    • 网页访问
      • 尝试关闭LVS-master
      • 然后关闭httpd第一台

LVS-master负载调度器配置如下

  • 先搭建一个LVS-DR
#关闭网卡守护进程-->关闭NetworkManager
[root@node0 ~]# service NetworkManager stop
[root@node0 ~]# chkconfig NetworkManager off#创建一个eth0:0用来充当集群入口接口
[root@node0 ~]# cd /etc/sysconfig/network-scripts/
[root@node0 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0#修改配置文件-->添加一个ip-->100
[root@node0 network-scripts]# vim ifcfg-eth0:0
DEVICE=eth0:0				#这里需要修改网卡名
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.75.100		#然后修改IP-->一个虚拟的IP
NETMASK=255.255.255.0#然后关闭网卡的重定向功能
[root@node0 ~]# vim /etc/sysctl.conf #在末行添加如下内容
#关闭网卡重定向功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0#然后刷新配置
[root@node0 ~]# sysctl -p#到这里可以拉起eth0:0的网卡
[root@node0 ~]# ifup eth0:0#在验证一眼是否拉起来了
[root@node0 ~]# ifconfig  eth0:0#加载一下ip_vs模块
[root@node0 ~]# modprobe  ip_vs#安装一下lvsadm
[root@node0 ~]# yum -y install ipvsadm#添加一下集群-->12/13是后端服务器
-->-A是添加一个集群
-->-t是指定一个虚拟ip以及端口
-->-s:指定轮询模式为rr
[root@node0 ~]# ipvsadm -A -t 192.168.75.100:80 -s rr#添加集群子节点-->添加的机器是12/13
-->-a:添加子节点
-->-r:指定子节点的真实ip以及端口
-->-g:指定了是DR模式
[root@node0 ~]# ipvsadm -a -t 192.168.75.100:80 -r 192.168.75.12:80 -g
[root@node0 ~]# ipvsadm -a -t 192.168.75.100:80 -r 192.168.75.13:80 -g#最后查看一下集群信息
[root@node0 ~]# ipvsadm -Ln 
[root@node0 ~]# ipvsadm -Ln --stats#把这个集群写入配置文件
[root@node0 ~]# service ipvsadm save

配置两台后端服务器

  • 安装httpd
    • 以及编写各自的发布页面
  • 修改内核参数
    • 关闭ARP功能
  • 给与一个虚拟IP;
    • 并且指定一下路由
#两台后端的服务器都是一样的配置,唯一不一样的就是发布的页面不同#关闭一下NetworkManager
[root@node2 ~]# service NetworkManager stop	
[root@node2 ~]# chkconfig NetworkManager off#准备一个回环口-->lo:0
[root@node2 ~]# cd /etc/sysconfig/network-scripts/
[root@node2 network-scripts]# cp -a ifcfg-lo ifcfg-lo:0#然后配置一个虚拟ip
[root@node2 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.75.100
NETMASK=255.255.255.255
........
#调整内核参数-->关闭ARP功能
[root@node2 ~]# vim /etc/sysctl.conf 
.........
#关闭ARP功能
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2_
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 3
#重新拉取一下配置
[root@node2 ~]# sysctl -p#到这里为止-->可以拉起来lo:0的网卡了
[root@node2 ~]# ifup lo:0#添加一个路由-->#如果有人来访问这个ip就把它丢给lo:0网卡
[root@node2 ~]# route  add  -host 192.168.75.100 dev lo:0#然后配置开机自启
[root@node2 ~]# echo "route  add  -host 192.168.75.100 dev lo:0" >> /etc/rc.local #安装apache
[root@node2 ~]# yum -y install httpd#修改发布页面
[root@node2 ~]# vim /var/www/html/index.html
aaaaaaaaaaaaaaaaaaaaaaaa#启动服务-->并且设置开机自启
[root@node2 ~]# service httpd start
[root@node2 ~]# chkconfig httpd on#自己测试一下
[root@node2 ~]# curl  localhost
aaaaaaaaaaaaaaaaaaaaaaaa

然后简单地从浏览器上面验证一下LVS-DR

http://192.168.75.100/

  • 看到了aaaa和bbb轮询就代表LVS-DR搭建完成

接下来回到LVS-master服务器上面操作

  • 就是node0–>ip:10的服务器上面操作
  • 安装keepalive
    • 并且配置
#首先安装一下必要的依赖
[root@node0 ~]# yum -y install kernel-devel openssl-devel gcc*#准备好keepalive的源码包
[root@node0 ~]# ls keepalived-1.2.13.tar.gz 
keepalived-1.2.13.tar.gz#解压源码包
[root@node0 ~]# tar -xf keepalived-1.2.13.tar.gz 
[root@node0 ~]# ls#预编译、编译、安装
[root@node0 ~]# cd keepalived-1.2.13
[root@node0 keepalived-1.2.13]# ./configure --prefix=/usr/local/keepalive/ --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64/ && make && make install#修改配置文件-->调整好参数#操作前切勿忘记备份
[root@node0 ~]# cp -a /usr/local/keepalive/etc/keepalived/keepalived.conf{,.bak}
[root@node0 ~]# vim /usr/local/keepalive/etc/keepalived/keepalived.conf#配置文件里面有些是不需要的,需要删除;有些是需要添加的,以下是配置文件的解析;#全局配置只留下一个主机名
global_defs {router_id server1			#命名主机名
}#定义一个示例-->这里可以选择默认
vrrp_instance VI_1 {state MASTER			#设置服务类型主/从(MASTER/SLAVE)interface eth0			#指定那块网卡用来监听virtual_router_id 51	#设组号, 如果是一组就是相同的ID 号,一个主里面只能有一个主服务器和多个从服务器priority 100			#服务器优先级, 主服务器优先级高advert_int 1			#心跳时间, 检测对方存活authentication {		#存活验证密码auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.75.100		#定义一个集群的地址}
virtual_server 192.168.75.100 80 {	#设置集群地址 以及端口号delay_loop 6					#健康检查间隔lb_algo rr						#使用轮询调度算法lb_kind DR						#DR模式的群集protocol TCP					#使用的协议real_server 192.168.75.12 80 {	#管理的网站节点以及使用端口weight 1					#权重,优先级 在原文件基础上删除修改TCP_CHECK {					#状态检查方式connet_port 80		#检查的目标端口connet_timeout 3	#连接超时《秒)nb_get_retry 3		#重试次数delay_before_retry 4	#重试间隔《秒)}}real_server 192.168.75.13 80 {	#管理的第二个网站节点以及使用端口weight 1					#权重, 优先级 在原文件基础上删除修改TCP_CHECK {					#状态检查方式connet_port 80		#检查的目标端口connet_timeout 3	#连接超时《秒)nb_get_retry 3		#重试次数delay_before_retry 4	#重试间隔《秒)}}
}
#然后把多余的配置文件内容都删除-->然后保存退出#然后启动keepalive
[root@node0 ~]# /usr/local/keepalive/sbin/keepalived 
[root@node0 ~]# ps -ef | grep keep
.........#看到了keepalive就证明启动成功了;

接下来就配置LVS-slave服务器

  • IP:192.168.75.11

  • 安装keepalive服务–>并且配置好

  • 一样要配置ipvsadm

#关闭NetworkManager
[root@node1 ~]# service NetworkManager stop
[root@node1 ~]# chkconfig  NetworkManager off#安装一下keepalive的依赖
[root@node1 ~]# yum -y install kernel-devel openssl-devel popt-devel gcc*
.........#准备好源码包
[root@node1 ~]# ls keepalived-1.2.13.tar.gz 
keepalived-1.2.13.tar.gz#预编译、编译、安装keepalive
[root@node1 ~]# tar -xf keepalived-1.2.13.tar.gz 
[root@node1 ~]# cd keepalived-1.2.13
[root@node1 keepalived-1.2.13]# ./configure --prefix=/usr/local/keepalive/ --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64/ && make && make install#准备好配置文件-->之前master做的配置可以给到slave使用#做好备份-->养成良好习惯
[root@node1 ~]# cp -a /usr/local/keepalive/etc/keepalived/keepalived.conf{,.bak}#这一条命令在LVS-master上面执行-->简单理解就是传个已经修改过的文件给到slave
[root@node0 ~]# scp /usr/local/keepalive/etc/keepalived/keepalived.conf root@192.168.75.11:/usr/local/keepalive/etc/keepalived/#修改配置文件
[root@node1 ~]# vim /usr/local/keepalive/etc/keepalived/keepalived.conf#因为之前在master上面已经修改过-->因此只需要修改几个地方就ok
..........8     state SLAVE			#改为从服务器11     priority 50			#优先级改为50-->就可以保存退出了#配置虚拟网卡
[root@node1 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0[root@node1 network-scripts]# vim ifcfg-eth0:0
DEVICE=eth0:0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.75.100
NETMASK=255.255.255.0#这里注意不要急着启动网卡-->因为相同网段会产生IP冲突#因此要注释掉配置文件的内容-->大概在243行左右-->把这个注释掉就不会报错
[root@node1 network-scripts]# vim ifup-eth 
.......
243          #   if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${ipaddr[$idx]} ; then
244           #      net_log $"Error, some other host already uses address ${ipaddr[$idx]}."
245           #      exit 1
246           #  fi#然后修改一下内核参数# 修改内核参数。 防止相同网络地址广播冲突,如果有多快网卡需要设置多行
[root@node1 ~]# vim /etc/sysctl.conf #在末行添加一下几行
#关闭网卡重定向功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0#刷新内核参数
root@node1 ~]# sysctl -p#到这里就可以启动网卡eth0:0网卡了
[root@node1 ~]# ifup eth0:0
[root@node1 ~]# ifconfig eth0:0#然后配置ipvsadm
[root@node1 ~]# yum -y install ipvsadm#查看一下是否加载IP_VS
[root@node1 ~]# modprobe ip_vs#查看一下版本
[root@node1 ~]# 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#添加集群以及集群节点
[root@node1 ~]# ipvsadm -A -t 192.168.75.100:80 -s rr
[root@node1 ~]# ipvsadm -a -t 192.168.75.100:80 -r 192.168.75.12 -g
[root@node1 ~]# ipvsadm -a -t 192.168.75.100:80 -r 192.168.75.13 -g#启动ipvs并且顺势启动keepalive
[root@node1 ~]# service ipvsadm start
[root@node1 ~]# /usr/local/keepalive/sbin/keepalived 

浏览器继续验证

  • 现在是LVS的主从都已经启动了;
  • 浏览器访问:http://192.168.75.100/—>正常

然后现在关闭LVS-master–>直接让他断网

  • 验证一下LVS-slave是否能够接盘
  • 浏览器访问:http://192.168.75.100/—>正常
#去到LVS-slave查看流量
[root@node1 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes-> RemoteAddress:Port
TCP  192.168.75.100:80                  37      185        0    25524        0-> 192.168.75.12:80                   18       90        0    12391        0-> 192.168.75.13:80                   19       95        0    13133        0

然后再关闭一台后端服务器

  • 浏览器访问:http://192.168.75.100/—>发现少了aaaa的那台主机
http://www.lryc.cn/news/12236.html

相关文章:

  • python基于django微信小程序的适老化老人健康预警小程序
  • 基于微信小程序图书馆管理系统
  • 将镭神C32激光雷达的PointXYZ数据转化为PointXYZIR格式 - 附代码
  • 高级前端一面面试题集锦
  • Java基础 -- List集合
  • 【Linux】网络编程 - Socket套接字/基于UDP的网络通信
  • 流程引擎之Camunda简介
  • Mybatis笔记整理
  • 【react全家桶】面向组件编程
  • Django框架之模型视图-使用 PostMan 对请求进行测试
  • (考研湖科大教书匠计算机网络)第五章传输层-第四节:TCP流量控制
  • 使用Docker-Compose搭建Redis集群
  • 华为OD机试 -计算网络信号(Js)
  • 【数据结构】————栈
  • 从零编写linux0.11 - 第十一章 可执行文件
  • Win10上通过nginx代理配置远程非445端口SMB
  • Allegro如何快速清除多余的规则设置操作指导
  • ROS2 入门应用 引用自定义消息(Python)
  • SmS-Activate一款好用的短信验证码接收工具
  • SpringBoot+Elasticsearch按日期实现动态创建索引(分表)
  • Terraform基础入门 (Infrastructure as Code)
  • Redis内存回收
  • ROS2 入门应用 引用自定义消息(C++)
  • Spring中的数据校验
  • python批量翻译excel表格中的英文
  • 基于SSM框架的RBAC权限系统设计与 实现
  • 目标检测各常见评价指标详解
  • 深入讲解Kubernetes架构-控制器
  • Urho3D本地化 国际化
  • 千锋教育嵌入式物联网教程之系统编程篇学习-04