运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • 操作系统

  • 域名解析

  • 公有云

  • CI&CD

  • 数据库

  • 负载均衡&反向代理

    • keepalived
    • haproxy问题
    • Nginx+keepalived
    • haproxy+keepalived
    • lvs三种模式和调度算法
    • lvs+keepalived
    • lvs+heartbeat
      • 安装ipvsadm、heartbeat
      • 配置主ha
      • 配置web1
      • 配置web2
    • nginx缓存加速应用
    • 智能DNS+squid反向代理
  • 存储系统

  • 容器&容器编排

  • 批量管理

  • 邮件系统

  • 监控系统

  • Web服务

  • 虚拟化

  • 防火墙

  • 压测

  • 文件同步

  • 私有云

  • 日志系统

  • 代码仓库&版本管理

  • 安全审计

  • 远程拨号

  • 大数据

  • 统一认证

  • 消息队列

  • Apollo

  • 运维杂记
  • 负载均衡&反向代理
lyndon
2022-06-11
目录

lvs+heartbeat

LVS+Heartbeat实现apache负载均衡高可用

# 部署准备

VIP 192.168.1.10

主ha服务器 eth0:192.168.1.11

​ eth1:192.168.200.101 (心跳线)

主机名lvs1: heartbeat+lvs+ldirectord

从ha服务器 eth0:192.168.1.12

​ eth1:192.168.200.102 (心跳线)

主机名lvs2: heartbeat+lvs+ldirectord

web1服务器 eth0:192.168.1.13

​ lo:0 :192.168.1.10

web2服务器 eth0:192.168.1.14

​ lo:0 :192.168.1.10

在四台主机上分别关闭防火墙和selinux安全机制

service iptables stop
setenforce 0
1
2

在主ha和从ha上修改主机名及hosts文件

主ha:

hostname lvs1
bash

vim /etc/hosts

127.0.0.1 primary.fantong.com localhost.localdomain localhost 

::1 localhost6.localdomain6 localhost6 

192.168.1.11 lvs1

192.168.200.101 lvs1

192.168.1.12 lvs2

192.168.200.102 lvs2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

从ha:

hostname lvs2
bash

vim /etc/hosts

127.0.0.1 primary.fantong.com localhost.localdomain localhost 

::1 localhost6.localdomain6 localhost6 

192.168.1.11 lvs1

192.168.200.101 lvs1

192.168.1.12 lvs2

192.168.200.102 lvs2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 配置主ha服务器

# 安装ipvsadm、heartbeat

安装ipvsadm

yum –y install ipvsadm

modprobe ip_vs  //加载ip_vs模块
1
2
3

安装heartbeat

image-20220611232552465

上传heartbeat的rpm包

Setup脚本内容:

#!/bin/bash

cd `dirname $0`

echo `pwd`

echo install lib64ltdl7

rpm -ivf lib64ltdl7-2.2.6-6.1mdv2009.1.x86_64.rpm

echo install perl-TimeDate

rpm -ivf perl-TimeDate-1.16-13.el6.noarch.rpm

echo install PyXML

rpm -ivf PyXML-0.8.4-19.el6.x86_64.rpm 

echo install cluster-glue-libs

rpm -ivf cluster-glue-libs-1.0.5-6.el6.x86_64.rpm 

echo install cluster-glue

rpm -ivf cluster-glue-1.0.5-6.el6.x86_64.rpm

echo install resource-agents

rpm -ivf resource-agents-3.9.5-24.el6_7.1.x86_64.rpm

echo install heartbeat

rpm -ivf heartbeat-3.0.4-2.el6.x86_64.rpm heartbeat-libs-3.0.4-2.el6.x86_64.rpm

echo install ldirectord

rpm -ivf heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm --nodeps

echo Done

exit 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

执行setup.sh脚本进行安装

sh setup.sh
1

# 配置主ha

软件安装完成以后会生成目录/etc/ha.d,该目录下存放heartbeat 的配置文件ha.cf,验证文件authkeys,资源文件haresources(注意:在heartbeat中,脚本都被称为资源)等,这三个文件是必不可少的,在rpm安装时默认这三个文件不在/etc/ha.d/目录下,需手动复制。软件包heartbeat-ldirectord 的作用是管理后端的realserver。比如后端某个realserver死掉了,会自动从列表当中删除该资源,当该资源恢复后再自动添加进去。配置文件是:/etc/ha.d/ldirectord.cf,默认也是没有的,需手动复制

cp /usr/share/doc/ heartbeat-3.0.4/ha.cf /etc/ha.d/ 

cp /usr/share/doc/ heartbeat-3.0.4/authkeys /etc/ha.d/ 

cp /usr/share/doc/ heartbeat-3.0.4/haresources /etc/ha.d/ 

cp /usr/share/doc/ heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
1
2
3
4
5
6
7

配置/etc/ha.d/ha.cf:

vim /etc/ha.d/ha.cf

24 debugfile /var/log/ha-debug 

29 logfile  /var/log/ha-log   //日志目录

34 logfacility  local0

48 keepalive 2           //主从切换的保持时间

56 deadtime 30      //宣布对方死亡时间

61 warntime 10      //警告时间

76 udpport   694  //主从之间的通信端口

121 ucast eth1 192.168.200.102    //采用单播方式探测心跳,bcast是广播方式,mcast是组播方式;后面的地址是对端从ha的心跳地址

157 auto_failback on //自动恢复,就是说如果主从故障中恢复会抢回主的位置

211 node  lvs1 //主节点主机名

212 node  lvs2 //从节点主机名

220 ping 192.168.1.250 //最好是网关地址

227 ping_group group1 192.168.1.11 192.168.1.12

228 ping_group group1 192.168.200.101 192.168.200.102

254 respawn hacluster /usr/lib64/heartbeat/ipfail

260 apiauth ipfail gid=haclient uid=hacluster //用户已经自动建立
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

配置/etc/ha.d/authkeys 验证文件

vim /etc/ha.d/authkeys
只看最后四行

23  auth 2  //去掉下面哪行的注释 就填上哪行的行号,此文件主从必须一样。

24  #1 crc // crc算法是求和

25  2 sha1 HI! // sha1是hash加密 HI!是被加密的值

26  #3 md5 Hello! // md5 加密 hello 加密值,在这里使用sha1加密
1
2
3
4
5
6
7
8
9
10

设置authkeys文件 的权限(注意:此文件主从必须都是600的权限)

chmod 600 /etc/ha.d/authkeys
1

配置/etc/ha.d/ ldirectord.cf

vim /etc/ha.d/ldirectord.cf

12 checktimeout=3 //隔3秒没有收到realserver的返回页面,ha认定宕机,服务将不使用该realserver提供服务

13 checkinterval=1 //间隔1秒访问一次realserver根目录的index.html文件

15 autoreload=yes //当realserver 恢复正常后自动加入队列提供服务

16 logfile="/var/log/ldirectord.log" // log日志的路径

17 logfile="local0"

21 quiescent=no //如果realserver出问题,立即从资源列表删除

24 virtual=192.168.1.10:80 // VIP 对外IP

25  real=192.168.1.13:80 gate //真实服务器前面必须空4格, gate表示采用的是lvs中DR模式,也可添加权重

26  real=192.168.1.14:80 gate

27     fallback=127.0.0.1:80 gate // real机器全部宕机由谁来承担,此为局部设置

28 service=http

29  request="test.html" //验证文件必须位于rs机器的网页根目录

30 receive="Test Page" //验证文件的内容必须相同

31 scheduler=rr // realserver的调动方法:轮询

34  protocol=tcp // tcp协议 也支持UDP协议

35    checktype=negotiate //有很多种,选择默认是negotiate通过页面来检测rs

36    checkport=80 //检测的端口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

配置/etc/ha.d/haresources

在最后一行处添加:

150 lvs1 IPaddr::192.168.1.10/24/eth0 lvs ldirectord
1

//主ha的主机名 + VIP(对外提供的IP)+ 需要启动的服务(lvs是下面脚本的名称)

添加资源脚本lvs文件(注意需要根据自身情况修改网卡名)

vim /etc/init.d/lvs

\#!/bin/bash

\# description: start LVS of DirectorServer 

\# website director vip. 

GW=192.168.1.250  //网关地址千万不要填错了,否则你的辅助(浮动)ip是无法访问的

WEB_VIP=192.168.1.10

WEB_RIP1=192.168.1.13

WEB_RIP2=192.168.1.14

. /etc/rc.d/init.d/functions 

logger $0 called with $1 

case "$1" in 

start) 

/sbin/ipvsadm -C 

/sbin/ipvsadm --set 30 5 60 

/sbin/ifconfig eth0:0 $WEB_VIP broadcast $WEB_VIP netmask 255.255.255.255 up 

/sbin/route add -host $WEB_VIP dev eth0:0 

/sbin/ipvsadm -A -t $WEB_VIP:80 -s rr

/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP1:80 -g -w 1 

/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP2:80 -g -w 1 

touch /var/lock/subsys/ipvsadm >/dev/null 2>&1 

/sbin/arping -I eth0 -c 5 -s $WEB_VIP $GW >/dev/null 2>&1 

;; 

stop) 

/sbin/ipvsadm -C 

/sbin/ipvsadm -Z 

ifconfig eth0:0 down 

route del $WEB_VIP >/dev/null 2>&1 

rm -rf /var/lock/subsys/ipvsadm>/dev/null 2>&1 

/sbin/arping -I eth0 -c 5 -s $WEB_VIP $GW 

echo "ipvsadmstoped" 

;; 

status) 

if [ ! -e /var/lock/subsys/ipvsadm ];then 

echo "ipvsadm is stoped" 

exit 1 

else 

ipvsadm -ln 

echo "..........ipvsadm is OK." 

fi 

;; 

*) 

echo "Usage: $0 {start|stop|status}" 

 

exit 1 

esac 

exit 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91

ldirectord 启动的时候会从/etc/init.d 和 /etc/ha.d/resource.d 下搜索资源(这里说的资源就是指脚本)

chmod 755 /etc/init.d/lvs

ln –s /etc/init.d/lvs /etc/ha.d/resource.d/lvs
1
2
3

设置heartbeat ipvsadm 的开机自启动

chkconfig heartbeat on 
chkconfig ipvsadm on
1
2

# 配置从ha服务器

安装ipvsadm、heartbeat过程与主ha服务器一致

其他配置文件通过主ha服务器scp到从ha服务器上修改即可

scp root@192.168.1.11:/etc/ha.d/* /etc/ha.d/
scp root@192.168.1.11:/etc/init.d/lvs /etc/init.d/lvs
1
2

scp复制到从ha服务器后,做以下修改

修改ha.cf

121 ucast eth1 192.168.200.101
1

注意看看authkeys的权限,最好重新加一下权限

chmod 600 /etc/ha.d/authkeys
1

资源脚本的链接

chmod 755 /etc/init.d/lvs 
ln –s /etc/init.d/lvs /etc/ha.d/resource.d/lvs
1
2

注意:

可以分别在主ha和从ha启动一下ldirectord,如果出现以下报错:

[root@localhost ~]# /etc/init.d/ldirectord start

Starting ldirectord... Can't locate LWP/UserAgent.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/sbin/ldirectord line 2401.

BEGIN failed--compilation aborted at /usr/sbin/ldirectord line 2401.

Failure

Ldirectord缺少依赖包

解决方法:

yum –y install perl-libwww-perl libwww-perl perl-MailTools

# 配置web

# 配置web1

创建脚本(用来设置VIP和屏蔽arp,否则会和其他机器产生冲突):

vim /opt/real.sh

\#!/bin/sh

VIP=192.168.1.10           

source /etc/rc.d/init.d/functions 

case "$1" in 

start) 

echo "start LVS of RealServer" 

/sbin/ifconfig lo:0 ${VIP} broadcast ${VIP} netmask 255.255.255.255 up 

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore 

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce 

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore 

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce 

;; 

stop) 

/sbin/ifconfig lo:0 down 

echo "Close LVS of RealServer" 

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore 

echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce 

echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore 

echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce 

;; 

*) 

echo "wrong,please use start|stop" 

exit 1 

esac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

修改权限:

chmod 755 /usr/local/real.sh
1

加入开机启动:

Vim /etc/rc.local 

/usr/local/real.sh start
1
2
3

可以先手动启动一下

/usr/local/real.sh start
1

创建验证页(web1和web2必须相同,否则无法通过ldirectord验证):

vim /var/www/html/test.html
Test Page
1
2

创建index.html测试页:

vim /var/www/html/index.html
test 1
1
2

# 配置web2

过程与配置web1一致,但创建测试页不同

创建index.html测试页:

vim /var/www/html/index.html
test 2
1
2

# 验证

启动主ha服务器

service heartbeat start
1

tail –f /var/log/ha-log //出现以下日志消息

image-20220611233127957

tail –f /var/log/message //出现以下日志消息

image-20220611233141419

ip a //查看是否获取到VIP

image-20220611233149731

ipvsadm –ln //查看节点服务器

image-20220611233158476

启动从ha服务器

service heartbeat start
1

tail –f /var/log/ha-log //出现以下日志消息

image-20220611233242200

tail –f /var/log/message //出现以下日志消息

image-20220611233251119

在主ha服务器没有挂掉之前,从ha服务器是不提供服务的,也就是说现在从ha服务器是没有VIP和节点服务器的

ip a

image-20220611233554369

ipvsadm –ln

image-20220611233603002

此时访问http://192.168.1.10/,刷新后以下两个画面轮流出现

image-20220611233610891

image-20220611233616817

还可以做以下验证:

1、关闭web1或者web1上任意一台web服务,看访问VIP是否正常

2、停止master节点上的heartbeat进程,看VIP是否会自动切换到backup节点;恢复master节点,停止backup上的heartbeat进程,看VIP是否会自动切换到master节点

3、将master节点关机,看VIP是否会自动切换到backup;开启master节点,关闭backup,看VIP是否会自动切换到master节点。测试时多观察一下heartbeat日志

上次更新: 2022/06/12, 15:48:09
lvs+keepalived
nginx缓存加速应用

← lvs+keepalived nginx缓存加速应用→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式