LVS高性能集群 ====负载均衡硬件设备
1、什么是LVS?
linux virtual service,linux虚拟服务,使用多台服务器一起工作来提高服务的访问和处理性能
2、lvs的工作模式
(1)nat:通过地址转换访问服务
(2)tun:通过IP隧道访问服务
(3)dr:直接调度访问服务 ====直接路由调度
1.轮寻
2.加权,根据硬件的好坏来设置权值
3.最小连接
4. 加权最小连接
5. 基于地址的最小连接调度
6. 目标
7. 源
3、调度算法
rr:轮询调度
wrr:加权轮询调度
lc:最小连接数调度
wlc:加权最小连接调度
dh:目标地址散列算法,以目标地址为关键字来查找一个静态的hash表来选择RS
sh:源地址散列算法,以源地址为关键字来查找一个静态的hash表来选择RS
lblc:基于地址的最小连接数调度
4、LVS的NAT模式配置
(1)客户端配置
ip地址
网关
(2)防火墙配置
ip地址
启用路由转发
配置NAT
(3)Director服务器配置
配置ip地址
配置网关
配置调度表
(4)RS服务器配置
配置ip地址
配置网关
启动相应服务
socket===把套接字放在一个文件然后用文件来连接
cookie ===保存用户的信息
session===保持客户机与服务器状态
(5)lvs的持久性连接
PCC(persistent client connecttions)方式:将来自于同一个客户端对所有端口的请求,
始终定向到上次选择的RS,缺点是不能实现不同的服务请求访问不同的RS。
# ipvsadm -A -t 10.0.5.150:0 -s rr -p 600
# ipvsadm -a -t 10.0.5.150:0 -r 10.0.5.151 -m
# ipvsadm -a -t 10.0.5.150:0 -r 10.0.5.152 -m
PPC(persistent port connecttions)方式:将来自于同一个客户端对同一个集群服务的请求
,始终定向到上次选定的RS
# ipvsadm -A -t 10.0.5.150:80 -s rr -p 600
# ipvsadm -a -t 10.0.5.150:80 -r 10.0.5.151:80 -m
# ipvsadm -a -t 10.0.5.150:80 -r 10.0.5.152:80 -m
PNMPP(persistent Netfilter Marked Packet Persistence):持久防火墙标记连接,
根据iptables的标记规则,将相关的服务标记为同一类别的请求
# iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 80
-j MARK --set-mark 10 (0-->99)
# iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 443
-j MARK --set-mark 10 (0-->99)
# iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 21
-j MARK --set-mark 20 (0-->99)
# iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 20
-j MARK --set-mark 20 (0-->99)
# ipvsadm -A -f 10 -s wrr -p 600
# ipvsadm -A -f 20 -s wrr -p 600
# ipvsadm -a -f 10 -r 10.0.5.151 -m -w 2
# ipvsadm -a -f 10 -r 10.0.5.152 -m -w 3
# ipvsadm -a -f 20 -r 10.0.5.153 -m -w 2
# ipvsadm -a -f 20 -r 10.0.5.154 -m -w 3
-w====权值
nat模式的缺点
只能承载流量小
结构上看调度服务器
5、LVS的DR模式
RS真实服务器回应:以调度服务器地址为原地址向防火墙回应
调度服务器目标IP不改,目标MAC地址改变
(1)客户端配置
ip地址
网关
(2)防火墙配置
ip地址
启用路由转发
配置NAT
service httpd stop
(3)调度服务器配置
ip地址
配置调度表
配置网关
地址改下
service httpd stop vim /etc/sysctl.
(4)真实服务器配置
ip地址
禁用真实服务器的arp广播和回应
1. # vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
2. # rpm -ivh arptables_jf*
# arptables -A IN -d 172.16.10.10 -j DROP
# ifconfig lo:0 172.16.10.10 netmask 255.255.255.0 broadcast 172.16.10.10
开启路由转发 vim /etc/sysctl.conf
添加网关 172.16.20.1
RS服务器虚拟IP可以在环回接口或者子接口配置
验证:
DR 模式优缺点
调度服务器单点负照===?
真实服务器坏了 调度服务器不能得到回应
优点:回包流量不经过前端服务器
缺点:由于修改二层封装,无法跨网段访问
6、keepalived+lvs实现高可用、高性能集群
(1)安装keepalived
# ./configure --prefix=/usr/local/keepalived --enable-snmp --enable-profile --with-kernel-version=2.6 --sysconfdir=/etc
# make && make install
(2)配置keepalived
# cd /etc/keepalived
# vim keepalived.conf
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lvs-s1
}
vrrp_instance VI_1 {
state MASTER ==========
interface eth0
virtual_router_id 30
priority 100 ===============
advert_int 1
authentication {
auth_type PASS
auth_pass aixocm
}
virtual_ipaddress {
172.16.10.10/24 dev eth0
}
}
virtual_server 172.16.10.10 80 {
delay_loop 3
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 60
protocol TCP
real_server 172.16.20.20 80 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 172.16.20.30 80 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
# vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -f /etc/keepalived/keepalived.conf"
7、heartbeat+ldirector+lvs实现高可用集群
(1)安装软件
# yum install PyXML resource-agents ipvsadm perl-MailTools perl-Net-SSLeay perl-libwww-perl perl-TimeDate perl-MailTools perl-Net* perl-IO-Socket* perl-Socket* cifs-utils PyXML nfs-utils
# yum install cluster-glue cluster-glue-libs
# rpm -ivh heartbeat-3.0.4-1.el6.x86_64.rpm heartbeat-devel-3.0.4-1.el6.x86_64.rpm heartbeat-libs-3.0.4-1.el6.x86_64.rpm ldirectord-3.9.2-2.fc17.1.x86_64.rpm
(2)配置heartbeat
# vim authkeys \\主备服务器之间进行通信的密钥配置文件
auth 3
3 md5 aixocm!
# chmod 600 authkeys
# vim ha.cf \\主配置文件文件
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth1 192.168.10.2 另外一台IP
auto_failback on
node Kenasel ======= uname -n
node server2
ping 10.0.2.253
respawn hacluster /usr/lib64/heartbeat/ipfail =====32位就LIB
apiauth ipfail gid=haclient uid=hacluster
deadping 30
#apiauth ipfail uid=hacluster
#apiauth default gid=haclient
conn_logd_time 60
compression bz2
compression_threshold 2
(3)配置haresource资源配置文件
# vim haresources
Kenasel IPaddr::10.0.5.200/16/eth0:0 ldirectord::/etc/ha.d/ldirectord.cf
ldirectord脚本放在/etc/ha.d/resource.d
(4)配置ldirectord进行lvs调度
# vim ldirectord.cf
checktimeout=3
checkinterval=1
autoreload=yes
logfile="/var/log/ldirectord.log"
logfile="local0"
emailalert="[email protected]"
emailalertfreq=3600
emailalertstatus=all
quiescent=no
virtual=10.0.5.200:80
real=10.0.5.10:80 gate 2
real=10.0.5.11:80 gate 3
service=http
scheduler=wrr
persistent=300
netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="test.html"
receive="ok!"
备份服务器只需改下ucast
8、heartbeat+iscsi+mysql实现高可用
资源迁移 IP 服务 磁盘
磁盘共享方式
(1)安装iscsi服务器端软件
# yum install scsi-target-utils
(2)设置配置文件进行iscsi共享
# vim /etc/tgt/targets.conf
<target iqn.2015-07-30.sxjy.com:mysql>
backing-store /dev/sdb1
incominguser admin aixocm
initiator-address 10.0.5.100
initiator-address 10.0.5.101
write-cache on
MaxConnections 2
</target>
#service tgtd start
# tgt-admin -show
lun===逻辑单元号
(3)客户端挂载设置
安装客户端软件
# yum install iscsi-initiator-utils
配置客户端认证
# vim /etc/iscsi/iscsid.conf
node.session.auth.authmethod = CHAP
node.session.auth.username = admin === 扫描使用
node.session.auth.password = aixocm
node.session.auth.username_in = admin ====挂载使用
node.session.auth.password_in = aixocm
/var/lib/ssicsi ===数据都保存在这,报错把这删掉重新挂载
# service iscsi start
# service iscsid start
资源迁移时时间要同步
rdate -s 10.0.2.253
扫描服务器的iscsi共享
# iscsiadm -m discovery -t sendtargets -p 10.0.2.220
挂载iscsi共享磁盘
# iscsiadm -m node -T iqn.2015-07-30.sxjy.com:mysql -p 10.0.2.220 -l
卸载iscsi共享磁盘
# iscsiadm -m node -T iqn.2015-07-30.sxjy.com:mysql -p 10.0.2.220 -u
# vim haresources
Kenasel IPaddr::10.0.5.200/16/eth0:0 filesystem::/database/mydata::ext4 mysqld
===filesystem,mysqld都为脚本
9、heartbeat+DRBD+mysql实现高可用
(1)安装DRBD
# yum install kernel kernel-devel flex
# ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-utils --with-km --with-udev --with-xen --with-pacemaker --with-heartbeat --with-bashcompletion --with-distro=redhat --with-initdir=/etc/init.d
# make && make install
# modprobe drbd
lsmod | grep brbd
(2)配置DRBD
# vim global_common.conf
global {
usage-count yes;
}
common {
handlers {
pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
}
startup {
}
options {
}
disk {
on-io-error detach;
}
net {
protocol C;
after-sb-0pri disconnect;
after-sb-1pri disconnect;
after-sb-2pri disconnect;
rr-conflict disconnect;
cram-hmac-alg sha1;
shared-secret "aixocm";
}
syncer {
rate 50M;
}
}
# vim r0.res
resource r0 {
on server1
{
device /dev/drbd0;
disk /dev/sdb1;
address 10.0.5.100:7788;
meta-disk internal;
}
on server2
{
device /dev/drbd0;
disk /dev/sdb1;
address 10.0.5.101:7788;
meta-disk internal;
}
}
(3)创建DRBD资源
# drbdadm create-md r0 两边都要做
# service drbd start \\主从服务器同时启动
# cat /proc/drbd \\查看DRBD状态
(4)将其中一台提升为主设备
# drbdsetup /dev/drbd0 primary --o
(5)格式化drbd设备
# mkfs.ext4 /dev/drbd0 一台操作就行
(6)挂载设备到需要的特定目录
# mount /dev/drbd0 /database/mydata
(7)配置heartbeat的haresource文件
server1 IPaddr::10.0.5.200/32/eth0:0 drbddisk::r0 Filesystem::/dev/drbd0::/database/mydata::ext4 mysqld
(8)drbd的升级和降级处理
# umount /dev/drbd0 从服务器不能挂载 所以降级前卸载
# drbdadm secondary r0 \\降级
# drbdadm primary r0
# mount /dev/drbd0 /database/mydata