linux高可用的简单介绍_第1页
linux高可用的简单介绍_第2页
linux高可用的简单介绍_第3页
linux高可用的简单介绍_第4页
linux高可用的简单介绍_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高可用的简单介绍1高可用组件介绍2设想3高可用组件介绍4高可用组件介绍LVSlinux vitual server如图,最简单的构造,即是,应用的服务器有冗余,前面放置一台lvs机器,将外部的请求转发到后端的应用上。5lvs的安装通过yum安装:创建内核目录软链接:ln -sv /usr/src/kernels/2.6.18-164.el5-i686 /usr/src/linux安装:yum install -y ipvsadm确认:lsmod | grep ip_vs6lvs的命令ipvsadm h查看帮助:常用的命令有:1、策略维护:-Cclear the whole table-Aadd

2、 virtual service with options-aadd real server with options-tservice-address service-address is host:port-rserver-address server-address is host (and port)2、调度算法-s schedulerone of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc.3、模式-ggatewaying (direct routing) (default)-Iipip enc

3、apsulation (tunneling)-mmasquerading (NAT)7lvs的调度算法-s schedulerrr轮询Round-Robin Schedulingwrr加权轮询Weighted Round-Robin Schedulinglc最小连接Least-Connection Schedulingwlc加权最小连接Weighted Least-Connection Schedulinglblc基于局部性的最小连接Locality-Based Least Connections Schedulinglblcr带复制的基于局部性的最小连接Locality-Based Leas

4、t Connections with Replication Schedulingdh目标地址散列Destination Hashing Schedulingsh源地址散列Source Hashing Schedulingsed最短预期延时Shortest Expected Delay Schedulingnq不排队调度Never Queue Scheduling8lvs的三种模式-ggatewaying (direct routing) (default)-Iipip encapsulation (tunneling)-mmasquerading (NAT)-ipip -i ipip enc

5、apsulation (tunneling)IP隧道IP Tunnelingdirector和real中建立IP tunnel,通过隧道将负载分配给real,机器可以在不同网络中,只要ip tunnel相连即可。real处理完成后,将数据直接反馈用户。-masquerading -m masquerading (NAT)地址转换Network Address Translation外部请求发送给director,director改写请求的目标地址,把数据发送给real,real处理完后,仍然返回数据给director,director再改写数据包源地址,返回用户。在client看来,包来自di

6、rector本身。-gatewaying -g gatewaying (direct routing) (default)直接路由Direct Routing外部请求发送给director,director将数据发送给real,real处理完后,直接返回用户。9lvs的使用一、在director机器上,绑定vip,启用ipvsadm转发(/etc/init.d/lvsDR)#!/bin/sh. /etc/rc.d/init.d/functionsVIP=9RIP1=7RIP2=8V_DEV=eth0:0case $1 in start) echo start LVS ifconfig $V_D

7、EV down ifconfig eth0:0 $VIP broadcast $VIP netmask 55 up route add -host $VIP dev $V_DEV ipvsadm -C ipvsadm -A -t $VIP:80 -s wrr ipvsadm -a -t $VIP:80 -r $RIP1:80 -g ipvsadm -a -t $VIP:80 -r $RIP2:80 -g ipvsadm ; stop) echo stop LVS ipvsadm -C ifconfig $V_DEV down ; *) echo Usage: $0 start|stop exi

8、t 1esacexit 010lvs的使用二、在real机器上,绑定vip,禁止vip的arp响应(/etc/init.d/lvs_real)#!/bin/bash. /etc/rc.d/init.d/functionsVIP=9BROADCAST=9V_DEV=lo:0case $1 in stop) echo ifdown VIP ifconfig $V_DEV down echo 0 /proc/sys/net/ipv4/conf/lo/arp_announce echo 0 /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 /proc/sys/n

9、et/ipv4/conf/all/arp_announce echo 0 /proc/sys/net/ipv4/conf/all/arp_ignore ; start) echo ifup VIP ifconfig $V_DEV down ifconfig $V_DEV $VIP netmask 55 broadcast $BROADCAST up#这里的broadcast,是VIP本身! echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce#这里需要关闭arp宣告 echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore

10、 echo 2 /proc/sys/net/ipv4/conf/all/arp_announce echo 1 /proc/sys/net/ipv4/conf/all/arp_ignore ; *) echo Usage: lvs start|stop exit 1 ;esacexit 011关于arpARP (Address Resolution Protocol)地址解析协议,将ip地址翻译为mac地址。要和其他的设备通信,需要通过发送arp包来告诉其他设备自己的IP。在lvs中,内网机器有一个自己的设备ip,还另外绑定了一个vip,假设内网机器要往外网发送arp,则他需要先请求lvs的m

11、ac,因此,会先向lvs发送一个arp包。这个arp包的内容使用了发送源的ip地址(即vip)来作为ip地址,使用了机器的mac地址来作为mac地址。收到arp请求的设备更新自己的arp表。announce:多台内网机器发送这样的包时,会使得vip被抢夺,造成ip欺骗。假设两台机器,外网ip是x.x.x.1和x.x.x.2,使用vip x.x.x.3,则x.x.x.1向lvs发送arp的请求时,arp包里的源地址是x.x.x.3。而x.x.x.2再向lvs发送这个arp请求,同样源地址也使用了x.x.x.3,但是1和2的mac不同,使得lvs上的vip被冲掉。因此,需要限制发出的包。ignor

12、e:一个group的多台real之间,也应该独立的认为vip只存在于自身设备上。因此,需要限制收到的包。12关于arp_announce和arp_ignoresysctl A中可以看到arp_announce和arp_ignore两个参数,具体的值代表了:13lvs的效果VIP使用.69在.55上,通过ipvsadm,将http请求转发给.57和.58:在.57和.58上部署http server,访问.69,可以达到wrr的效果。问题:1)lvs是单点,怎么解决?2)这个设计只能分担压力,但是如果后面的应用服务器发生故障,怎么解决?14高可用组件介绍keepalived在lvs的基础上安装的

13、一个软件,通过该软件,可以检测后端服务状态。也即是,在lvs的基础上,实现director的冗余、实现对realserver的健康检查和failover。15keepalived的基础-VRRPVRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议通常,一个网络内的所有主机,都会有一条缺省的静态路由,指向网关,使得发向外网的数据可以通过缺省路由,实现转发。但是,这台缺省路由器存在单点故障,因此,为消除静态路由下的单点故障,设计了VRRP。VRRP的设备分为两种:master:实现针对虚拟路由器ip的各种网络功能。backup:除了接受master的vr

14、rp通告外,不执行其他网络功能。master选举:若对外IP是某设备IP,则该设备永远是master;若对外IP是不存在的VIP,则进行master选举,各路由器都宣告自己是master,发送vrrp通告;若收到其他设备的vrrp宣告中的优先级比自己高,则转回backup;(若宣告优先级相等,则比较IP,IP较大的优先权高)16keepalived的结构keepalived的构造如下:用户空间:watchdog:监控checker和VRRP进程;checker:对realserver进行健康检查;VRRP:实现VRRP功能,负责failover;IPVS wrapper:读取配置,发送规则给i

15、pvs;Netlink Reflector:设定vrrp的vip地址等;内核空间:ipvs:实现lvs功能;netlink:实现路由及其他的网络功能;17keepalived的使用keepalived的配置文件/etc/keepalived/keepalived.conf:启动:/usr/local/sbin/keepalived -f /etc/keepalived/keepalived.conf D两个子进程,一个vrrp,一个healthchecker,启动之后,会自动建立ipvsadm规则:18keepalived的效果两台keepalived机器的通信:realserver上的htt

16、p日志:19高可用组件介绍heartbeatlinux-HA的一个组件,实现高可用集群。如图,对外IP是.69,由主节点.57提供服务,主节点和备节点用心跳线连接(图中使用内网eth1连接),当主节点故障时,备节点通过心跳线检测到主节点无反应,就会抢占主节点的对外IP,开始对外提供服务。20heartbeat安装通过yum安装:安装libnetyum install -y libnet安装heartbeatyum install -y heartbeat需要建立haclient:hacluster用户(使用yum安装则会自动建立)需要编辑/etc/hosts,绑定主机名和ip(各个node)2

17、1heartbeat配置Heartbeat的主要配置文件有ha.cf、haresources、authkeys,yum安装的默认没有,需要从源码包获得。vi /etc/ha.d/ha.cfbcast eth0 #指明心跳使用以太网广播方式,并且是在eth0接口上进行广播ucast eth0 #采用网卡eth0的udp单播来组织心跳,后面跟的IP地址应为双机对方的IP地址node node1 #主节点主机名,可以通过命令“uname -a”查看。node node2 #备用节点主机名vi /etc/ha.d/haresourcesHaresources文件用于指定双机系统的主节点、集群IP、子网

18、掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个HA节点上该文件必须完全一致,此文件的一般格式为:node1(主节点的主机名) 00(对外IP) mysql(监控的服务/etc/init.d/)vi /etc/ha.d/authkeyscrc、md5和sha1,安全性依次提高,占用系统资源依次增加使用crc的配置:auth 11 crc然后,需要修改authkeys文件的权限为600,否则会提示Bad permissions on keyfile /etc/ha.d/authkeys, 600 recomme

19、nded.:chmod 600 /etc/ha.d/authkeys 22heartbeat运行启动heartbeat:/etc/init.d/heartbeat start如果成功,ifconfig可以看到自动绑定了一个对外IP,否则,查看/var/log/message进行调试。23heartbeat运行在日志中,可以看到启动过程:24heartbeat运行在主备两台机器上都启动heartbeat后此时,.57上的mysql已启动,.58上的mysql未启动,尝试关闭.57上的heartbeat:.57上的mysql也自动关闭,日志里显示:.58通过eth1检测到.57关闭,故将自己的my

20、sql自动启动,日志里显示:25heartbeat运行再开启.57上的heartbeat,则会再次切回最初状态,.58的日志显示了通过eth1检测到.57恢复的情况:26heartbeat的使用如图,设计一个简单的构造,在上述的例子中,只要加上一个额外的存储设备/数据资源,即可以实现mysql服务某种程度上的“高可用”。无论.57还是.58宕机,另外一台都可以接管资源,启动mysql,访问后端的存储设备/数据,保持对外的正常服务。27heartbeat的问题心跳失效时,可能发生split-brain,即“脑裂”。正常情况下,node1和node2会以心跳线(上面例子用的eth1)来互相检测存活

21、状态,当无法通过心跳检测对方,就会根据haresource文件里的配置接管对方的资源。最简单的例子是,在上面的实验中,如果eth1上的网线断了,node1和node2都是active,但是都无法通过心跳检测对方,则会发生互相抢占的情况。如果此时,两个mysql都运行着,同时写后面的数据,则必然发生严重的问题。可以考虑使用以下方法预防:1)多根心跳线;2)设置额外的仲裁机器;3)正在服务的node,锁住共享资源,防止其他node访问。28keepalived和heartbeat对比keepalived是基于vrrp的高可用,主要目的是模拟路由器的双机。heartbeat是基于主机或网络的高可用,

22、主要目的是模拟服务的双机。lvs的高可用一般使用keepalived,且keepalived的权重设置项priority可以避免脑裂问题。29高可用组件介绍mysql master/slavemysql master/slave并不能满足真正意义上数据库高可用的需求,但是可以作为一种备份策略,而且配置简单,同步迅速,master压力较大时、slave可以分担一部分读的压力。实际应用非常广泛。30mysql复制原理mysql复制,本质只是master上的操作记录下一份日志,然后slave获取这份日志,再按日志执行一遍。这个过程由三个进程(master上的IO,slave上的IO和SQL)完成:1

23、)slave上的IO进程:连接master,并请求master上的日志;2)master上的IO进程:收到来自slave的请求,根据请求,读取指定的日志(bin-log),并将日志内容和binlog信息(binlog文件名和binlog读取到的位置)返回给slave;3)slave上的IO进程:收到master来的结果,将日志添加到日志(relay-log)末尾,并将master传来的binlog信息记录到master-info文件中;4)slave上的SQL进程:检测relay-log,发现relay-log有新增内容后,解析成SQL,开始执行。31mysql复制级别mysql复制的级别,分

24、为:1)语句级别(statement level):将执行的每一条SQL记录在binlog中。IO较小、性能较好。但是必须记录上下文信息,否则出现严重异常,会导致数据不一致或slave中断。2)记录级别(row level):将执行的每一条修改结果记录在binlog中。binlog较大,IO也相应较大。假设执行了alter table类似的语句,相当于将整张表都会记录在binlog中。3)混合级别(mixedLevel):如果mysql认为使用statement 会导致master和slave产生数据不一致,则使用row 。32mysql复制架构mysql复制的架构,由于master不关心sl

25、ave的数量,只要slave请求了binlog信息,master就会读取binlog并传递给slave,所以一般都是master/slave,或者多个slave。虽然mysql可以搭建成master/master的模式,但是,即使搭建成这种构造,也只能一端提供服务。如果同时对外服务,由于复制是异步的,会导致数据不一致。33mysql复制的简单实例以 master 7 / slave 8 为例:在master上:1)建立复制用户并授予复制权限:CREATE USER repl8 IDENTIFIED BY repl;GRANT REPLICATION SLAVE ON *.* TO repl8;

26、2)为了保证master第一次备份到slave的数据完整,锁住表:FLUSH TABLES WITH READ LOCK;3)查看binlog的位置:SHOW MASTER STATUS;把master上的数据导出,并拷到slave上:mysqldump -A -master-data -single-transaction repl.sql 34mysql复制的简单实例在slave上导入主库的数据:mysql source /repl.sql执行change master,使slave上的IO进程找到master:CHANGE MASTER TO MASTER_HOST=7,MASTER_U

27、SER=repl,MASTER_PASSWORD=repl,MASTER_PORT=3306,MASTER_LOG_FILE=mysql-bin.000003,MASTER_LOG_POS=115309;这里的log_file和log_pos,是master上得到的信息,实际上,如果导出时用了-master-data,则在repl.sql中,也有这两个值。然后,启动slave:35mysql复制的简单实例可以在slave上show slaves tatus看到具体的同步信息:可以看到master的ip、端口、复制的用户等等。比较重要的信息,包括:Master_Log_File:binlog的名

28、字;Relay_Log_File:relaylog的名字;Slave_IO_Running:IO进程状态;Slave_SQL_Running:SQL进程状态;Seconds_Behind_Master:主从延时;这个主从延迟,指SQL进程和IO进程的时间戳差值,因此,实际上,并不一定说明了真正的延迟情况。36mysql复制的简单实例在master上导入一些数据,查看slave是否能正常同步过来:在master上:在slave上:37高可用组件介绍DRBD-Distributed Replicated Block Device如图,DRBD是一个服务器之间镜像块设备内容的存储复制方案。38DRB

29、D的复制DRBD可以使用master/master的模式,但是需要文件系统支持(比如GFS2)。如果是一般的文件系统,则可以使用master/slave的模式,但在主从模式下,从节点不可写、不可读、不可挂载。主从模式有三种复制方式:protocolA 异步,数据被发送到TCP/IP协议缓冲区就宣布复制完成protocolB 半同步,数据发送到从节点的内存接收缓冲区后宣布复制完成protocolC 同步,数据写入从节点的磁盘才宣布复制完成39DRBD的安装安装:./configure -prefix=/usr/local/drbd -with-km(-with-kmEnable kernel m

30、odule)drbd的配置都在/etc/drbd.conf(或$prefix/etc/drbd.conf)文件中,(各个节点的drbd.conf需要完全相同):include drbd.d/global_common.conf;#包含global和common的配置include drbd.d/*.res;#包含单独资源的配置40DRBD的配置vim /usr/local/drbd/etc/drbd.d/global_common.confglobal usage-count yes; #是否参加DRBD使用者统计,默认是yescommon protocol C; #同步协议 disk # 配

31、置磁盘错误处理策略 # on-io-error fencing use-bmbv no-disk-barrier no-disk-flushes # no-disk-drain no-md-flushes max-bio-bvecs # on-io-error detach; # 底层IO错误时,detach分离节点 net # 设置主备机之间通信使用的信息算法 # sndbuf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers # max-epoch-size ko-count allow-two-p

32、rimaries cram-hmac-alg shared-secret # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork # cram-hmac-alg sha1; # shared-secret 1809641; syncer # 设置主备节点同步时的网络速率最大值,单位是字节. # rate after al-extents use-rle cpu-mask verify-alg csums-alg # rate 10M; 41DRBD的配置vim /usr/local/drbd/etc/

33、drbd.d/mysql.res (节点名和主机名一致,并绑定在hosts文件中)resource mysql # 资源名为mysql device /dev/drbd0; #指出drbd的标示名 meta-disk internal; #网络通信属性 on L-4157-BBS #设置节点cluster1 disk /dev/vdb1; #指出作为drbd的设备 address 7:7789; #指定ip和端口号 on L-4158-BBS disk /dev/vdb1; address 8:7789; 42DRBD的使用初始化资源:drbdadm create-md mysql这一步可能提示错误Command drbdmeta 0 v08 /dev/vdb1 internal create-md terminated with exit coolcode 40,需要在新挂的分区写入数据dd if=/dev/zero of=/dev/vdb1 bs=1M count=100启动drbd:/etc/init.d/drbd start查看drbd状态,可以发现两个节点的状态都是secondary:rootL-4157-BBS # /usr/local/drbd/sbin/drbd-overview 0:mys

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论