无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。
LVS 安装
下载
http://www.linuxvirtualserver.org/software/index.html
编译安装
yum install -y kernel-devel gcc gcc-c++
yum install libnl* libpopt* popt-static -y
解压完之后进入解压目录执行
make && make install
编译成功后通过ipvsadm命令验证成功。
keepalived
下载
http://www.keepalived.org/download.html
yum install curl gcc openssl-devel libnl3-devel net-snmp-devel
yum install -y libnfnetlink-devel
./configure --prefix=/usr/local/keepalived
make && make install
先配置LVS能够跑起来
VIP
172.23.26.233
DR
172.23.26.212
RS IP
172.23.26.210
172.23.26.211
212机器安装lvs
执行以下脚本
#! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward ipv=/sbin/ipvsadm vip=172.23.26.233 rs1=172.23.26.210 rs2=172.23.26.211 ifconfig eth0:0 down ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip dev eth0:0 $ipv -C $ipv -A -t $vip:80 -s rr $ipv -a -t $vip:80 -r $rs1:80 -g $ipv -a -t $vip:80 -r $rs2:80 -g |
-t tcp负载
-g 集群模式DR
rr 轮训负载算法
210 211上执行以下脚本
#! /bin/bash vip=172.23.26.233 ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 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 |
测试
轮训请求,测试成功
ipvs命令解释
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask] ipvsadm -D -t|u|f virtual-service-address ipvsadm -C ipvsadm -R ipvsadm -S [-n] ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight] ipvsadm -d -t|u|f service-address -r server-address ipvsadm -L|l [options] ipvsadm -Z [-t|u|f service-address] ipvsadm --set tcp tcpfin udp ipvsadm --start-daemon state [--mcast-interface interface] ipvsadm --stop-daemon ipvsadm -h 命令选项解释: 有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可以。 -A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。 -E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。 修改定义过的集群服务 -D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。 -C --clear 清除内核虚拟服务器表中的所有记录。 -R --restore 恢复虚拟服务器规则 -S --save 保存虚拟服务器规则,输出为-R 选项可读的格式 -a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器 -e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录 -d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录 -L|-l --list 显示内核虚拟服务器表 userver 列表; -Z --zero 虚拟服务表计数器清零(清空当前的连接数量等) --set tcp tcpfin udp 设置连接超时值 --start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的VRRP 功能。 --stop-daemon 停止同步守护进程 -h --help 显示帮助信息 其他的选项: -t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port] -u --udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port] -f --fwmark-service fwmark 说明是经过iptables 标记过的服务类型。通常用于将两个或两个以上的服务绑定为一个服务进行处理时使用; -s --scheduler scheduler 使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是:wlc. -p --persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。 持久连接; -M --netmask netmask persistent granularity mask -r --real-server server-address 真实的服务器[Real-Server:port] -g --gatewaying 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式) DR模型 -i --ipip 指定LVS 的工作模式为隧道模式 -m --masquerading 指定LVS 的工作模式为NAT 模式 -w --weight weight 真实服务器的权值 --mcast-interface interface 指定组播的同步接口 -c --connection 显示LVS 目前的连接 如:ipvsadm -L -c --timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout --daemon 显示同步守护进程状态 --stats 显示统计信息 ipvsadm –Ln --state 总共的数量 --rate 显示速率信息 ipvsadm –Ln --rete 平均值 --sort 对虚拟服务器和真实服务器排序输出 --numeric -n 输出IP 地址和端口的数字形式 |
LVS解决了负载均衡的问题
但是LVS没有健康检查,即使下游的RS故障了,LVS仍然会转发到故障节点
keepalived则可以解决这个问题,而且还能解决LVS自身的单点故障问题,实现LVS的高可用
keepalived编译安装完之后执行如下操作:
mkdir /etc/keepalived
keepalived.conf拷贝上上述文件夹
cp keepalived-1.4.3/keepalived/etc/init.d/keepalived /etc/init.d/
cp keepalived-1.4.3/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
vrrp_instance VI_1 { state BACKUP interface eth0 #指定HA监测网络的接口 virtual_router_id 51 #虚拟路由标识,同一个vrrp_instance下,master和backup一致 priority 90 advert_int 10 #设定master与backup负载均衡之间同步检查的时间间隔,单位秒 authentication { auth_type PASS #验证类型 PASS AH两种 auth_pass 1111 #验证密码,同一个vrrp_instance下的master与backup一致 } virtual_ipaddress { 172.23.26.233 } }
virtual_server 172.23.26.233 80 { #VIP delay_loop 6 #运行情况检查时间,单位秒 lb_algo rr #设置负载调度算法 lb_kind DR #设置LVS负载均衡机制DR net_mask 255.255.255.0 persistence_timeout 0 #会话保持时间,单位秒 protocol TCP real_server 172.23.26.210 80 { #真实服务地址 weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 172.23.26.211 80 { #真实服务地址 weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } |
service keepalived start启动kp
这种方式启动读取的KEEPALIVE_OPTIONS参数如下:
然后在kp机器上再执行lvs_dr脚本即可
测试验证成功,能自动将包转发到活的服务上
下面测试UDP的负载均衡及HA
lvs_dr脚本如下:
#! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward ipv=/sbin/ipvsadm vip=172.23.26.233 rs1=172.23.26.210 rs2=172.23.26.211 ifconfig eth0:0 down ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip dev eth0:0 $ipv -C $ipv -A -u $vip:62000 -s rr $ipv -a -u $vip:62000 -r $rs1:62000 -g $ipv -a -u $vip:62000 -r $rs2:62000 -g |
UDP检测脚本,安装nc
nc -uvz 172.23.26.210 62000
输出Connection to 172.23.26.210 62000 port [udp/*] succeeded!说明udp检测成功
keepalived.conf配置文件如下:
vrrp_instance VI_1 { state MASTER interface eth0 #指定HA监测网络的接口 virtual_router_id 51 #虚拟路由标识,同一个vrrp_instance下,master和backup一致 priority 100 advert_int 10 #设定master与backup负载均衡之间同步检查的时间间隔,单位秒 authentication { auth_type PASS #验证类型 PASS AH两种 auth_pass 1111 #验证密码,同一个vrrp_instance下的master与backup一致 } virtual_ipaddress { 172.23.26.233 } }
virtual_server 172.23.26.233 62000 { #VIP delay_loop 6 #运行情况检查时间,单位秒 lb_algo rr #设置负载调度算法 lb_kind DR #设置LVS负载均衡机制DR net_mask 255.255.255.0 persistence_timeout 0 #会话保持时间,单位秒 protocol UDP real_server 172.23.26.210 62000 { #真实服务地址 weight 1 MISC_CHECK { misc_path "/home/lvs/udp_check.sh 172.23.26.210 62000" misc_timeout 10 } } real_server 172.23.26.211 62000 { #真实服务地址 weight 1 MISC_CHECK { misc_path "/home/lvs/udp_check.sh 172.23.26.211 62000" misc_timeout 10 } } } |
自己找个UDP客户端工具或者写个UDP客户端发包测试成功