精华内容
下载资源
问答
  • 服务器容灾

    2012-08-06 07:37:40
    服务器容灾
  • 针对web服务器容灾自动切换方案

    千次阅读 2018-09-13 15:54:13
    我们网站的XX服务随着业务的增长我们需要配置跨IDC容灾情况,为了处理突发事件,避免影响网站的正常访问。自己在网上看了很多处理方法,结合自己的实际情况,我自己也在在局域网的测试服务器上演练了一把。 测试...
    http://toptree.iteye.com/blog/1735324



    我们网站的XX服务随着业务的增长我们需要配置跨IDC容灾情况,为了处理突发事件,避免影响网站的正常访问。自己在网上看了很多处理方法,结合自己的实际情况,我自己也在在局域网的测试服务器上演练了一把。


    测试结果表现良好,现在把我在局域网中的部署整理如下:


    思路:

    当服务器A 发生故障,服务器B可以迅速接管服务器A的任务,不影响用户的正常访问。

    当服务器A 故障恢复,服务器A可以马上接管服务器B的任务,服务器B恢复备机状态。


    做法:

    两台服务器上配置一个虚拟IP地址,主服务器先绑定虚拟ip地址,当发生故障时,备机自动接管虚拟ip地址,刷新网关路由地址。当主机恢复后,备机释放虚拟ip地址,主机再次主动接管虚拟ip地址,刷新网关路由地址。


    结构图:

    针对web服务器容灾自动切换方案 - ffwangkun@126 - 永恒的瞬间


    主服务器:ip 192.168.190.199

    备服务器: ip 192.168.190.208


    vip:192.168.190.88

    gateWay=192.168.190.254

    netMask=255.255.255.0

    bcast=192.168.190.255


    步骤:

    1、配置虚拟ip:192.168.190.88 到 www.test.com 绑定虚拟ip

    Shell代码   收藏代码
    1. /sbin/ifconfig eth0:1 192.168.190.88 broadcast 192.168.190.255    
    2. netmask 255.255.255.0  up  
    3. /sbin/route add -host 192.168.190.88 dev eth0:1  



    2、刷新网关路由

    Shell代码   收藏代码
    1. /sbin/arping -i eth0 -s 192.168.190.88  192.168.190.254 > /dev/null 2>&1  



    3、当发生故障时,主机192.168.190.199 ,释放虚拟ip192.168.190.88,备机192.168.190.208接管 虚拟ip192.168.190.88

    Shell代码   收藏代码
    1. /sbin/ifconfig eth0:1 192.168.190.88  broadcast  192.168.190.255   netmask 255.255.255.0 down          
    2. /sbin/arping -i eth0 -s 192.168.190.88  192.168.190.254 > /dev/null 2>&1  



    3、这时 www.test.com 解析到了备机服务器192.168.190.208


    4、重启备机web服务器


    5、若主机192.168.190.199服务恢复正常,备机192.168.190.208释放虚拟IP,主机

    绑定虚拟IP 192.168.190.88

    备机释放虚拟ip:

    Shell代码   收藏代码
    1. /sbin/ifconfig eth0:1 192.168.190.88  broadcast  192.168.190.255   netmask 255.255.255.0 down          
    2. /sbin/arping -i eth0 -s 192.168.190.88  192.168.190.254 > /dev/null 2>&1  



    6、重启启动主备机web服务


    主机192.168.190.199

    autoSwitchMain.sh切换脚本

    Shell代码   收藏代码
    1. #!/bin/sh  
    2. #############################################################  
    3. #desc:服务器宕机自动切换服务  
    4. #author:gaozhonghui  
    5. #mail:toptreegzh@163.com  
    6. #date:20121101  
    7. #############################################################  
    8.   
    9. vip=192.168.190.88  
    10. gateWay=192.168.190.254  
    11. netMask=255.255.255.0  
    12. bcast=192.168.190.255  
    13.   
    14. function_bind_vip1(){  
    15. /sbin/ifconfig eth0:1 {vip}&nbsp;broadcast&nbsp; {vip}&nbsp;broadcast&nbsp; {bcast}  netmask {netMask}&nbsp;up&nbsp;&nbsp;</span></span></li><li><span>/sbin/route&nbsp;add&nbsp;-host&nbsp; {netMask}&nbsp;up&nbsp;&nbsp;</span></span></li><li><span>/sbin/route&nbsp;add&nbsp;-host&nbsp; {vip} dev eth0:1  
    16. }  
    17.   
    18. function_remove_vip1(){  
    19. /sbin/ifconfig eth0:1 {vip}&nbsp;broadcast&nbsp; {vip}&nbsp;broadcast&nbsp; {bcast}  netmask {netMask&nbsp;down&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>function_vip_arping1(){&nbsp;&nbsp;</span></li><li><span>/sbin/arping&nbsp;-i&nbsp;eth0&nbsp;-s&nbsp;${vip}&nbsp;${gateWay}&nbsp;&gt;&nbsp;/dev/null&nbsp;<span>2</span><span>&gt;&amp;</span><span>1</span><span>&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>function_restart_nginx(){&nbsp;&nbsp;</span></li><li><span>/web/webserver/nginx/sbin/nginx&nbsp;-s&nbsp;reload&nbsp;&nbsp;</span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>bind_time_vip=<span>"N"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>while&nbsp;true&nbsp;&nbsp;</span></li><li><span>do&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;httpCode_rip1=`/usr/bin/curl&nbsp;-o&nbsp;/dev/null&nbsp;-s&nbsp;-w&nbsp;%{http_code}&nbsp;http://<span>192.168</span><span>.</span><span>190.199</span><span>`&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;x {netMask&nbsp;down&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>function_vip_arping1(){&nbsp;&nbsp;</span></li><li><span>/sbin/arping&nbsp;-i&nbsp;eth0&nbsp;-s&nbsp;${vip}&nbsp;${gateWay}&nbsp;&gt;&nbsp;/dev/null&nbsp;<span>2</span><span>&gt;&amp;</span><span>1</span><span>&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>function_restart_nginx(){&nbsp;&nbsp;</span></li><li><span>/web/webserver/nginx/sbin/nginx&nbsp;-s&nbsp;reload&nbsp;&nbsp;</span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>bind_time_vip=<span>"N"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>while&nbsp;true&nbsp;&nbsp;</span></li><li><span>do&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;httpCode_rip1=`/usr/bin/curl&nbsp;-o&nbsp;/dev/null&nbsp;-s&nbsp;-w&nbsp;%{http_code}&nbsp;http://<span>192.168</span><span>.</span><span>190.199</span><span>`&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;x {httpCode_rip1} == ”x200” ];  
    20.     then  
    21.         if [ {bind_time_vip}&nbsp;==&nbsp;<span>"N"</span><span>&nbsp;];&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_bind_vip1&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_vip_arping1&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bind_time_vip=<span>"Y"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_vip_arping1&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp; {bind_time_vip}&nbsp;==&nbsp;<span>"N"</span><span>&nbsp;];&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_bind_vip1&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_vip_arping1&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bind_time_vip=<span>"Y"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_vip_arping1&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp; {bind_time_vip} == ”Y” ]  
    22.         then  
    23.             function_remove_vip1  
    24.             bind_time_vip=”N”  
    25.         fi  
    26.     fi  
    27.     sleep 10  
    28. done  



    然后linux 启动守候进程

    /usr/bin/nohup /bin/sh  /home/Gzh/shell/ autoSwitchMain.sh   2>&1 > /dev/null &


    备机192.168.190.208:

    autoSwitchSlave.sh

    Shell代码   收藏代码
    1. #!/bin/sh  
    2. #############################################################  
    3. #desc:服务器宕机自动切换服务  
    4. #author:gaozhonghui  
    5. #mail:toptreegzh@163.com  
    6. #date:20121101  
    7. #############################################################  
    8.   
    9. vip=192.168.190.88  
    10. gateWay=192.168.190.254  
    11. netMask=255.255.255.0  
    12. bcast=192.168.190.255  
    13.   
    14. function_bind_vip1(){  
    15. /sbin/ifconfig eth0:1 {vip}&nbsp;broadcast&nbsp; {vip}&nbsp;broadcast&nbsp; {bcast}  netmask {netMask}&nbsp;up&nbsp;&nbsp;</span></span></li><li><span>/sbin/route&nbsp;add&nbsp;-host&nbsp; {netMask}&nbsp;up&nbsp;&nbsp;</span></span></li><li><span>/sbin/route&nbsp;add&nbsp;-host&nbsp; {vip} dev eth0:1  
    16. }  
    17.   
    18. function_remove_vip1(){  
    19. /sbin/ifconfig eth0:1 {vip}&nbsp;broadcast&nbsp; {vip}&nbsp;broadcast&nbsp; {bcast}  netmask {netMask}&nbsp;down&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>function_vip_arping1(){&nbsp;&nbsp;</span></li><li><span>/sbin/arping&nbsp;-i&nbsp;eth0&nbsp;-s&nbsp;${vip}&nbsp;${gateWay}&nbsp;&gt;&nbsp;/dev/null&nbsp;<span>2</span><span>&gt;&amp;</span><span>1</span><span>&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>function_restart_nginx(){&nbsp;&nbsp;</span></li><li><span>/web/webserver/nginx/sbin/nginx&nbsp;-s&nbsp;reload&nbsp;&nbsp;</span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>bind_time_vip=<span>"N"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>while&nbsp;true&nbsp;&nbsp;</span></li><li><span>do&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpCode_rip1=`/usr/bin/curl&nbsp;-o&nbsp;/dev/null&nbsp;-s&nbsp;-w&nbsp;%{http_code}&nbsp;http://<span>192</span><span>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>168.190</span><span>.</span><span>199</span><span>`&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;x {netMask}&nbsp;down&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>function_vip_arping1(){&nbsp;&nbsp;</span></li><li><span>/sbin/arping&nbsp;-i&nbsp;eth0&nbsp;-s&nbsp;${vip}&nbsp;${gateWay}&nbsp;&gt;&nbsp;/dev/null&nbsp;<span>2</span><span>&gt;&amp;</span><span>1</span><span>&nbsp;&nbsp;</span></span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>function_restart_nginx(){&nbsp;&nbsp;</span></li><li><span>/web/webserver/nginx/sbin/nginx&nbsp;-s&nbsp;reload&nbsp;&nbsp;</span></li><li><span>}&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li><span>bind_time_vip=<span>"N"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>while&nbsp;true&nbsp;&nbsp;</span></li><li><span>do&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpCode_rip1=`/usr/bin/curl&nbsp;-o&nbsp;/dev/null&nbsp;-s&nbsp;-w&nbsp;%{http_code}&nbsp;http://<span>192</span><span>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>168.190</span><span>.</span><span>199</span><span>`&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;x {httpCode_rip1} == ”x200” ];  
    20.         then  
    21.                 if [ {bind_time_vip}&nbsp;==&nbsp;<span>"Y"</span><span>&nbsp;];&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_remove_vip1&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bind_time_vip=<span>"N"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_vip_arping1&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp; {bind_time_vip}&nbsp;==&nbsp;<span>"Y"</span><span>&nbsp;];&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_remove_vip1&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bind_time_vip=<span>"N"</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_vip_arping1&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp; {bind_time_vip} == ”N” ]  
    22.                 then  
    23.                         function_bind_vip1  
    24.                         function_vip_arping1  
    25.                         bind_time_vip=”Y”  
    26.                 fi  
    27.         fi  
    28.   
    29.         sleep 10  
    30. done  



    启动守候进程

    /usr/bin/nohup /bin/sh  /home/Gzh/shell/autoSwitchSlave.sh   2>&1 > /dev/null &


    参考资料:

    http://blog.s135.com/post/379/

    展开全文
  • 最近天涯明月刀开启了首次内测,由于放号量大,玩家热情高,...这里就抛砖引玉地总结一些我们用到或是想到的MMOG服务器容灾方法。天刀的服务器采用了典型的MMOG后台架构: 上图进程按照部署结构,可以分为三个层...

    最近天涯明月刀开启了首次内测,由于放号量大,玩家热情高,服务器一直承担很大的压力,生怕由于宕机不可恢复等原因造成玩家流失或是口碑下降。好在通过一系列预定方案的实施和不断优化,虽然开服期间也出现过各种宕机问题,但是也可以说很好地顶住了这段时间的压力。这里就抛砖引玉地总结一些我们用到或是想到的MMOG服务器容灾方法。

    天刀的服务器采用了典型的MMOG后台架构:

    上图进程按照部署结构,可以分为三个层级:

    CLUSTER级:提供全局服务,如版本更新tcus、目录树tdir、账号信息tacc等。CLUSER级服务基本采用公司架构组提供的通用组件。

    IDC级:主要提供跨world的账号服务器,如激活封停服务accountsvr、IDC级账号服务accountsvr等。

    WORLD级:每个世界的主要逻辑进程,按照功能又可分为接入服务world conn,全局服务world global,场景服务world scene三个大类。其中world conn是接入服务进程的集群,world global提供全局的账号验证,数据存储和负载均衡等服务,world scene是场景逻辑进程的集群。

    在讨论容灾的具体方案之前

    展开全文
  • 服务器容灾思路

    2014-01-10 10:01:00
    业务需要服务器环境可以在宕机情况下,及时切换到备份服务器 本质上,数据都是存储在数据库中的 做好数据库的同步备份,保证好各服务器 应用程序一致,就很容易做服务器切换 但是最重要的一环,就是数据库的同步 ...

    网络环境中不确定因素太多

    有时候机房会挂,有时候服务器会挂

    业务需要服务器环境可以在宕机情况下,及时切换到备份服务器

    本质上,数据都是存储在数据库中的

    做好数据库的同步备份,保证好各服务器 应用程序一致,就很容易做服务器切换

    但是最重要的一环,就是数据库的同步


    之前一直在寻找数据库同步方案,数据库的同步功能,最终也没解决点问题,

    现在认识到,若是想做好系统的容灾功能,是需要程序架构上做良好的设计的


    做一个简单的模型

    需要三台不在同一机房的服务器

    A、 B、 C

    A B C 服务器环境配置目录都保持一致


    程序上的设计:

    把 A、B、C 服务器设计为 任意一台服务器拿出来都可以作为 生产服务器

    任意一台挂掉了,还有剩下的两台可以用

    (待续)







    转载于:https://my.oschina.net/foxidea/blog/191936

    展开全文
  • 服务器容灾之使用rsync文件异地同步

    千次阅读 2017-03-10 12:55:25
    原因:同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。掠过软连接文件。 问题14:rsync: read error: Connection reset by peer (104) rsync error: error in ...

    Rsync是一款不错的文件免费同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限、时间、软硬链接。第一次同步时 rsync 会复制全部内容,下次只传输修改过的文件部分。传输数据过程中可以实行压缩及解压缩操作,减少带宽流量。支持scp、ssh及直接socket方式连接,支持匿名传输。支持Linux,Window平台。写本文的时候,window版最新版为4.0.5版

    官网:http://rsync.samba.org/

    Linux版下载:http://rsync.samba.org/download.html

    Windows版下载:https://www.itefix.no/i2/cwrsync-get 选(Free Edition 免费版)

    客户端:cwRsync 4.0.5 Installer

    服务端:cwRsyncServer 4.0.5 Installer

     

    一、安装配置 Rsync 服务端

    Window版服务端:

    1. 点击服务端安装程序进行安装,安装过程中提示输入服务端程序以服务运行时的用户名,密码。可以自定义,也可以用默认的用户名密码设置。

    2. 安装完成之后,进入程序安装目录根目录,打开配置文件(如:C:\Program Files\ICW\rsyncd.conf ),进入配置。

    复制代码
    use chroot = false
    strict modes = false
    lock file = rsyncd.lock 
    hosts allow = 192.168.1.21
    max connections = 5
    port = 28950
    pid = 0
    uid = 0
    log file = /cygdrive/f/RsyncLog/rsyncd.log # Module definitions # Remember cygwin naming conventions : c:\work becomes /cygdrive/c/work [data_backup] path = /cygdrive/f/dataBackup auth users = dbbackuper secrets file = /cygdrive/e/Setting/Rsync/rsync_db.ps read only = no list = no transfer logging = yes
    复制代码

    以上Windows目录的写法,应该按照POSIX风格来写,默认配置文件的写法cygwin貌似不工作,而要写成cygdrive,如D:/data,要写成/cygdrive/d/data。

    以上配置只允许192.168.1.21访问,这里按需修改。

    strict modes = false 不验证用户密码,

    pid = 0,uid = 0指定匿名访问。

    auth users : 指访问data_backup的用户名

    secrets file : data_backup用户名对应的密码文件。

     

    3. 新建密码文件:E:\Setting\Rsync\rsync_db.ps 。如:

    root:root

    admin:12345

    密码文件格式:用户名:密码,一行一个,有的系统不支持长密码,另个密码文件的权限对其它用户组是不可读的,设置错了可能不工作。在Windows下,密码文件的访问权限一定要设置正确,不然用户验证的时候通不过。应将密码文件E:\Setting\Rsync\rsync_db.ps的权限加入Rsycn服务运行服务的用户名 cwRsyncServer 的读取权限 及 设置其为该文件为所有者。

     

    4. 在服务管理器中,找到服务 RsyncServer 服务,并启动服务。

    5. 如果开启了防火墙,则防火墙规则中要添加Tcp端口 28950 允许通信。

    6. 服务验证,打开dos命令框,输入telnet 192.168.1.20 28950 (如果没有安装telnet服务端与客户端,请在控制面板->添加删除程序->打开关闭windows功能中找到Telnet客户端和服务端,勾选进行安装)。如果telnet能成功连接,出现@RSYNCD: 30.0 等类似文字,则说明服务启动正常。

     

    二、安装配置 Rsync 客户端

    1. 安装Rsync客户端程序,直至安装完成。

    2. 测试服务器Rsync的连通性。在Rsync客户端所在计算机telnet Rsync服务端所在计算的相应地址和端口 

    telnet 192.168.1.20 28950

    出现@RSYNCD: 30.0 等类似文字,则说明客户端连接服务端正常。

     

    3. 打开Dos命令窗口,进到Rsync客户端安装目录的bin目录下,如:C:\Program Files\cwRsync\bin\。输入以下命令,开始进行同步:

    cd C:\Program Files\cwRsync\bin\
    rsync --port=28950 -vzrtopg --progress --delete 192.168.1.20::data_backup /cygwin/f/dataBackup --password-file=/cygdrive/e/Setting/Rsync/rsync_db.ps 

     

    参数说明:

    --port=28950 # 端口
    -vzrtopg --progress # 显示同步过程详细信息
    --delete # 从客户端目录中删除与服务端目录中不同的数据,保证两边数据完全一致
    /cygwin/f/dataBackup # Window下目录F:\dataBackup
    data_backup # 服务端配置文件rsyncd.conf文件中定义的模块名称
    192.168.1.20 # Rsync服务端IP地址
    

    设置该命令文件的用户需要添加密码文件的读取权限及加其为文件所有者。如下:

     

     4. 添加系统计划定期执行

     新建命令执行文件C:\Program Files\cwRsync\bin\SyncDB_NoAuth.cmd。将以下命令保存到该文件中:

    rsync --port=28950 -vzrtopg --progress --delete 192.168.1.20::data_backup /cygwin/f/dataBackup --password-file=/cygdrive/e/Setting/Rsync/rsync_db.ps 

     

    在Window中添加任务计划,不同的系统,操作有点不一样。

    windows xp/Server 2003 : 开始->设置->控制面板->任务计划->打开添加任务计划->下一步

    windows 7/Server 2008 : 开始-> 控制面板 -> 管理工具 -> 任务计划

     

     

     

     

    三、配置项解析

     

     

    四、安装配置中常见问题

     

    错误1: rsync: read error: Connection reset by peer (104) 
    rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receive r=3.0.2] 
    解决:很大可能是服务器端没有开启 rsync 服务。开启服务。


    错误2:@ERROR: chdir failed 
    rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2] 
    解决:服务器端同步目录没有权限,cwrsync默认用户是Svcwrsync。为同步目录添加用户Svcwrsync权限。


    错误3:@ERROR: failed to open lock file 
    rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2] 
    解决:配置文件 rsync.conf中添加 lock file = rsyncd.lock 即可解决。

     

    错误4: rsync: could not open password file "/cygwin/e/Setting/Rsync/rsync_db.pwd": No such file or directory (2)

    解决:密码文件的目录一定要存在,而且要用POSIX风格的写法:/cygdrive/e/Setting/Rsync/rsync_db.pwd

     

    错误5:@ERROR: auth failed on module data_backup rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]

    解决:密码错误,输入正确的密码即可。用户名和密码如果都正确,可能是远程rsync服务器的帐户密码文件的权限必须为600。

     

    错误6: password file must not be other-accessible

    解决:这是因为rsyncd.pwd rsyncd.sec的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd, Windows下应将密码文件的所有者改成程序运行的用户。

     

    错误7:@ERROR: invalid uid nobody . rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
    解决:在rsyncd.conf文件中添加下面两行即可
    uid = 0
    gid = 0 

     

    问题8: @ERROR: chroot failed
    rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
    原因:服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。

     

    问题9:@ERROR: Unknown module ‘tee_nonexists’
    rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
    原因:服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。

     

    问题10:rsync: failed to connect to 218.107.243.2: No route to host (113)
    rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
    原因:对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcp udp的873或者指定的rsync端口打开。

     

    问题11:rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
    原因:/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。

     

    问题12:rsync: chown "" failed: Invalid argument (22)
    原因:权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)

     

    问题13:@ERROR: daemon security issue -- contact admin
    rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
    原因:同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。掠过软连接文件。



    问题14:rsync: read error: Connection reset by peer (104)
    rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receiver=3.0.2]
    解决:很大可能是服务器端没有开启 rsync 服务,开启服务。

    展开全文
  • 服务器容灾产品价格功能比对表 包括市面上比较多的单服务器和多服务器防灾产品的功能介绍和价格对比
  • 数据库服务器备份容灾规范
  • 小型门户网站在利用自身独特信息资源的同时,抓取网络其它资源,丰富自身网站信息,在提供WEB服务的同时提供FTP、MAIL和DNS服务,该...数据缓存功能,全面引入动态缓存功能,减少服务器资源占用,提高负载和访问速度。
  • ;目录;企业对信息系统依赖程度与日俱增 各种灾难都会对信息业务连续...RPO Recovery Point Objective恢复点目标 指业务系统所允许的在灾难过程中的最大数据丢失量用来衡量容灾系统的数据冗余备份能力 RTO Recovery Time
  • 我们网站的XX服务随着业务的增长我们需要配置跨IDC容灾情况,为了处理突发事件,避免影响网站的正常访问 自己在网上看了很多处理方法,结合自己的实际情况,我自己也在在局域网的测试服务器上演练了一把。 测试结果...
  • svn实现容灾备份

    2019-08-02 16:29:02
    Svn的容灾备份和数据恢复 环境声明 这里采用svn的镜像备份 源版本路径:svn://192.168.244.134/ceshi 镜像版本: ip 192.168.244.132 建立镜像版本库: Yum install –y svn Svnadmin create /home/svn/test ...
  • xen服务器容灾

    2013-07-31 16:45:00
    为什么80%的码农都做不了架构师?>>> ...
  • 现在很多多个服务器容灾的解决方案是用的nginx+keepalived,nginx用来反向代理以及负载均衡,keepalived用来监测nginx服务状态,一旦有nginx服务宕机,另一台服务器会自动接管请求,达到服务的高可用目的。...
  • (100台的web服务器数据备份哟~备份思路可以是先在本地按日期打包,然后再推到备份服务器backup上),NFS存储服务器同Web服务器,实际工作中就是全部的服务器) 具体要求如下: 1)所有服务器的备份目录必须都为/...
  • nginx容灾

    千次阅读 2017-10-21 14:10:16
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。  2、weight  指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。  例如:  upstream bakend { ...
  • 服务容灾(转)

    千次阅读 2016-10-26 20:31:25
    【纲要】常见事故及如何容灾逻辑层容灾数据层容灾容灾判定负载均衡,过载保护【常见事故及如何容灾服务器故障死机 ——备份(硬件方案,软件方案)服务雪崩——负载均衡,过载保护网络环境恶劣——多运营商,异步...
  • HBase容灾与备份

    2020-10-25 01:06:59
    本文主要介绍 Hbase 常用的三种简单的容灾备份方案,即CopyTable、Export/Import、Snapshot。分别介绍如下: 二、CopyTable 2.1 简介 CopyTable可以将现有表的数据复制到新表中,具有以下特点: 支持时间区间 、...
  • **备份级别:**全量备份、增量备份 **备份加密压缩:**支持 MongoShake 阿里云宣布正式开源基于MongoDB的容灾和多活解决方案平台—MongoShake。MongoShake是一个通用型平台服务,作为数据连通的桥梁,打通各个闭环...
  • 什么是云容灾?它与传统数据备份有什么不同? 一、什么是云容灾? 云容灾,也叫做云灾备(英文名:Cloud DRaaS)是以云服务的方式为企业提供提供数据容灾备份服务,企业无需投入大量时间、人力、资源成本,具有即开...
  • 运维如何快速实现容灾部署?

    千次阅读 2018-10-19 10:23:26
    前言现如今本地负载均衡技术已经解决服务器集群的高可用问题,但是断电、施工挖断光缆、自然灾害等依然可以导致整个数据中心无法工作。另外,中国网络由多家运营商组成,各运营商之间...
  • VMware服务器虚拟架构容灾解决方案
  • 阿里云服务器快照,是一个很好的备份容灾工具,不了解的可以通过本文了解一下。 快照可以做什么? 这是一种便捷高效的数据保护服务手段,可以对重要业务数据进行备份,来应对误操作、攻击、病毒等导致的数据丢失风险...
  • 备份容灾技术基础

    万次阅读 多人点赞 2018-05-17 13:11:34
    备份概念及结构 ...备份服务器 备份软件 存储设备 备份的结构: 软件结构: 图:NBU软件备份架构 LAN Based: 图:LAN Based结构 优点: 备份系统和应用系统分开,备份时不占用应...
  •  对于很多商业用户“保护数据-使它保存在系统以外”是所有灾难恢复过程的关键,其它的措施还包括改善数据复制的速度和提供一个完整并且健壮的不...服务器虚拟化可以有效实现容灾恢复 - 虚拟桌面 - 51CTO技术博客
  • 云数据中心备份容灾设计方案

    万次阅读 2018-09-20 15:06:25
    导读:云计算中心 涵盖系统多、类型复杂、关键性...云数据中心备份容灾设计方案   本文主要内容: 数据中心业务分析 灾备技术实现 未来两地三中心规划 灾备方案实施步骤   数据中心业务分析   业务恢...
  • 同时,备份上云的应用服务器整机可以在云上以服务器虚机的形式直接拉起运行,满足所需的RPO和RTO保障业务连接性,实现云上容灾。 混合云备份服务针对多种场景具有以下优势:  充分利用公有云资源,搭建云上...
  • 提出一种基于集群服务器容灾系统副本管理方案,提出多个副本的一致性维护和副本选择的算法以及副本数量和分布方式的数学模型。通过容灾系统的性能测试实验,证明它能够实现数据的快速自动恢复,有效地管理副本,并...
  • mysql数据库容灾实时备份主从

    千次阅读 2017-05-11 19:18:00
     e、然后在添加一台服务器,将上面的从库作为主库继续同步到当前新加入的这台服务器中,只需要在当前新服务器上mysql配置my.ini   ******此处有两种情况***********   a、如果你以前的从服务器已经开启日志记录...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,162
精华内容 13,664
关键字:

服务器容灾