一台机子 可以sql 指定排序规则多个lvs规则吗

徐帅123 的BLOG
用户名:徐帅123
文章数:38
访问量:14594
注册日期:
阅读量:5863
阅读量:12276
阅读量:407522
阅读量:1095868
51CTO推荐博文
Cluster 集群& 将按照某种组织方式将多台电脑组织起来完成某种特定的任务
&三种集群类型:
1.&LB ,load Balancing负载均衡& 大容量,在一定程度上可以实现高可用的目的
2.&HA& High Availabilty高可用集群& 实时在线 一年在线时间 99.999%& 至少两个主机同时在工作一旦&& 一个主机down 机了,另一台主机马上替换。
两台主机 只有一台在工作,另一台只是做好随时替换准备
3.& HP& High Perfomance高性能 集群&& 大量运算 例: 人口统计 天气预报
硬软件 F5 ,lvs, &HAPROXY
Scale on 向上扩展& 用更好的性能计算机 来替代性能更差的 那个计算机
Scale& out& 向外扩展& 使用 多台计算机
LB:负载器软件
&&& lvs, &haproxy
&&& Lvs& 开源软件 作者 作者章文嵩&
&&&&&&&&& 缺点 单点故障 ,如果负载较大 会down机
&Lvs 提供至少10种算法
&& 高可用集群
SAN& 块级别
& 要保证 两个服务器 不在互抢 a 主机就要隔一段宣告一下自己还活着
& LB 负载 均衡& Director& 负责接受客户端请求,并将请求按照某种算法分步到后台真正提供 服务器上。基于硬件(F5)来实现 ,也可以基于软件来实现&&
&&&&& lvs&& haproxy&&&&&&&&
&& HA& 高可用集群:
&&&&&&&& 软件: heartbeat&& corosync+openais RHCS 红帽
&&&&&&&& Ultramokey&&& keepalive& 开源软件&&&
&&&&&&&& 共享存储
&&&&&&&& 两台服务器实现 共享文件服务器&& 效率比较低
&&&&&&&&& 使用专业共享& san& 比较昂贵 通过光纤连到san服务器上,输出块级别
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&LVS : 虚拟服务器&&& 称四层转发 本身是不会修改用户ack
&& 真正提供节点 realservers
&工作模式三种型:
&&&& DR& 路由
&&&& 隧道TUN&&&&& 不能实现端口映射 后两个
&Lvs、 功能:
&&& 1.并发能力
&&&& 2.& 容错
&&&& 3 适用性 或收缩 服务器
VIP& 虚拟ip地址& 并不提供服务,只是转发到后台
RIP&&& 客户端真正提供 工作
DIP& 转发器& 用来和D/RIP 进行联系的地址
CIP 客户端 ip地址& 公网ip
Type of&& lvs
Lvs &net 模型
&&&&& 1.&& DIP RIP& 必须在统一子网
&&&&&& 2.&& RIP 地址通常是私有地址
&&&&&&& 3.&& RIP的网关 必须指向DIP
&&&&&& 4. 端口转换&&& 地址转换
&&&&&&& 5. 任何操作系统分都可做rip& 只要有web
&&&&&&&& 6. 负载均衡 瓶颈& 压力 比较大
&lvs &dr&& 直接路由 模式
&&& 1.&集群节点 必须在连在物理当中&
&&& 2.&rip 可以使用公网ip
&&& 3.&director 仅接受用户发来请求 而real servers响应的信息则& 不在响应director
&&&& 4 .& 集群节点 网关不能指向 dip&
&&& 5.&不支持端口转换
&&& 6.& 绝大多数操作系统 都能实现real servers&& 因为支持同一块网卡 配置多ip
Lvs- tun 隧道
&& 1 . 集群节点和director节点不必再同一个网段
&& 2. rip必须使用公网ip
&& 3. director 只需要处理进来请求,不需要处理出去请求
&& 4. 响应请求一定不能进过director
&& 5. director不能做端口映射
&& 6. 只能使用那些ip隧道 协议的操作系统&
Lvs 调动方法 10种算法:
&&& 静态调动&&&& 静态算法& 缺陷 不考虑后端实际的当前负载情况
&&&&&&&&&&&&& RR&& Round-robin& 轮调&&& 轮替意思
&&&&&&&&&&&&& WRR&& 加强论调&&& 区分后端服务器响应能力 定义权重& 2:1 的比例&
&&&&&&&&&&&&& DH&& 目标地址 hashing&&& 提高命中缓存的&&& 将来自同一个用户的请求始终转发到同一个server&&
&&&&&&&&&&&&& SH&&&& 源地址 hashing&&&&&&& 将来自同一个用户请求始终转发到同一个 route&&& &
&&& 动态调用&&& 算法&& 检查后端 的连接数&&& 活动和非活动状态连接
&&&&&&&&&&&&& Lc 最少活动连接数&&&& 算法&& 连接数=活动数*256+非活动连接数、
&&&&&&&&&&&&&&&&&&&&&&&& 同时检查 后台 活动数和非活动数 ,其中连接数最少的会自动连接下一个连接
&&&&&&&&&&&&&&&&&&&&&&& Overhead& 最少 活动连接数&&&
&&&&&&&&&&&&& Wlc 加权最少连接数&&& 考虑非活动连接& 算法:连接数=(活动数*256+非活动数)&权重
&&&&&&&&&&&&&&& 默认 调度方法
&&&&&&&&&&&&&&&&&&&&&& Wlc& 是最常用的算法
&&&&&&&&&&&&& Sed&& 比例10:1&&& 不考虑非活动连接数 是对wlc 改进 连接数=(活动连接数+1)*256&&&&&&&&&& sed&&&nq
&&&&&&&&&&&& Nq 算法&& 永不排队&
&&&&&&&&&& Lblc 基于本地最少连接 算法 考虑后台算法& 支持权重& 是将 dh和wlc 结合起来&& 用在什么场景:&&& 当一个网络有多个路由和防火墙的时候对用户请求平均分摊负载到防火墙上的时候
&&&&&&&&&& Lblcr 基于本地 带复制最少连接书 对上一个改进 考虑后台负载 支持权重的&&
&&&&&&&&&&&
Lvs 跟 iptables 工作类似
& Lvs& 开源软件
&& ipvsadm& 工作在 内核中 默认是直接做进内核的&&&&&&&&&&&&&&&
查看 : grep &i ipvs& /boot/canfig-2.6.18.164.e15&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& Ipvsadm 功能:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& tcp& udp&&&&&&&&&&&&&&&&&& 端口号& 防火墙
&&&&&&&& 1,集群服务&&&&& 使用ipvsadm& -A 参数 &t& -u& 都要指定 vip地址& port& &f
&&&&&&&&& 2,realserver&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& 3.查看
&& 配置 lvs &net 模型
&&&&&&&& 安装操作系统
&&&&&&&&&& 提供 web
&&&&&&&&&& 设置默认路由& 指向dip
&&&&&&&&&& 安装lvs
&&&&&&&&&& 配置 lvs
&需要 三个 服务器
Ipvsadm& -A& -E &t& -u& vip 地址&& -s
&& -A 添加服务&&& -E& 修改一个服务&&&&& -s 指定调度算法&&
& ipvsadm& -D& -t|-u& 删除服务
&&&&&&&& -a|-e& -t|-u&& vip& -r& realserver &g|-i -w 指定默认类型&
&&&&&&&&&&&&&&&&& | 表示或&&&&&&&&&&&&&&&&&&&&&&& 指定权重
&&&&&&&&& Ipvsadm& &d &t& vip:port -r& readserver 删除一个readserver
&&&&&&&&&&&&&&&&&&&&& -s 保存规则到某个规则里
&&&&&&&&&&&&&&&&&&&&& -c 清空规则
&&&&&&&&&&&&&&&&&&&& -R 恢复
&&&&&&&&&&&&&&&&&&&& -L& 查看
&&&&&&&&&&&&&&&&&&&& -z 清空计数器
&&&&&&&&&&&&&&&&&&&& -n 显示数据&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Lvs& Persistence持久性:& 给客户端的所有请求必须来自于同一台real server,就要用到 持久性
Pcc& ppc&& ftp&&
持久连接模板&&& 其实就是内存中的一段空间&&
-p n& n指的是持久时常& 启动持久连接
每一个用户的记录条目 都有 一个倒数计数器,一旦这个计时器超时了,这个条目就会在模板中删除。
超出了持久连接用户依然在访问& 计时器 默认 加长2分钟
1.类型 PCC& 持久客户端连接
&&&&& 来自同一个用户访问 都被定义到同一台realy server
2.PPC& 端口连接
3.pnmpp持久防火墙 标志连接
&&&&&&&&&&&&&&&&& 端口的引擎关系
4.&FTP 连接& 两个独立的 连接,
&&&&&&&&&& 5. 超时连接
&端口0& 指的是任意服务
PCC&& 用0 作为端口& 并不常用
& /sbin/ipvsadm &A &t ip:0 &s rr &p 300& -p指的是持久性时间
防火墙标记:
& Iptables &t mangle &A& PREROUTING& -d ip &p tcp &-dport 80 -j MARK --set-mark 10
& ========================================
&&&& =====LVS-NAT 的实验&
&&& 一个Director& 打开路由功能,在定义集群服务,添加realserver ,然后验证
&&& 两个 realserver& 地址在同一个网段,把网关指向 DIP,& 要用桥接的
&& 配置 ip地址&&&
在 realserver 1上配置 ip地址
#ifconfig eth0& ip+mask
# route add default gw& 网关地址
安装# yum install httpd&
&同样在 realserver 2配置
#ifconfig& eth0& ip+mask
# route add default gw& 网关地址
# yum install& httpd
在 real 1和real 2 上 都做
&为了 验证LAM 需要 把
&# yum install mysql-server php php-mysql
为了最后能看到效果: 在real 1和real 2上做 个网页
real 1#vim /var/www/html/index.html
&& &h1&real 1 server 1 ceshi&/h1&
# hostname localhost
# service httpd start
real 2#vim /var/www/html/index.html
&& &h1&real 2 service 2 ceshi&/h1&
# hostname localhost
# service httpd start
配置director ip& 在这里Director 用的是两块网卡
&# ifconfig eth0& ip
&#ifconfig eth1& ip
&看一下路由功能是否打开
&&&&&&&&&&
&&&&&&&&&&
&开始配置 ipvsadm
&在 director 配置
&# ipvsadm -A -t& ip地址:80& -s& rr&&&&& :80指的是端口
# ipvsadm -L -n 查看一下配置
添加 real 1
#ipvsadm -a -t ip地址:80 -r& real1的地址 -m
#ipvsadm -a -t ip地址:80 -r& real2的地址 -m
# ipvsadm -Ln
可以在 浏览器上测试了
输入 director& ip地址/index.html
修改算法:
#ipvsadm& -E -t ip地址:80 -s wlc
#ipvsadm -Ln
#ipvsadm -e -t ip地址:80 -r real 2的ip -m -w 3&&&& 用-w 把权重改为3
#ipvsadm -Ln
LVS -DR 实验
实验搭建环境:
Director: eth0:0& VIP 192.168.0.110& 桥接
&&&&&&&&&&&& eth0 DIP192.168.0.10
real server 1:eth0& rip& 192.168.0.12&&& 桥接
&&&&&&&&&&&&&&&&&& lo:0&& vip 192.168.0.110&&
&real server 2 :eth0&& rip 192.168.0.13&& 桥接
&&&&&&&&&&&&&&&&&&&& lo:0&& vip 192.168.0.110&
&& Director:
DIP 要配置在接口上,VIP要配置在接口别名上
&VIP:必须是公网
&rip :可以不是公网,可以不再同一网段
&real server:
&& RIP:要配置接口上,VIP要配置在 lo的别名上
&在 real 1 配置ip地址
&# ifconfig eth0 192.168.0.12/24
&#ifconfig lo:0 192.168.0.110 broadcast 192.168.0.110 netmask 255.255.255.255 up
&#route add -host 192.168.0.110 dev lo:0
&#route -n&& 查看
&在real 2 上配置ip
&# ifconfig eth0 192.168.0.13/24
#ifconfig lo:0& 192.168.0.110 broadcast 192.168.0.110 netmast 255.255.255.255 up
#route add -host 192.168.0.110 dev lo:0
& #route -n
&在director 配置
&#ifconfig eth0 192.168.0.10/24
&#ifconfig eth0:0 192.168.0.110 broadcast 192.168.0.110 netmask 255.255.255.255 up
&#route add -host 192.168.0.110 dev eth0:0
&#service network restart
&#ipvsadm -A -t 192.168.0.110:80 -s wlc
&#ipvsadm -a -t 192.168.0.110:80 -r 192.169.0.12 -g -w 2
&#ipvsadm -a -t 192.168.0.110:80 -r 192.169.0.13 -g -w 4
&#ipvsadm -Ln 查看&&&&&&&&&&&&&&&&&
&加入要保持页面一样,另外在准备一台服务器专门存放网页信息的,在通过nfs共享方式挂载到 real server 的网页目录下,
&持久连接:
&#ipvsadm -E -t 192.168.0.110:80 -s wlc -p 3600
&#ipvsadm -Ln
高可用集群 HA
&&& 一年down 机时间 99.99999%
两台服务器 同时工作
模式 active/passive&& 一个处于活动,一个处于被用
&&&&&& active/active&&& 两个都处于活动 ,通过不同服务来实现的
&使用共享式的raid 机制&
&raid& 和nfs 区别&&
& raid 是通过总线 连接在服务器上的
&nfs& 是通过网络& 方式共享
信息层& messagehg& 传递心跳信息 基于udp
& 隔离 级别:
&&&&& 节点级别 stonith&& 切断电源
&&&&& 资源级别 fence& 把资源资源截断
& HA: quorum&&& stonith
n/n-1& 有一个空闲的服务器
n/m& m小于n的 ,有m 个空闲服务器
&集群的分区:导致资源挣用
法定代表人数:集群 必须超过半数以上 才算是正常
&&&&&&& 脑裂 和仲裁:在某种情况下,由于底层通知错误,或者传递的信息的介质出现错误,会出现资源争用的情况。 称之脑裂
Dc 指定的协调员 就是头 ,为了避免资源争用&& 定义故障优先级
共享 存储:
&DAS&& 直接附加存储
&&&&&& RAID& 共享式的
&&&&&& SCSI&& 磁盘
NAS& 网络共享存储
&&&&& 文件级别共享
SAN 存储区域网络
&&&&& 块级别的&& 单独主机或单独服务器
&&&&&& SCSI&
&&&&&&& Fc&& 通过光网络传输& 但是交换机接口很贵
&&&&&&&& Ipsan (iscsi) 带宽是有限的&& 共享是块 级别
&& cluster filsesystem& 集群文件系统:
&&&& 工作在HA
&&&& 开源软件软件 :
&&&&& GFS2&&& readhat 公司&&
&&&& Ocfs&& 都做进内核中了
&&&& 故障转移域: 分组&
&&&& 怎么定义 两个节点的 集群法定票数:rhcs 里quorum disk 共享磁盘&&&&
& 4个层次:
&&&&& 1. 最底层 :基础架构层&& 传递心跳信息的 ,靠单独插件来实现
&&&&&& 2.成员层 :对整个集群发定票数计算,重新收敛状态信息& 简称ccm,
&&&&&&&&&&&&&&& 承上启下& 接收不到另外一个心跳,重新计算
&&&&& 3.资源分配层: crm核心& 叫集群管理器&& crm维护cib 集群信息机库&& cib 是以xml文件
&&&&&&&&&&&&&&&&&& 策略 pe和te&& 只能运行在DC上, 无论任何 时候一个集群 节点时候发生了改变都必须要通过DC来实现&&&
&&&&&&&&&&&&&&&&&&& pe 是做策略的& te 是做执行的
&&&&&&&&&&&&&&&&&&&&&&
&&&&& 4.资源代理层 : 启动& 停止&& 获取信息&& lrm 是执行crm传递 过来在本地执行某个资源监控或停止
&& Lrm& 管理本地 , Crm&& 管理全局的
资源 可以是ip 也可以是服务
& Ip&& storage& httpd 要按照顺序启动
& 成员关系层 :& 绘制整个集群中拓扑图
&&&&&&&&&& Ccm& 向其它层传递信息
& 资源分配层&& crm ,lrm,CIB
&&&&&&&& Crm集群资源管理器& 直接调用下层& 最核心的&&&& &
&&&&&&&& &DC &指定协调员& 有PE和TE&& 有te执行&
&&&&&&&& Lrm 本地资源管理器&&&
资源代理层: ra&& 要分组& 资源约束
&&&&&&&& Ra 资源代理&& 格式 lsb,ocf,heartbeat
&& heartbeat& 有三个版本 (v1,v2,v3)
&&&&&&&&& v2版本 需要手写 xml ,但官方提供了 cib.Xml&
& &keepalive&&&&&&&&&&&&&
& &uitramonkey
& &corosync/openais& 结合起来使用& 红帽6版本& 在用
& &RHCS (luci& riccii) 红帽的& 完整的解决方案&
&&&&&&&& 提供web&& cman 基于命令行的管理工具 ccsd
/etc/ha.d/hd.cf 对心跳信息加密的
/etc/ha.d/haresoucs 集群资源管理器
/etc/ha.d/quthkeys&
&启动服务 一定要手动启动 ,而且确保下次启动不能让它自动启动
实验 配置静态地址,
搭建环境:
node 1: eth0& 192.168.0.11&& 桥接&
&&&&&&&&&& eth1&&& 192.168.11.11 通过虚拟通道连接& 心跳测试
&& 提供 web 服务,httpd
node 2 : eth0&& 192.168.0.12&&& 桥接
&&&&&&&&&&&&& eth1& 192.168.11.12&& 通过虚拟通道 连接 心跳测试
&&& 提供web 服务,httpd
&向外提供服务&& 公网 ip 192.168.0.10
配置 node 1 上的节点:
&#vim /etc/sysconfig/network-scripts/ifcfg-eth0
&把 BOOTPROTU=static
& IPADDR=192.168.0.11
& NETMASK=255.255.0.0
&#vim /etc/sysconfig/network-scripts/ifcfg-eth1
&把 BOOTPROTU=static
添加& IPADDR=192.168.11.11
&&&&&& NETMASK=255.255.0.0
#vim /etc/sysconfig/network
如果有网关 把 网关删除
#service network restart
#vim /etc/sysconfig/network
&HOSTNAME=node1.a.org
&#hostname node1.a.org
#vim /etc/host
添加 192.168.0.11&& node1.a.org&& node1
&&&&&&& 192.168.0.12& node2.a.org&& node2
#yum install httpd
编辑个网页 为了 验证:
# vim /var/www/html/index.html
&h1& node 1.a.org&/h&
#service httpd start
#service httpd stop&& 停止服务
#chkconfig httpd off& 关闭不让开机自动启动
接下来装集群软件:
下载 软件包
# yum localinstall *.rpm --nogpgcheck
#cd /etc/hd.d
#cp ha.cf haresource authkeys /etc/ha.d
#vim ha.cf
把 logfile /var/log/ha-log 把#去了
在 bcast let le2&& # Solaris& 行后 添加
bcast eth1
#vim authkeys
2& sha1 suibianxie&&&&&& 后边加密串随便写的
#chown 400 authkeys& 改权限
#vim haresources
在 最后 添加:
node1.a.org&&& 192.169.0.10/16/eth0/192.168.255.255 httpd
#./ha_propagate&& 是个执行脚本
#scp haresources node2:/etc/ha.d
# /etc/init.d/heartbeat start 启动
#tail /var/log/ha-log&& 查看
#ssh node2 --&/etc/init.d/hearthear start'& 启动第二个节点
配置node 2
&#vim /etc/sysconfig/network-scripts/ifcfg-eth0
把 BOOTPROTU=static
添加 IPADDR=192.168.0.12
&&&&& NETMASK=255.255.0.0
&#vim /etc/sysconfig/network-scripts/ifcfg-eth1
把 BOOTPROTU=static
添加 PADDR=192.168.11.12
&&&&& NETMASK=255.255.0.0
#service network restart
#vim /etc/sysconfig/network
&HOSTNAME=node2.a.org
&#hostname node2.a.org
# yum install httpd
&编辑个网页 为了 验证:
# vim /var/www/html/index.html
&h1& node 2.a.org&/h&
&#service httpd start
&测试 在浏览器上 输入 ip地址
&#service httpd stop&& 停止服务
#chkconfig httpd off& 关闭不让开机自动启动
&下载 软件包
# yum localinstall *.rpm --nogpgcheck -y
测试 在浏览器上 输入 公网 ip
如果节点一,坏了 ,节点二自动启动
了这篇文章
类别:未分类┆阅读(0)┆评论(0)新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 14, 距离下一级还需 186 积分
论坛徽章:0
比如我的服务需要同时监听多个端口
那么在LVS上配置的时候 仅仅只有一个端口奏效的话,LVS就完全无用武之地了啊
因为你在实际中没法去判断用户去连接的到底是哪个端口
现在lvs上配置实验了下,好像没法同时对多个端口起作用
增加了新的,就会覆盖原有的端口......
请教达人,有无解决办法?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
论坛徽章:36
一个 LVS IP+PORT 的组合是一个负载均衡实例啊。你要是开多个端口,那就是多个实例?
这多个端口之间的服务,你想怎么样的负载均衡呢。
白手起家, 积分 14, 距离下一级还需 186 积分
论坛徽章:0
& & 多谢版主大人回复。
& & 情形是这样的,后端的真实服务器上需要同时监听三个端口提供服务,例如,1002
& & 那么在LVS上配置的时候如何能使得针对三个端口的负载均衡同时生效呢?
& & 因为你无法控制客户端连接的是哪个端口
论坛徽章:36
如果你这是三个不同的服务,那么就需要配置三条 LVS 策略。
你这三个服务都是 HTTP 的,还是非 HTTP 的?
论坛徽章:36
所以说,你这个需求本身就是有问题的。
除非,你可以从客户端的其他信息判断出来。比如,你用七层负载均衡,根据 URL,可以知道应该是哪个端口去服务。这么就可以 frontend 配置一个 IPORT,然后再根据 URL 做 content switch。这是七层的优势。四层 LVS 的话,比较难以达到这种逻辑。
白手起家, 积分 14, 距离下一级还需 186 积分
论坛徽章:0
& & 都是非http的服务,
& & 问题是,怎样使这三条策略同时在一个LVS上面生效呢?
& & 我觉得这个需求在现实中应该还是广泛的啊,比如我的服务器要支持不同的设备,
& & 有的设备是采用协议1,需要端口a1,有的终端是采用通信协议2,需要端口a2提供服务,
& & 然后在rs1,rs2,...rsn 上,均提供了对两种服务的支持
& & 所以我现在需要顶在前面的lvs将这几个端口的数据报通通负载均衡到后端的rs
& & 使用LVS是否可行?
& & 如果无法使用LVS有没有替代方案呢
论坛徽章:36
本帖最后由 Godbach 于
17:17 编辑
之所以能做负载均衡,那么肯定后端提供的都是相同的服务了。
所有走 a1 端口的用一套 LB 策略,所有走 a2 端口的走一套负载均衡策略。
映射关系是这样的
对于走 a1 端口的服务:
LVS VIP:Port(a1)
& & RS1:a1
& & RS2:a1
& & ...: a1
同理,对于走 a2 端口的服务:
LVS VIP:Port(a2)
& & RS1:a2
& & RS2:a2
& & ...: a2
你的意思,是这样的配置没法满足你的需求。你的映射关系是什么样的?
白手起家, 积分 14, 距离下一级还需 186 积分
论坛徽章:0
& & 问题在于,这两者能同时配置在一台机器上么?
& & 还是说需要两台lvs,一台用于转发port1的,一台用于转发port2的,
& & 如果是后者的话,那确实就不行了。因为客户端通通连一个VIP进来。
& & 就算你搞两台,你总不能说我连port1的客户端连用于转发port2的那台机器了所以对不起不转,直接给你拒掉吧
白手起家, 积分 14, 距离下一级还需 186 积分
论坛徽章:0
打个形象的比方吧,
传统的LVS解决方案相当于一个漏斗,后面有n个瓶子为真实服务器,且只能装一种颜色(端口)的豆子,假设是红豆子
所有的红豆子过来经过我的漏斗能够均匀的(负载均衡)分配到后面三个瓶子中去。
现在我面临的问题是:我有不止一种颜色的豆子,假设是是三种颜色(三个端口)的豆子,我也不需要也没法把它们分开,因为每一个瓶子(后端的真实服务器)能够同时搞定不同颜色的豆子的。
但是我需要这一个漏斗(LVS)能够将三种混在一起的豆子相对均匀的分散到三个瓶子中去。
请问LVS能做到吗?
家境小康, 积分 1045, 距离下一级还需 955 积分
论坛徽章:0
7楼&&Godbach 说的就是你这种情况啊,能在一台服务器上实现。Linux之lvs集群 - 简书
Linux之lvs集群
Linux系统之lvs集群
集群的基本思想
由于现代化业务上线的需求, 单服务器已经不能满足业务的需要, 业务服务器需要承载更的访问请求.或者单台服务器故障(SPOF,single point of failure)将导致所有服务不可用. 此情况下, 需要把各种相同的业务服务器连合起来为某个相同的业务提供服务.以达到高并发,快速响应的需求.集群技术和Linux操作系统实现了一个高性能和高可用的服务器, 具有很好的可伸缩性,很好的可靠性, 很好的可管理性.
集群的类型
LB: 负载均衡集群(Load Balancing)
负载均衡器
上游服务器(Upstream server)
后端的"真服务器(realserver)"
HA: 高可用集群(High avaliability)
活动服务器(active)
备用服务器(passive)
可用性(Availability)=平均无故障时间/平均无故障时间+平均修复时间
可用性衡量术语: 99%, 99.9%, 99.99%, 99.999%
HP: 高性能计算集群(high performance)
将多个CPU通过总线连接起来,共同进行计算,以达到计算效率
DS: 分布式系统(distributed system)
分布式存储系统是最常见的, 例如hadoop
负载均衡构建需要考虑的问题
Session的保持, 如下应用场景
1 Session sticky:通过负载均衡器追踪用户的请求, 始终将同一IP的会话发送至相同的real server.
缺点: 如果一直访问的real server档机, 将引起部分用户考多少正常访问
2 Session Cluster: 将session做成一个集群,进行多服务器同步session
缺点: 会话大的情况下, 服务器会大量的同步session,将浪费大量的资源,只适合会话比较小的规模
3 通过全局的负载调度器(GSLB), 将请求调度到两个不同的机房,机房之间进行session同步
4 Session server : 将存储session的时候,使用网络存储,多服务器调用
缺点: 网络存储session的服务,将会有网络瓶颈, 或者session的存储档机
文件存储 : 使用分布式存储系统
NAS : network attached storage(文件级别存储服务器)
SAN : Storage Area Network(块级别存储)
DS : Distributed Storage(分布式文件级别存储)
LB集群的实现方式划分
F5 : BIG-IP
Citrx : Netscaler
LVS(linux virtual server)
Ats(apache traffice server)
LB集群的协议层划分
HAPorxy(模拟传输层,Mode TCP)
HAPorxy(Mode HTTP)
HA集群的实现
软件方式的实现方式
KeepAlived : 通过实现vrrp协议, 来实现地址漂移
cman+rgmanager(红帽的实现方式,RHCS)
corosync + pacemaker
缓存都是KV格式的数据,即key=value的格式, 其查找数据的时间是o(1),即查询时间是恒定的
业务系统构建思路
LVS是Linux Virtual Server和简称,也就是linux虚拟服务器,这是由章文嵩博士发起的一个开源项目, 它的官方网站是www.linuxvirtualserver.org,现在LVS已经是Linux内核标准的一部分,使用LVS可达到的技术目标是: 通过LVS的负载均衡技术和Linux操作系统实现一个高性能高可用的Linux服务器群集, 它具有良好的可靠尾,可拓展和可操作性. 从而以低廉的成本实现最优的性能. LVS从1998年开始,发展到现在已经是一个比较成熟的项目了.利用LVS技术可实现高性能, 高可压缩的网络服务. 例如WWW服务,FTP服务, MAIL服务等
LVS的工作原理
LVS工作在内核的INPUT链上,请求的数据报文首先到达PREROUTING链,再通过路由发现到达本机的IP地址,却送往INPUT链, 强行改变数据包的流程,送往POSTROUTING链,再送往内部服务器(转发到内部服务器类似于iptables的DNAT,但它不更改目标IP(也可以更改目标IP)).LVS工作在四层,根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(其是根据调度算法).支持TCP,UDP,SCTP,AH,ESP,AH_ESP等协议的众多服务
LVS的集群术语
VS : virtual server,称之为Director
RS : real server, 后端提供真正服务的服务器
CIP : 客户端IP
DIP : Director IP, LVS的后端IP
VIP : Director IP , LVS的前端IP
RIP : 后端真正提供服务的服务器IP
Lvs-dr(director routing)
Lvs-tun(ip tunneling)
Lvs-fullnat(同时改变请求报文的源IP地址和目标IP地址)
注意:前三种为标准类型,fullnat为后来添加的类型,内核默认可能不支持,需要重新编译内核
lvs-nat(MASQUERADE)
可以理解为多目标DNAT(iptables),可修改IP和端口,通过将请求报文的目标地址和目标端口修改为挑选的某RS的RIP和端口实现
RIP和DIP使用私网地址, 各RS的网关应该指向DIP
请求和响应报文都经由Director转发(在极高负载的场景中, Director可能会成为系统瓶颈)
支持端口映射
VS必须为Linux,RS可以是任意的OS,只要能提供相同的服务即可.
RS的RIP与Director的DIP必须在同一网络,并且要做为RS的网关
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址
缺点: 扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!
lvs-dr(GATAWAY)
Director将接收到的请求报文源IP和目标IP都不做修改,而是将源MAC设定自己的MAC,目标MAC设定目标RS的MAC,而通过交换机发送给RS server,当RS server拆解后发现源目标IP不是自己,此时要在RS上配置VIP,即RS服务器有RIP和VIP,此时有如下难道:
RS有VIP将会与VIP冲突
当有VIP的广播请求时,RS将会把系统上所有的IP进行广播
确保前端路由器将目标IP为VIP的请求报文,一定会转发给Director,解决方案如下:
静态绑定:在前端路由器上把IP和director的MAC进行绑定.
缺点: 不能做director的高可用,前端路由器可能由ISP提供
禁止RS响应VIP的ARP请求
arptables : 定义一个ARP的访问控制
修改各RS的内核参数,并把VIP配置在特定的接口上实现,并禁止其响应发送ARP广播(通常将VIP配置在lo的子接口上)
RS的RIP可以使用私有地址,也可以使用公网地址
RS跟Director必须在同一物理网络中
请求报文必须由director调度,但响应报文必须不能经由director
不支持端口映射
各RS可以使用大多数OS
优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。
缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。
lvs-tun(IPIP)
Director收到报文后,原IP和目标IP不动, 再封装一个源IP和目标IP,源IP为DIP,目标IP为RIP,确保每个RIP要有一个VIP,RS主机接收到报文后,回应时源IP为VIP,目标IP为CIP
RIP,DIP,VIP全是公网地址,DIP可以为私网地址
RS的网关不能也不可能指向DIP
请求报文经由Director调度,但响应报文直接发送给CIP
不支持端口映射
RS的OS必须支持IP隧道功能
优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。封装两个IP报文首部会有问题: MTU大小为1500的大小,而再加一个IP报文首部会超出MTU的大小,导致路由器拒收(因为传输之前已经被切片传输的大小为1500字节)
lvs-fullnat
Director收到报文后, 将源IP(CIP)修改为(DIP),目标地址(VIP)修改为(RIP),转发给RIP, 当RS主机收到报文后,回应时,源IP为RIP,目标IP为VIP.Director收到报文后,将源IP修改为自己(VIP), 目标IP修改为CIP
VIP是公网地址, RIP和DIP是私网地址,且可以不在同一IP网络中,但需要通过路由互相通信
RS收到的请求报文的源IP为DIP,因此其响应报文将发送给DIP
请求报文和响应报文都必须由Director调度
支持端口映射机制
RS可以使用任意OS
lvs计算活动连接和非活动连接的方式:
nat fullnat模型: 请求和回应的报文都会经过directory, 因此director可以准确的判断出活动的连接和非活动的连接
dr tun模型: 请求只经过director,响应不经由director,但在tcp断开的时候, fin报文和最后一次的ack都会被director收到, 由此报文判断连接是否活动或断开
LVS的调度方法
静态方法(公根据算法本身进行调度,不考虑后端服务器的运行状态,负载的效果有限)
rr: round robin, 轮调,轮询,轮叫机制
缺点: 性能好的服务器比较空闲,而性能差的服务器会很繁忙
wrr : weighted rr, 加权轮询,权重大的负载多
缺点: 有的情况下,当性能好的服务器分配了更多的长连接,而性能差的分配的大多数都是短连接,此时会造成性能好的服务器处理列多的连接,压力比较大,而性能差的服务器,还处于空间状态,造成假负载
sh : source ip hash, 源地址哈希,能始终将同一个IP引导到同一台RS服务器.(在Director服务器上维护一个hash表,其是KV格式,键就是源IP地址,值就是RS的地址,每次都会查找hash表,如果能查询到前一次的连接记录,就直接发送到RS服务器,如果没有,就使用算法进行调度)
缺点:随着时间推移,旧的IP地址会很多,这样会让固定的RS服务器压力大
dh : Destination ip hash, 目标地址哈希(用于内部负载,正向代理 ),客户端的请求,只要是同一个目标地址, 将始终通过同一个网关进行发送.
缺点: 如果另一个客户端也请求同一个目标地址, 它也会将这个请求使用同一个网关进行发送, 如果对同一目标地址请求比较大, 这样会造成同一网关的负载压力,会损坏负载的效果.
正向代理: 本地客户端访问互联网时,使用本地的缓存服务器访问网站 ,这样DH算法可以提高缓存服务器的命中率
正向web代理: 负载均衡内网用户互联网的请求.
client --& director --& web cache server
动态方法(根据算法及各RS的当前的负载状态进行评估,如果负载较小的会负载下一个请求,其根据overhead值来分配请求)
LC : least connection(最少连接),如果RS的连接数都一样,会进行轮循,overhead值小的将会接收下一次请求
overhead计算公式:`active(活动连接数)*256+inactive(非活动连接数)
RS1 : 10,100
RS2 : 20,10
RS1将会挑选出来接收下一个请求
缺点: 不能根据服务器的性能进行分发请求
WLC : weighted LC ,overhead小的将接收下一次请求
overhead计算公式: `active*256+inactive/weight
RS1 : 10,100,1
RS2 : 20,10,3
RS2将会挑出来接收下一个请求
缺点: 当两台活动连接都为0,将进行轮循,如果正好轮循到了权重小的响应,这样是不理想的,SED算法就是解决这个问题的
SED : shortest expction delay, 最短期望延迟,是WLC算法的改进
overhead计算公式:(active+1)*256/weight
RS2将会接收下一次请求
缺点: 如果权重差别很大的情况下, 权重小的就空闲了
NQ : Nerver Queue它是SED算法的改进,当用户请求进来的时候, 服务器事先根据用户的请求,依照权重大小依次分配,随后再根据SED算法分配
LBLC : Locality-based LC他是一个动态的DH算法,客户端请求一个目标地址时,当没有目标地址的连接记录,将挑选一个负载小的网关发送, 其也是正向代理时使用的算法
LBLCR : LBLCR with replication, 带复制的LBLC当有一个目标地址被一个缓存服务器大量缓存, 而用户又大师的请求此目标地址,此时另一台缓存服务器就过于空闲,此时LBLCR算法就会通过将压力大的缓存服务器内容复制一份到空闲的缓存服务器
ipvsadm/ipvs
工作于用户空间,用户空间的命令行工具, 用于管理集群服务,及集群服务上的RS等,其是一个CLI工具
工作于内核空间,工作在netfilter INPUT勾子之上的程序代码,其集群功能依赖于Ipvsadm工具定义规则, 一个ipvs主机至少应该有一个RS,其也可以同时定义多个cluster service
ipvsadm工具的安装
yum install ipvsadm (base源)
确认内核是否支持ipvs功能
root@Centos7 ~]# grep -i -C 2
"ip_\?vs" /boot/config-3.10.0-229.el7.x86_64
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_IP_SET_HASH_NETIFACE=m
CONFIG_IP_SET_LIST_SET=m
CONFIG_IP_VS=m
CONFIG_IP_VS_IPV6=y
# CONFIG_IP_VS_DEBUG is not set
CONFIG_IP_VS_TAB_BITS=12
# IPVS transport protocol load balancing support
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y
# IPVS scheduler
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m
# IPVS SH scheduler
CONFIG_IP_VS_SH_TAB_BITS=8
# IPVS application helper
CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PE_SIP=m
ipvsadm命令的使用
管理集群服务:
ipvsadm -A | E -t |u |f service-address [-s scheduler] [-p timeout]
ipvsadm -D | -t | u | f service-address
-t : tcp, vip:port
-u : udp, vip:port
-f : 防火墙标记,MARK
-s : 调度算法,默认为WLC
-p : 持久连接模式
管理集群服务上的RS
ipvsadm -A |E -t |u |f service-address -r server-address [-g | i | m] [-w weight]
ipvsadm -D -t | u | f service-address -r server-address
-a : 添加一个RS主机
-e : 修改一个RS主机
-d : 删除一个RS主机
-g : LVS的GATAWAY模式
-m : masqueread, LVS的nat模式
-i : IPIP,LVS的tunel模式
-w : weight
ipvsadm -L | l [options]
-n : numberic ,数字格式显示地址和端口
-c : connection,显示ipvs的连接
--stas : 统计数据
--rate : 速率
--exact : 精确值
ipvsadmin -C
保存和重载
ipvsadm -S /path/to/file
ipvsadm -S & /path/to/file
ipvsadm -R & /path/from/some_rule_file
ipvsadm-restore & /path/from/some_rule_file
计数器清零
ipvsadm -Z [-t | u | f
server-address]
lvs-nat的构建
IPVS的VIP要实现高可用,它是有可能需要流动到其他的director服务器上, 一般将这种流动的IP地址配置为别名接口上
不能在Ipvs的director上启用iptables
配置拓扑图
1 配置192.168.12.21的网关为192.168.12.1
2 配置192.168.12.22的网关为192.168.12.1
3 配置172.16.100.67地址在网卡的别名上
4 配置两台RS server的httpd服务,并启动之
5 在VS服务器中,完成如下配置
ipvsadm -A -t 172.16.100.67:80 -s wrr
ipvsadm -a -t 172.16.100.67:80 -r 192.168.12.21 -w 1 -m
ipvsadm -a -t 172.16.100.67:80 -r 192.168.12.22 -w 3 -m
6 使用客户端连接ipvs地址的80端口
7 正常情况下,22的主机响应3次,21的主机响应一次
lvs-dr的构建
IPVS的VIP要实现高可用,它是有可能需要流动到其他的director服务器上, 一般将这种流动的IP地址配置为别名接口上
不能在Ipvs的director上启用iptables
配置拓扑图
ifconfig INTERFACE_Alias $VIP netmask 255.255.255.255 broadcast $VIP up
ipvsadm -A -t 172.16.100.9:80 -s rr
ipvsadm -a -t 172.16.100.9:80 -r 172.16.100.68 -g
ipvsadm -a -t 172.16.100.9:80 -r 172.16.100.69 -g
realserver
内核参数修改:
echo 1 & /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 & /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 & /proc/sys/net/ipv4/conf/INTERFACE/arp_ignore
echo 2 & /proc/sys/net/ipv4/conf/INTERFACE/arp_announce
route add -host $VIP dev lo:0
arp_announce:(通告)
0 : 把本地的任意接口地址都向网络通告
1 : 尽量避免向本地接口的网络通知非此网络的IP地址
2 : 必须要使用网络中的地址去响应
arp_ignore(响应)
0 : 本地所有接口地址都会响应
1 : 只对从本地接口进来,而此接口也正好是这个网络的地址
Linux默认从那个接口出去, 响应的源IP就为这个接口的地址,使用route add -host $VIP dev lo:0 就是为了改变报文的源IP地址
linux默认的arp通告,会把本地主机的所有IP地址,都通告一次
通过防火墙标记实现LVS的集群
ipvsadm -A|E -t| u | f server-address [-s scheduler]
基于firewall定义集群服务的步骤
iptables -t mangle -A PREROUTING -d $VIP -p $protocol --dport #
-j MARK --set-mark 3
2 定义集群服务
ipvsadm -A -f # [-s scheduler]配置示例
iptables -t mangle -A PREROUTING -d 172.16.100.9 -p tcp --dport 80 -j MARK --set-mark 3
ipvsadm -A -f 3 -s rr
ipvsadm -a -f 3 -r 172.16.100.68 -g
ipvsadm -a -f 3 -r 172.16.100.69 -g
lvs presistence(持久连接)
无功lvs使用何种scheduler,其都能实现在指定时间范围内(360秒)将来自同一个IP地址的请求发往同一个RS,其是通过内部的hash表,实现方式与算法无关,是通过lvs连接模板实现,其与调度方法无关,如果在指定的时间范围内还是未断开连接请求,连接超时时间自动增加2分钟
持久连接的记录模板: /proc/net/ip_vs_conn
每端口的持久(PPC):单个服务的持久
ipvsadm -A -t 172.16.100.9:80 -s rr -p
ipvsadm -a -t 172.16.100.9:80 -r 172.16.100.68 -g
ipvsadm -a -t 172.16.100.9:80 -r 172.16.100.67 -g
ipvsadm -A -t 172.16.100.9:23 -s rr -p
ipvsadm -a -t 172.16.100.9:23 -r 172.16.100.68 -g
ipvsadm -a -t 172.16.100.9:23 -r 172.16.100.69 -g
无论使用的什么调度方法,同一个请求将都会发往同一个RS
每客户端持久(PCC)
ipvsadm -A -t 172.16.100.9:0 -s rr -p
ipvsadm -a -t 172.16.100.9:0 -r 172.16.100.68 -g
ipvsadm -a -t 172.16.100.9:0 -r 172.16.100.69 -g
定义tcp或udp协议的0号端口为集群服务端口
每防火墙标记持久(PFWNC)
iptables -t mangle -A PREROUTING -d 172.16.100.9 -p tcp --dport 80 -j MARK --set-mark 99
iptables -t mangle -A PREROUTING
-d 172.16.100.9 -p tcp --dport 443 -j MARK --set-mark 99
ipvsadm -A -f 99 -s rr -p
ipvsadm -a -f 99 -r 172.16.100.68 -g
ipvsadm -a -f 99 -r 172.16.100.69 -g
Linux從業菜鳥壹枚

我要回帖

更多关于 oracle指定排序规则 的文章

 

随机推荐