集群的构建-lvs-高可用方案(keepalived、Heartbeat)
前面已经记录了集群的一些原理知识,下面我就是我对几种常见集群的构建,在其中可以看出相关命令,还是很多的,用于处理生产环境中的一些问题。
一、LVS-NAT模式集群
1、工作流程
# 客户端发送数据报文(包含源ip和端口)到调度器,调度器修改目标ip和端口,将目标ip修改为服务器ip,发送到内网广播域中,服务器RS1接收。RS1处理完毕后回信,将源ip和目标ip对调,并指定本机网关为调度器ip,将报文发送到网关,网关还原报文ip,将数据报文发送给公网用户。
2、实验环境
# 准备4太虚拟机,自定义模式模拟网络环境
#公网客户端 : 10.10.10.100
#调度器: eth0 10.10.10.11
#eth1 192.168.190.111
#两台服务器: RS1:192.168.190.112
#RS2:192.168.190.113
3、真实服务器
# 两台服务器分别添加调度器的ip为自己的网关。
$ echo "GATEWAY=192.168.190.111" >> /etc/sysconfig/network-scripts/ifcfg-eth0
$ service network restart
$ route -n
# 两台服务器分别添加测试服务需要的程序及页面
$ yum -y install httpd
$ service httpd start
$ chkconfig httpd on
$ echo "ceshi-111" >> /var/www/html/index.html
$ curl localhost # 查看网页内容是否添加
4、调度器服务器(网关服务器)
# 加载ip-vs模块,安装ipvsadm工具,开启路由转发功能
$ modprobe ip_vs
$ cat /proc/net/ip_vs
$ yum -y install ipvsadm
$ vim /etc/sysctl.conf
net.ipv4.ip_forward=1 # 开启路由转发
$ sysctl -p
# 添加集群
$ ipvsadm -A -t 10.10.10.11:80 -s rr
# -A 添加一个新的集群 -t tcp集群 集群地址 -s 指定算法 -p 持久化时间
# 添加真实服务器
$ ipvsadm -a -t 10.10.10.11:80 -r 192.168.190.112:80 -m
$ ipvsadm -a -t 10.10.10.11:80 -r 192.168.190.113:80 -m
$ ipvsadm -Ln # 列出规则 -n 以端口的形式展现出
$ service ipvsadm save
$ chkconfig ipvsadm on
# 查看、清空、添加防火墙规则
$ service iptables start
$ chkconfig iptables on
$ iptables -L # 查看防火墙规则
$ iptables -F # 清空防火墙规则
# NAT地址转换
$ iptables -t nat -A POSTROUTING -s 192.168.190.0/24 -o eth1 -j SNAT --to-source 10.10.10.11
# -t指定表 -s内网地址网段 -o 外网网卡名称 -j 指定动作 --to-source 指定调度器ip地址
5、测试
$ curl 10.10.10.11 或
$ while 2>1; do curl 10.10.10.11; sleep 1s; done
# 调度器查看规则,并查看当前连接状态
$ ipvsacm -Ln --stats
6、端口映射测试
# 修改其中一台真实服务器httpd的端口
$ vim /etc/httpd/conf/httpd.conf
Listen 80 修改为 8080
$ service httpd restart
# 调度器添加新的服务器规则,并删除原有规则
$ ipvsadm -Ln # 列出集群规则
$ ipvsadm -a -t 10.10.10.11:80 -r 192.168.190.112:80 # 添加新的规则
$ ipvsadm -D -t 10.10.10.11 # 删除整个集群规则
$ ipvsadm -d -t 10.10.10.11:80 -r 192.168.190.112:80 # 删除集群下的某规则
$ ipvsadm -Ln
# 注:此环境中,调度器、两台服务器若有一个损坏都会导致用户访问中断。因此,要做健康状态检测
二、LVS - DR 模式集群
1、工作流程
# 客户端发送数据报文(包含源ip和目标ip)到调度器,调度器收到后更改其目标Mac地址,而后发送到RS1服务器,RS1服务器为了响应,在路由表内添加一条记录,做Mac地址转换,最后将处理好的数据报文返回给客户端。(调度器和服务器需要设置一个虚拟的ip用来传递数据报文和接受数据报文,并将此虚拟ip隐藏)
2、实验环境准备
# 四台虚拟机模拟真实环境
# 客户端: 192.168.190.111
# 调度器: 192.168.190.112
# 服务器: RS1 : 192.168.190.113
# RS2 : 192.168.190.114
3、真实服务器
# 所有真实服务器线关闭NetworkManager
$ service NetworkManager stop
$ chkconfig NetworkManager on
# 开启本地环路子接口,并添加vip信息
$ cd /etc/sysconfig/network-scripts/
$ cp -a ifcfg-lo ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.190.100 #虚拟IP (vip)
NETMASK=255.255.255.255
# 添加所有网卡公告及响应级别(末尾直接添加即可)
$ vim /etc/sysctl.conf
#lvs 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 = 2
$ sysctl -p # 刷新内核参数
$ ifup lo:0 # 启动子接口
$ ifconfig
# 添加路由记录,并设置为开机自启
$ /sbin/route add -host 192.168.190.100 dev lo:0
$ echo "/sbin/route add -host 192.168.190.100 dev lo:0" >> /etc/re.local
# 两台服务器分别添加测试服务需要的程序及页面
$ yum -y install httpd
$ service httpd start
$ chkconfig httpd on
$ echo "ceshi-111" >> /var/www/html/index.html
$ curl localhost # 查看网页内容是否添加
4、负载调度器
# 关闭NetworkManager
$ service NetworkManager stop
$ chkconfig NetworkManager on
# 开启网卡子接口
$ cd /etc/sysconfig/network-scripts/
$ cp -a ifcfg-eth0 ifcfg-eth0:0
$ vim ifcfg-eth0:0
DEVICE=eth0:0
IPADDR=192.168.190.100 #虚拟IP
NETMASK=255.255.255.0
$ ifup eth0:0
$ ifconfig
# 设置关闭网卡重定向功能
$ vim /etc/sysctl.conf
# lvs send_redirects
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
$ sysctl -p
# 加载ip_vs模块,并安装ipvsadm.
$ modprobe ip_vs
$ cat /proc/net/ip_vs
$ yum -y install ipvsadm
# 添加集群以及真实服务器
$ ipvsadm -v
$ ipvsadm -A -t 虚拟IP:80 -s rr
$ ipvsadm -a -t 虚拟IP:80 -r 真实服务器:80 -g
$ ipvsadm -a -t 虚拟IP:80 -r 真实服务器:80 -g
$ ipvsadm -Ln
$ service ipvsadm save
$ chkconfig ipvsadm on
5、测试
$ curl 10.10.10.11 或
$ while 2>1; do curl 10.10.10.11; sleep 1s; done
# 调度器查看规则,并查看当前连接状态
$ ipvsacm -Ln --stats
6、LVS健康监测脚本
#调度器添加健康监测脚本(DR模式脚本没问题,若NAT模式端口不是80此脚本不可用)
$ mkdir /usr/local/script
$ cd /usr/local/script
$ vim check_server.sh
#!/bin/bash
VIP=192.168.190.100 #集群虚拟IP
CPORT=80 #定义集群端口
FAIL_BACK=127.0.0.1 #本机回环地址
RS=("192.168.190.113" "192.168.190.114") #编写集群地址
declare -a RSSTATUS #变量RSSTATUS定义为数组态
RW=("1" "1") #权重
RPORT=80 #定义集群端口
TYPE=g #制定LVS工作模式:g=DR m=NAT
CHKLOOP=3
LOG=/var/log/ipvsmonitor.log
addrs() {
ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
[ $? -eq 0 ] && return 0 || return 1
}
delrs() {
ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
[ $? -eq 0 ] && return 0 || return 1
}
checkrs() {
local I=1
while [ $I -le $CHKLOOP ]; do
if curl --connect-timeout 1 http://$1 &> /dev/null; then
return 0
fi
let I++
done
return 1
}
initstatus() {
local I
local COUNT=0;
for I in ${RS[*]}; do
if ipvsadm -L -n | grep "$I:$RPORT" && > /dev/null ; then
RSSTATUS[$COUNT]=1
else
RSSTATUS[$COUNT]=0
fi
let COUNT++
done
}
initstatus
while :; do
let COUNT=0
for I in ${RS[*]}; do
if checkrs $I; then
if [ ${RSSTATUS[$COUNT]} -eq 0 ]; then
addrs $I ${RW[$COUNT]}
[ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG
fi
else
if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then
delrs $I
[ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG
fi
fi
let COUNT++
done
sleep 5
done
# 给X权限,并启动脚本
$ chmod a+x check_server.sh
$ ./check_server.sh
7、健康状态测试
# 配置实验环境(关闭一台服务器的HTTPd)
service httpd stop
# 观察客户端获取状态
# 调度器查看规则
ipvsadm -Ln #列出规则
# 开启关闭的httpd服务
service httpd start
# 观察客户端获取状态
# 调度器查看规则
ipvsadm -Ln #列出规则
8、LVS持久化连接
# 把同一个 client 的请求信息记录到 lvs 的 hash 表里,保存时间使用persistence_timeout控制,单位为秒。如果用户配置了持久化时间persistence_timeout,当客户端的请求到达 LB 后,IPVS 会在记录表里添加一条 state 为 NONE 的连接记录。该连接记录的源 IP 为客户端 IP,端口为 0,超时时间为上面所说的持久化时间 persistence_timeout ,会逐步减小。当 NONE 的超时时间减到 0 时,如果 IPVS 记录中还存在 ESTABLISHED 或 FIN_WAIT 状态的连接,则 persistence_timeout 值会刷新为初始值。在该 NONE 状态的连接记录存在的期间,同一客户端IP的消息都会被调度到同一个 RS 节点
# 调度器清除原有的集群,添加持久化集群(-p 持久化时间)
$ ipvsadm -D -t 192.168.190.100:80
$ ipvsadm -Ln
$ ipvsadm -A -t 192.168.190.100:80 -s rr -p 200
$ ipvsadm -a -t 192.168.190.100:80 -r 192.168.190.113:80 -g
$ ipvsadm -a -t 192.168.190.100:80 -r 192.168.190.114:80 -g
$ ipvsadm -Ln
$ ipvsadm -Ln --stats
$ ipvsadm -Lnc #-c 持久化连接的列表
三、四七层负载,识别域名
1、实验环境准备
# 四层 :高并发(nginx)
# 七层 :安全、识别主机名和域名(LVS)
# 实验最低六台虚拟机
# LVS : 192.168.190.111
# nginx1: 192.168.190.112
# nginx2: 192.168.190.113
# 服务器:1 www.wyy1.com 192.168.190.114
# 2 www.wyy2.com 192.168.190.115
# 3 mail.wyy.com 192.168.190.116
# 验证负载和域名最少需要的虚拟机数
2、真实服务器
# 三台服务器分别配置实验所需环境
$ yum -y install httpd
$ service httpd start
$ chkconfig httpd on
$ echo "www.wyy1.com" >> /var/www/html/index.html
$ echo "www.wyy2.com" >> /var/www/html/index.html
$ echo "mail.wyy.com" >> /var/www/html/index.html
$ curl localhost
3、配置nginx服务器
# 源码安装nginx
$ tar -zxvf nginx-1.18.0.tar.gz
$ useradd -s /sbin/nologin -M nginx
$ yum -y install pcre pcre-devel zlib zlib-devel
$ cd nginx-1.18.0
$ ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
$ make && make install
$ vim /usr/local/nginx/conf/nginx.conf
# www.wyy.com upstream
upstream www.wyy.com {
server 192.168.190.114:80;
server 192.168.190.115:80;
}
# mail.wyy.com upstream
upstream mail.hongfu.com {
server 192.168.190.116:80;
}
# www.wyy.com vhost
server {
listen 80;
server_name www.wyy.com;
location / {
proxy_pass http://www.wyy.com;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# mail.wyy.com vhost
server {
listen 80;
server_name mail.wyy.com;
location / {
proxy_pass http://mail.wyy.com;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4、测试
# 在windows的host文件中添加
192.168.190.112 www.wyy.com
192.168.190.112 mail.wyy.com
# 在浏览器中测试
www.wyy.com # 刷新查看是否负载均衡
mail.wyy.com # 查看是否识别域名
5、第二台nginx服务器配置
$ yum -y install pcre pcre-devel zlib zlib-devel
$ useradd -s /sbin/nologin -M nginx
# 第一台nginx服务器操作
$ pkill nginx
$ scp -r /usr/local/nginx root@192.168.190.113:/usr/local/
# 两台nginx分别启动
$ /usr/local/nginx/sbin/nginx
6、构建四层服务
#两台nginx服务器关闭NetworkManager
$ service NetworkManager stop
$ chkconfig NetworkManager off
#开启子接口
$ cd /etc/sysconfig/network-scripts/
$ cp -a ifcfg-lo ifcfg-lo:0
$ vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.190.100 #虚拟IP (vip)
NETMASK=255.255.255.255
#尾部添加设置所有网卡的公告以及响应级别
$ vim /etc/sysctl.conf
#lvs 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 = 2
$ sysctl -p #刷新内核参数
$ ifup lo:0 #启动子接口
$ ifconfig
# route add -host 虚拟IP dev lo:0 #添加路由记录
$ /sbin/route add -host 192.168.190.100 dev lo:0
$ route -n
#添加开机自启
$ echo "/sbin/route add -host 192.168.190.100 dev lo:0" >> /etc/rc.local
7、调度器配置
# 关闭NetworkManager
$ service NetworkManager stop
chkconfig NetworkManager off
# 开启设置子接口
$ cd /etc/sysconfig/network-scripts/
$ cp -a ifcfg-eth0 ifcfg-eth0:0
$ vim ifcfg-eth0:0
DEVICE=eth0:0
IPADDR=192.168.190.100 #虚拟IP
NETMASK=255.255.255.0
$ ifup eth0:0 启动虚拟网卡
$ ifconfig
# 设置关闭网卡重定向功能
$ vim /etc/sysctl.conf
# lvs send_redirects
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
$ sysctl -p
# 安装ip_vs命令管理工具
$ modprobe ip_vs
$ cat /proc/net/ip_vs
$ yum -y install ipvsadm
# 添加集群
$ ipvsadm -v
$ ipvsadm -A -t 虚拟IP:80 -s rr
$ ipvsadm -a -t 虚拟IP:80 -r 真实服务器nginx:80 -g
$ ipvsadm -a -t 虚拟IP:80 -r 真实服务器nginx:80 -g
$ ipvsadm -Ln
$ service ipvsadm save
$ chkconfig ipvsadm on
$ ipvsadm -Ln --stats
四、Keepalived 高可用
1、keepalived高可用方案
# 工作方式
# 两台lvs分别做一个调度器,另一个为高可用节点,两者之间绑定一个vip,用户通过访问vip,而达到随机访问lvs的效果,实现高可用。
1)基本概念
# 虚拟设备:
# 由一个“主( Master )”设备和多个“备( Backup )"设备组成的一个虚拟网关
# 主设备( Master ):
# 负责转发数据报文和周期性向备设备发送 VRRP 协议报文
# 备设备( Backup ):
# 不负责转发数据报文,在 Master 设备发生故障的时候会通过选举形式成为新的 Master 设备,该角色会接收来自 Master 设备的 VRRP 报文并加以分析
# VRID:
# 用来表示一个 VRRP 组
# 虚拟IP:
# 配置在虚拟设备上的虚拟IP地址,一个虚拟设备可以拥有一个或者多个虚拟IP地址。
# IP 地址拥有者:
#分配给虚拟设备的虚拟 IP 的真实拥有者,IP 拥有者会直接跳过选举成为 Master,并且是不可抢占的
# 虚拟 MAC 地址:
# 由虚拟设备生成的虚拟 MAC 地址,每一个虚拟设备都会自动生成一个虚拟MAC 地址,这个 MAC 地址是用于虚拟设备处理 ARP 报文的
# 优先级:
#用于表示物理设备的优先级,这个参数用于 Master 的选举,取值范围是 1-254,这个有优先级有两个比较特殊的值,分别是 0 和 255,优先级 0 是由原来 Master 设备发送的,这个优先级是声明此设备不再参与 VRRP 组。优先级为 255 的是 IP 拥有者的优先级,拥有这个优先级会直接成为 Master。(优先级数值越低优先级则越高)Backup 设备,则 Backup 设备会切换为 Master 设备。
2)VRRP的三种状态
# VRRP 一共有三种状态,
# 分别是:初始状态( Initialize)、活动状态( Master )、备份状态( Backup)
# 初始状态( Initialize ):
# 在这个状态下 VRRP 是不可用的,在这个状态下的设备是不会处理 VRRP 报文的,通常是刚配置 VRRP 时和检测到故障是会是这个状态
# 活动状态 (Master ):
# 定期发送 VRRP 报文
# 以虚拟 MAC 地址响应对虚拟 IP 地址的 ARP 请求
# 转发目的 MAC 地址为虚拟 MAC 地址的 IP 报文
# 如果它是这个虚拟 IP 地址的拥有者,则接收目的 IP 地址为这个虚拟 IP 地址的 IP 报文。否则,丢弃这个 IP 报文
# 如果收到比自己优先级大的报文则转为 Backup 状态
# 如果收到优先级和自己相同的报文,并且发送端的 IP 地址比自己的 IP 地址大,则转为 Backup 状态
# 当接收到接口的 Shutdown 事件时,转为Initialize
# 备份状态( Backup ):
# 接收 Master 发送的 VRRP 报文,判断 Master 的状态是否正常
# 对虚拟 IP 地址的 ARP 请求,不做响应
# 丢弃目的 MAC 地址为虚拟 MAC 地址的 IP 报文
# 丢弃目的 IP 地址为虚拟 IP 地址的IP报文
# Backup 状态下如果收到比自己优先级小的报文时,丢弃报文,立即切换为 Master( 仅在抢占模式下生效 )
# 如果收到优先级和自己相同或者比自己高的报文,则重置定时器,不进一步比较 IP
# 地址当接收到接口的 Shutdown 事件时,转为 Initialize
# 如果 MASTER_DOWN_INTERVAL 定时器超时,则切换为 Master
3)VRRP 工作模式:
# 主备备份模式:
# 一主一从,主工作从备份。
# 负载分担模式:
# 按照轮询的方案,让路由器轮流处理。
2、实验环境
# 四台虚拟机:
# 调度器1:192.168.190.111
# 真实服务器:1 192.168.190.112
# 2 192.168.190.113
# 调度器2:192.168.190.114
3、真实服务器
# 关闭所有真实服务器的NetworkManager
$ service NetworkManager stop
$ chkconfig NetworkManager off
# 开启本地回环网卡子接口
$ cd /etc/sysconfig/network-scripts/
$ cp -a ifcfg-lo ifcfg-lo:0
$ vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.190.100 #虚拟IP (vip)
NETMASK=255.255.255.255
#尾部添加设置所有网卡的公告以及响应级别
$ vim /etc/sysctl.conf
#lvs 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 = 2
$ sysctl -p # 刷新内核参数
$ ifup lo:0 # 启动子接口
$ ifconfig # 查看子接口是否启动
# 添加路由记录,并开机自启
$ /sbin/route add -host 192.168.190.100 dev lo:0
$ echo "/sbin/route add -host 192.168.190.100 dev lo:0" >> /etc/rc.local
$ route -n
# 两台服务器分别开启httpd服务,并添加测试页面
$ yum -y install httpd
$ service httpd start
$ chkconfig httpd on
$ echo "PAGE1" >> /var/www/html/index.html
$ echo "PAGE2" >> /var/www/html/index.html
$ curl localhost #查看添加的测试内容
4、调度器1
1)调度器环境配置
# 关闭服务器的NetworkManager
$ service NetworkManager stop
$ chkconfig NetworkManager off
#开启网卡子接口
$ vcd /etc/sysconfig/network-scripts/
$ cp -a ifcfg-eth0 ifcfg-eth0:0
$ vim ifcfg-eth0:0
DEVICE=eth0:0
IPADDR=192.168.190.100 #虚拟IP
NETMASK=255.255.255.0
$ ifup eth0:0 启动虚拟网卡
$ ifconfig
# 尾部添加设置关闭网卡重定向功能
$ vim /etc/sysctl.conf
# lvs send_redirects
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
$ sysctl -p
# 安装ip_vs命令管理工具
$ modprobe ip_vs
$ 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
$ yum -y install ipvsadm
# 添加集群
$ ipvsadm -v
$ ipvsadm -A -t 虚拟IP:80 -s rr
$ ipvsadm -a -t 虚拟IP:80 -r 真实服务器:80 -g
$ ipvsadm -a -t 虚拟IP:80 -r 真实服务器:80 -g
$ ipvsadm -Ln
$ service ipvsadm save
$ chkconfig ipvsadm on
2)编译安装keepalived
# 安装依赖,并上传下载的keepalived的镜像
$ yum -y install kernel-devel openssl-devel popt-devel gcc*
$ mkdir /iso
$ mount -o loop keepdlived.iso /iso/
$ cp -a /iso/* . # 放在家目录下
# 解压并安装
$ tar -zxvf keepalived....
$ cd keepalived.....
$ ./configure --prefix=/ --whth-kernel-dir=/usr/src/kernels/2......
$ make && make install
3)修改keepalived配置文件
$ vim /etc/keepalived/keepalived.conf
global_defs {
router_id R1 #命名主机名 #将管理发送邮件的地址删除,只剩下用户名称
}
vrrp_instance VI--1 {
# 设置服务类型主/从( MASTER/SLAVE )
state MASTER
# 指定那块网卡用来监听心跳探测
int erface eth0
# 设置组号,如果是一组就是相同的ID号,一个主里面只能有一个主服务器和多个从服务器
virtual_router_id 66
# 服务器优先级, 主服务器优先级高
priority 100
# 心跳检测时间, 检测对方存活
advert_int 1
authenticetion { #发送报文时的加密方案
auth_type PASS #密码类型
auth_pass 1111 #密码
}
virtual_ipaddress { #设置主从需要的vip地址
192.168.190.100
}
}
#以下内容专门给lvs集群准备的,如果不是lvs集群则不需要
virtual_server 192.168.190.100 80 {
# 健康检查间隔 #生产环境中时间6秒
delay_loop 1
# 使用轮询调度算法
lb_algo rr
#修改为 DR模式的群集
lb_kind DR
# 使用的协议
protocol TCP
#删除多余内容,添加真实服务器内容,有几个复制几次即可
real_server 192.168.190.112 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 4
}
}
real_server 192.168.190.113 80 { # 真实服务器的地址
weight 1 #真实服务器的权重
TCP_CHECK { #真实服务器的检测方式
connect_port 80 #真实服务器的端口
connect_timeout 3 #检测端口的超时时间、
nb_get_retry 3 #检测重试的次数
delay_before_retry 4 #检测的间隔
}
}
}
$ /etc/init.d/keepalived start
$ chkconfig --add keepalived
$ chkconfig keepalived on
$ cat /var/log/messages
#Jan 11 11:45:54 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Sending
#gratuitous ARPs on eth0 for 192.168.190.100
$ ip add show
inet 192.168.190.100/32 scope global eth0
5、调度器2
# 关闭NetworkManager
$ service NetworkManager stop
$ chkconfig NetworkManager on
#开启设置子接口
$ cd /etc/sysconfig/network-scripts/
$ cp -a ifcfg-eth0 ifcfg-eth0:0
$ vim ifcfg-eth0:0
DEVICE=eth0:0
IPADDR=192.168.190.100 #虚拟IP
NETMASK=255.255.255.0
$ ifup eth0:0 启动虚拟网卡
# 若有报错,修改配置文件
$ vim /etc/sysconfig/network-scripts/ifup-eth
247 #将if判断语句注释掉
$ ifconfig
# 设置关闭网卡重定向功能
$ vim /etc/sysctl.conf
# lvs send_redirects
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
$ sysctl -p
# 安装ip_vs命令管理工具
$ modprobe ip_vs
$ cat /proc/net/ip_vs
$ yum -y install ipvsadm
# 调度器1将keepalived安装包发送到调度器2
$ scp -r keepalived-1.2.2.tar.gz root@192.168.190.114:/root/
# 调度器2安装keepalived
$ yum -y install kernel-devel openssl-devel popt-devel gcc*
$ tar -zxf keepalived.....
$ cd keep.....
$ ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2........../
$ make
$ make install
# 调度器1将配置文件发送到调度器2
$ scp -r /etc/keepalived/keepalived.conf root@192.168.190.114:/root/
# 调度器2修改配置文件
$ cp -a /root/keepalived.conf /etc/keepalived/keepalived.conf
$ vim /etc/keepalived/keepalived.conf #仅修改以下内容
router_id R2 # 命名主机名
state SLAVE
priority 50
$ /etc/init.d/keepalived start
$ chkconfig --add keepalived
$ chkconfig keepalived on
$ ipvsadm -Ln #多执行几次
# 调度器1重启keepalived。
$ /etc/init.d/keepalived restart
7、模拟测试
# windows浏览器测试
192.168.190.100
1)lvs机器损坏
# 调度器1关闭网卡测试是否能访问
$ ipvsadm -Ln
# 调度器1开启网卡测试效果
$ ipvsadm -Ln
2)httpd服务器损坏
# 关闭其中一台的httpd服务测试效果
$ ipvsadm -Ln
# 打开关闭的httpd服务、
$ ipvsadm -Ln
#实验结果:
#无论哪种情况,都不会导致访问中断。keepalived实现了,LVS的高可用方案。
五、Heartbeat高可用方案
1、Heartbeat简介
# Heartbeat 是 Linux-HA 工程的一个组件,自 1999 年开始到现在,发布了众多版本,是目前开源 Linux-HA 项目最成功的一个例子,在行业内得到了广泛的应用
2、实验环境
#两台虚拟机:
# 服务器1:192.168.190.111
# 服务器2:192.168.190.112
3、构建前提
# 两台主机名要不一致,修改主机名
$ /etc/sysconfig/network
HOSTNAME=www.centos1.com
HOSTNAME=www.centos2.com
# 配置主机名解析( uname -n 主机名检测 )
$ vim /etc/hosts
192.168.190.111 www.centos1.com
192.168.190.112 www.centos2.com
$ scp -r /etc/hosts root@www.centos2.com:/etc/hosts
4、服务器安装heartbeat
#两台服务器分别安装heartbeat服务
$ yum -y install lrzsz
#上传软件包并解压
$ tar -zxvf heartbeat.tar.gz
$ scp -r heartbeat root@192.168.190.112:/root/
$ cd heartbeat
$ yum -y install *
#两台服务器分别安装httpd服务,并添加测试页面
$ yum -y install httpd
$ service httpd start
$ chkconfig httpd on
$ echo "www1.hongfu.com" >> /var/www/html/index.html
$ echo "www2.hongfu.com" >> /var/www/html/index.html
$ curl localhost
5、修改配置文件
$ cd /usr/share/doc/heartbeat-3.0.4/
$ cp -a ha.cf authkeys haresources /etc/ha.d/
$ cd /etc/ha.d/
1) 认证服务,节点之间的认证配置,修改 /etc/ha.d/authkeys
# dd if=/dev/random bs=512 count=1 | openssl md5 #生成密钥随机数
$ vim /etc/ha.d/authkeys # 取消注释,并修改
auth 3
3 md5 a4d20b0dd3d5e35e0f87ce4266d1dd64 #md5 加密算法 随便写一串
$ chmod 600 authkeys
2) heartbeat 主配置文件,修改 /etc/ha.d/ ha.cf
$ vim /etc/ha.d/ ha.cf #取消注释并修改
bcast eth0
node www.centos1.com
node www.centos2.com
3)配置 haresources 文件
$ vim haresources #在结尾处添加
www.centos1.com IPaddr::192.168.190.100/24/eth0:0
#IPaddr脚本位置/etc/ha.d/resource.d
6、将主三个配置文件拷贝到从上
$ cd /etc/ha.d/
$ scp -r ha.cf authkeys haresources root@192.168.190.112:/etc/ha.d/
7、分别启动heartbeat服务
$ /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
Done
$ ifconfig
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:D1:A0:83
inet addr:192.168.190.100 Bcast:192.168.190.255
Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
#可以看出heartbeat 是直接启动一个子接口达到访问切换的目的
8、测试
# windwos浏览器
192.168.190.100
1)其中一台服务器损坏
# 可以访问到另一台证明高可用
2)httpd应用损坏
# 不可以访问了。
9、Heartbeat 检测脚本实现高可用性
# 两台服务器添加脚本
$ mkdir /usr/local/script
$ cd /usr/local/script
$ vim jiankong.sh
#!/bin/bash
URL="http://192.168.190.111/index.html"
HTTP_CODE=`/usr/bin/curl -o /dev/null -s -w "%{http_code}" "${URL}"`
if [ $HTTP_CODE != 200 ]
then
/etc/init.d/heartbeat stop
fi
# 两台服务器创建脚本权限
$ chmod a+x jiankong.sh
$ ./jiankong.sh
# 两台服务器创建脚本定时计划任务
$ crontab -e
*/1 * * * * /bin/bash /usr/local/script/jiankong.sh
#第二台服务器添加脚本
scp -r /usr/local/script root@192.168.190.112:/usr/local/
#修改内容ip,并做定时计划任务
#两台服务器重载crond
service crond restart
#测试httpd关闭情况下能否正常访问,实现高可用性
注:本文为博主查阅多方资料整理而成,如有错误或侵权请留言联系博主修改或删除。
注:本文为博主查阅多方资料整理而成,如有侵权请留言联系博主删除。
学习新东西,不要忘记复习旧知识,这样你才能更好!