Fork me on GitHub
随笔 - 215  文章 - 13  trackbacks - 0
<2017年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345


专注即时通讯及网游服务端编程
------------------------------------
Openresty 官方模块
Openresty 标准模块(Opm)
Openresty 三方模块
------------------------------------
本博收藏大部分文章为转载,并在文章开头给出了原文出处,如有再转,敬请保留相关信息,这是大家对原创作者劳动成果的自觉尊重!!如为您带来不便,请于本博下留言,谢谢配合。

常用链接

留言簿(1)

随笔分类

随笔档案

相册

Awesome

Blog

Book

GitHub

Link

搜索

  •  

积分与排名

  • 积分 - 203829
  • 排名 - 127

最新评论

阅读排行榜

https://my.oschina.net/ydsakyclguozi/blog/515050

redis是非常实用的优秀nosql开源产品,在高并发的服务器环境中,可以作为缓存和队列使用.美中不足的是,到现在为止,redis并没有推出自己的集群方案,对一个完善的生产环境,负载均衡,高可用,主从备份都是必不可少的选项,redis提供了稳定·的主从备份功能,提供了数种持久化策略,在主从备份上也提供了增量备份的功能,现在通过sentinel提供主从热备的功能,可惜功能上并不完善,达不到生产环境的要求。

现在我们选定keepalived作为redis的高可用支持,keepalived不仅可以比较完善的支持redis的高可用,而且作为lvs负载均衡的配套产品,和lvs天然具有较好的配合,对于搭建redis集群有较好的扩展性。

redis和keepalived的安装非常简单,网上大把的文章可以参考,这里就不再赘述,这里按照redis双机主从热备的场景,讲需要注意的几点,网上的很多文章没有讲清楚。

1,lvs和keepalived的关系,lvs起的是负载均衡功能,而keepalived则是高可用(热备)的支持,keeplaived可以单独使用。

2,keepalived通过VIP虚拟ip的绑定转换来打造热备支持,在转化主从身份的过程中,还支持脚本的调用,根据不同的脚本,keepalived可以用于不同的场景要求,可谓功能强

3,centos环境中keepalived的使用需要安装ipvsadm支持。

4,如果负载均衡使用的是nat策略,那么可以不设置linux的arp_ignore(arp组播忽略)选项。

5,/etc/sysconfig/keeaplived 为keepalived的启动脚本,这个可以不用修改,如果keepalived的启动配置不在/etc/keepalived/keepalived.conf下则需要在这里指定配置文件的位置

  /etc/keepalived/keepalived.conf为kaapalived的默认配置文件所在位置

  /var/log/messages中记载了keepalived的启动,vip转化等log信息,至于角色转化过程中的脚本执行日志,由各个脚本自己指定

下面贴出主从的keepalived.conf设置,在centos7下测试通过

主机keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 128.0.0.1
   smtp_connect_timeout 30
   router_id LVS_MASTER
}

vrrp_script chk_redis 

     script "/usr/local/redis/sh/redis_check.sh 127.0.0.1 6379" 
     interval 2 
     timeout 2
     fall 3
}

vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 60
    priority 100
    advert_int 3
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.72.115
       # 192.168.200.17
       # 192.168.200.18
    }
     track_script {
        chk_redis
    }
    notify_master "/usr/local/redis/sh/redis_master_master.sh 127.0.0.1 192.168.72.128 6379"
    notify_backup "/usr/local/redis/sh/redis_master_slave.sh 127.0.0.1 192.168.72.128 6379"
    notify_fault "/usr/local/redis/sh/redis_fault.sh" 
}

virtual_server 192.168.72.115 6379 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 192.168.72.11 6379 {
        weight 1
    TCP_CHECK {
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 3
          connect_port 6379
        }
    }

   real_server 192.168.72.128 6379 {
        weight 1
        TCP_CHECK {
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 3
          connect_port 6379
        }
    }
}

从机的keepalived.conf配置

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 128.0.0.1
   smtp_connect_timeout 30
   router_id LVS_BACKUP
}

vrrp_script chk_redis 

     script "/usr/local/redis/sh/redis_check.sh 127.0.0.1 6379" 
     interval 2 
     timeout 2
     fall 3
}

vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 60
    priority 99
    advert_int 3
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.72.115
       # 192.168.200.17
       # 192.168.200.18
    }
     track_script {
        chk_redis
    }
    notify_master "/usr/local/redis/sh/redis_backup_master.sh 127.0.0.1 192.168.72.11 6379"
    notify_backup "/usr/local/redis/sh/redis_backup_slave.sh 127.0.0.1 192.168.72.11 6379"
    notify_fault "/usr/local/redis/sh/redis_fault.sh" 
}

virtual_server 192.168.72.115 6379 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 192.168.72.11 6379 {
        weight 1
    TCP_CHECK {
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 3
          connect_port 6379
        }
    }

   real_server 192.168.72.128 6379 {
        weight 1
        TCP_CHECK {
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 3
          connect_port 6379
        }
    }
}

请大家注意几点:

1,同一组里的各个机器配置文件中router_id不能相同,很多文章讲这里可以相同是错误的,这个是组中身份的标识。同一个组里的virtual_router_id必须相同,这是组标识。

2,priority是设置优先级别的,主服务器的优先级必须高于从服务器,即这个数字要大些。

3,interface后跟的是网卡名,在centos7中可不叫eth0,最好在配置之前使用ifconfig查看下你的网卡名称。

4,real_server中的weight设置的是负载均衡优先级,如果主从热备的场景下,这里可以设置为相同。

 

keeaplived可以在主从都运行良好的情况下检测主从状态,当主服务器down掉,或者进程意外终止时,先将VIP绑定到从服务器上,然后通过指定的脚本来提升从服务器的应用层面的角色定位,在redis中就是运行slave no one,当主服务器恢复服务后,将VIP恢复绑定至主服务器,然后调用脚本同步主服务器宕机时间中从服务器储存的数据,然后将主服务器redis进程提升为主redis,从服务器redis降格为备份进程。这些功能的实现都是通过主动调用notify_master脚本实现,这个脚本当然可以配置为其他的功能,所以,这就可以使keepalived在很多场合发挥作用。

交叉参考:
http://www.cnblogs.com/lulu/archive/2013/04/14/3021261.html

posted on 2017-07-10 11:32 思月行云 阅读(777) 评论(0)  编辑 收藏 引用 所属分类: Redis\Mongo

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理