HA+LB图形界面管理
以 Piranha Configuration Tool 配 置 Load Balancer 外挂程式
环境:rhel6.5
两个HA主机:192.168.2.228 node1.example.com 192.168.2.246 node2.example.com
两个LVS主机:192.168.2.226 node3.example.com 192.168.2.15 vm1.example.com
HA192.168.2.228主机上:
yum install -y piranha 用piranha配置工具
piranha-passwd 设置密码
/etc/init.d/piranha-gui start
netstat -antlp 端口是3636
piranha-gui服务,唯有在主节点上
/etc/sysconfig/ha/lvs.cf 配置文件,图形界面里设置好后,会自动同步到文件里
另一HA机192.168.2.246上:
yum install -y piranha
网页访问192.168.2.228:3636
登录用户piranha,密码为自己设置的密码
global setting:(主)
REDUNDENCY:(备)
注意端口不要跟别人冲突。
VIRTUAL SERVERS:(虚拟服务)
virtual server:
添加虚拟IP地址,选择RR轮转算法。
real server:(添加两台要访问的主机ip)
激活所有节点。
图形界面里设置好后,会自动同步到文件/etc/sysconfig/ha/lvs.cf里,若要微调,可以直接修改文件。修改文件后需重启服务。
在两个LVS主机上都执行以下操作:
yum install -y arptables_jf httpd
绑定虚拟IP,在所有真实伺服器上配置虚拟IP位址,建立IP别名。:
ifconfig eth0:0 192.168.2.148 netmask 255.255.255.255
arptables -A IN -d 192.168.2.148 -j DROP
arptables -A OUT -s 192.168.2.148 -j mangle --mangle-ip-s 192.168.2.15(226主机也是)
#arptables -A OUT -s <virtual_ip> -j mangle --mangle-ip-s <real_ip>
这会导致真实伺服器忽略所有针对虚拟ip位址的arp请求,并改变任何向外arp回应,把原先包含虚拟IP的ARP回应改为包含真实伺服器的IP。唯一应该要回应任何VIP的ARP请求的节点,为目前启用的LVS节点。
/etc/init.d/arptables_jf save
/etc/init.d/arptables_jf start
chkconfig arptables_jf on
/etc/init.d/httpd start #需开启两个real server的httpd
echo `hostname` > index.html #给http写测试文件
两台HA主机etc/init.d/pulse start
网页测试:192.168.2.148
1.若两个HA主机228(主)和246的后台服务pulse全部开启,15和226主机的httpd都开启,刷新页面会轮循出现15和226的主机名。
当15的httpd关掉,刷新页面只会出现226主机名。
主节点ipvsadm -L查看
2.若228主节点/etc/init.d/pulse stop,则由备节点246接管,228复活之后不会回切。
ifconfig查看
备HA节点会显示STARTING PULSE AS BACKUP.
KeepAlived+LVS
环境:rhel6.5
两个HA主机:192.168.2.228 node1.example.com 192.168.2.246 node2.example.com
两个LVS主机:192.168.2.226 node3.example.com 192.168.2.15 vm1.example.com
HA机228 node1:
下载包keepalived-1.2.12.tar.gz
tar zxf keepalived-1.2.12.tar.gz
cd keepalived-1.2.12
./configure –prefix=/usr/local/keepalived #源码编译,yum install -y make gcc
安装包依赖性:yum install -y openssl-devel libnl-devel
make && make install 编译并安装,成功后生成/usr/local/keepalived/目录
cd /usr/local/keepalived/etc
因为只读/etc/keepalived/keepalived.conf文件,所以需建立软链接
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #接收警报的 email地址,可以添加多个
}
[email protected] #设置邮件的发送地址
smtp_server 127.0.0.1 #设置 smtp server 地址
smtp_connect_timeout 30 #设置连接smtp 服务器超时时间
router_id LVS_DEVEL #load balancer 的标识 ID,用于email 警报
}
vrrp_instance VI_1 {
state MASTER #备机改为 BACKUP,此状态是由priority 的值来决定的,当前
priority的值小于备机的值,那么将会失去MASTER 状态
interface eth0 #HA 监测网络接口
virtual_router_id 133 #主、备机的virtual_router_id 必须相同,取值0-255
priority 100 #主机的优先级,备份机改为50,主机优先级一定要大于备机
advert_int 1 #主备之间的通告间隔秒数
authentication { #主备切换时的验证
auth_type PASS #设置验证类型,主要有PASS 和 AH两种
auth_pass 1111 #设置验证密码,在一个vrrp_instance 下,MASTER与 BACKUP 必
须使用相同的密码才能正常通信
}
virtual_ipaddress { #设置虚拟IP 地址,可以设置多个虚拟IP 地址,每行一个
192.168.2.148
}
}
virtual_server 192.168.2.148 80 { #定义虚拟服务器
delay_loop 6 #每隔 6 秒查询realserver 状态
lb_algo rr #lvs 调度算法,这里使用轮叫
lb_kind DR #LVS 是用 DR 模式
#persistence_timeout 50 #会话保持时间,单位是秒,这个选项对于动态网页是非常有
用的,为集群系统中session共享提供了一个很好的解决方案。有了这个会话保持功能,用户的
请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保
持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在50 秒内没有执行任
何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受50 秒
的时间限制。
protocol TCP #指定转发协议类型,有tcp 和 udp两种
real_server 192.168.2.226 80 { #配置服务节点
weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权
值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设
置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统
资源
TCP_CHECK { #realserve 的状态检测设置部分,单位是秒
connect_timeout 3 #10 秒无响应超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
}
}
real_server 192.168.2.15 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
/etc/init.d/keepalived start
scp -r /usr/local/keepalived/ node2.example.com:/usr/local/ #直接发送给node2,node2就不用编译安装里。
在node2上:
建立软链接
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin
vim /etc/keepalived/keepalived.conf
注:备机的keepalived 配置文件只改动红色字体部分!
测试:
1.高可用测试:停止master 上的 keepalived服务,看 backup是否接管。与piranha不同的是master主机的keepalived服务挂掉,交给BACKUP接管,当master恢复后,会切回到master。
2.负载均衡测试:访问http://192.168.2.148,看到页面在两个realserver 上切换表示成功!
你也可以通过ipvsadm -L查看详细连接情况!
3.故障切换测试:任意关闭realserver 上的 httpd服务,Keepalived监控模块是否能及时发现,
然后屏蔽故障节点,同时将服务转移到正常节点来执行,故障会发送邮件。
Haproxy ,是http模式,与LVS不一样,是代理。
环境:rhel6.5
HAproxy主机:192.168.2.228 node1.example.com
两个real server主机:192.168.2.226 node3.example.com 192.168.2.15 vm1.example.com
nginx和haproxy适合做网站调度的负载均衡,lvs适合做应用层数据库的负载均衡。
HAProxy提供高可用性、负载均衡以及基于TCP 和HTTP应用的代理,支持虚拟主机,
它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的 web站
点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可
以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整 合进您当前
的架构中,同时可以保护你的 web服务器不被暴露到网络上。好处:在real server上不需要做任何设置,只需开启httpd即可。
在Haproxy机node1上:
下载包haproxy-1.4.24.tar.gz
rpm包方式安装:
yum install -y rpm-build
rpmbuild -tb haproxy-1.4.24.tar.gz #把tar包转换成二进制文件
软件包依赖性:yum install -y pcre-devel
rpm -ivh rpmbuild/RPMS/x86_64/haproxy-1.4.24-1.x86_64.rpm #安装rpm包
mkdir /usr/share/haproxy
vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0 #指定日志设备
log 127.0.0.1 local1 notice #指定日志类型,还有err warning debug
#log loghost local0 info
maxconn 4096 #并发最大连接数量
chroot /usr/share/haproxy #家目录,锁在这个目录,不会牵扯其他目录
uid 99 #用户
gid 99 #组
daemon #后台运行
#debug
#quiet
defaults
log global
mode http #默认使用 http的 7层模式 tcp: 4 层
option httplog #http 日志格式
option dontlognull #禁用空链接日志
retries 3 #重试 3次失败认为服务器不可用
option redispatch #当 client连接到挂掉的机器时,重新分配到健康的主机
maxconn 2000
contimeout 5000 #连接超时
clitimeout 50000 #客户端超时
srvtimeout 50000 #服务器端超时
stats uri /status #haproxy 监控页面
listen www.example.com *:80 #监听的实例名称(真机做解析),地址和端口
balance roundrobin #负载均衡算法
server web1 192.168.2.226:80 cookie app1inst1 check inter 2000 rise 2 fall 3
server web2 192.168.2.149:80 cookie app1inst2 check inter 2000 rise 2 fall 3
#cookie app1inst1:表示 serverid为 app1inst1
#check inter 2000:检测心跳频率
#rise 2:表示 2次正确认为服务器可用
#fall 5:表示 5次失败认为服务器不可用
/etc/init.d/haproxy start(保证httpd关闭,因为haproxy也监听80端口,会冲突)
访问192.168.2.228(HAnode1主机,即做Haproxy代理的主机),访问http://www.example.com测试负载 ,访问 haproxy监控页面:http://192.168.0.228/status
监控页面的认证
vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0 #指定日志设备
#log 127.0.0.1 local1 notice #屏蔽local1
log 127.0.0.1 local0 info #指定日志类型,还有err warning debug
maxconn 4096 #并发最大连接数量
chroot /usr/share/haproxy #家目录,锁在这个目录,不会牵扯其他目录
uid 99 #用户
gid 99 #组
daemon #后台运行
#debug
#quiet
defaults
log global
mode http #默认使用 http的 7层模式 tcp: 4 层
option httplog #http 日志格式
option dontlognull #禁用空链接日志
retries 3 #重试 3次失败认为服务器不可用
option redispatch #当 client连接到挂掉的机器时,重新分配到健康的主机
maxconn 2000
contimeout 5000 #连接超时
clitimeout 50000 #客户端超时
srvtimeout 50000 #服务器端超时
listen status *:8080 监听端口8080
stats enable
stats uri /status #监控页面地址
stats auth admin:123456 #管理帐号和密码
stats refresh 5s #刷新频率
/etc/init.d/haproxy restart
haproxy日志:
vi /etc/rsyslog.conf #接受 haproxy日志
$ModLoad imudp
$UDPServerRun 514
#### RULES #### #定义规则,日志地址
local0.* /var/log/haproxy.log
/etc/init.d/rsyslog restart
网页访问192.168.2.228:8080/status
输入验证用户名和密码
Haproxy + Keeplived整合
MASTER:
vim keepalived.conf
! Configuration File for keepalived
vrrp_script check_haproxy { #大括号前注意空格,否则不调用脚本
script "/etc/keepalived/check_haproxy"
interval 2
weight 2
}
global_defs {
notification_email {
root@localhost
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 133
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.148
}
track_script {
check_haproxy
}
}
BACKUP:
vim keepalived.conf
! Configuration File for keepalived
vrrp_script check_haproxy { #大括号前注意空格,否则不调用脚本
script "/etc/keepalived/check_haproxy"
interval 2
weight 2
}
global_defs {
notification_email {
root@localhost
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
stateBACKUP #区分master
interface eth0
virtual_router_id 133
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.148
}
track_script { #注意大括号前面的空格
check_haproxy
}
}
创建脚本vim /etc/keepalived/check_haproxy
#!/bin/bash
/etc/init.d/haproxy status &>/dev/null || /etc/init.d/haproxy restart &>/dev/null #检测haproxy状态不显示,要是状态不对,就重启服务。
if [ $? -ne 0 ];then #要是重启状态不成功,就关闭keepalived服务,切换到备机。
/etc/init.d/keepalived stop &>/dev/null
fi
chmod +x /etc/keepalived/check_haproxy
scp check_haproxy 192.168.2.242:/etc/keepalived/
scp /etc/haproxy/haproxy.cfg 192.168.2.242:/etc/haproxy/
scp haproxy-1.4.24-1.x86_64.rpm 192.168.2.242:/root/ #把haproxy发到backup机
scp /etc/rsyslog.conf 192.168.2.242:/etc/
/etc/init.d/httpd stop
/etc/init.d/haproxy stop
/etc/init.d/keepalived start
backup(242):
rpm -ivh haproxy-1.4.24-1.x86_64.rpm
/etc/init.d/rsyslog restart
/etc/init.d/httpd stop
/etc/init.d/haproxy stop
/etc/init.d/keepalived start
网页访问虚拟IP,主机备机keepalived一开启,haproxy就自动开启,主机挂掉,备机接管;主机恢复了,备机会把虚拟IP地址发给主机,主机继续接管。接管的机子上ip addr show查看具体情况。