美文网首页ceph
配置ceph RGW (对象存储网关) 的高可用和负载均衡

配置ceph RGW (对象存储网关) 的高可用和负载均衡

作者: Joncc | 来源:发表于2018-11-14 17:14 被阅读28次
    1. 说明

    2. 环境检查及安装
      2.修改keepalived + Haproxy配置文件

    3. 启动服务

    4. 说明
      keepalived 用于高可用,
      haproxy 用于负载均衡
      下列中:

       192.168.0.203:7480    192.168.0.202:7480  是真实网关服务节点  (RGW)
        192.168.0.205         192.168.0.204  是负载均衡器     (LB)
       192.168.0.200         是用于负责均衡器间的高可用的虚拟ip   (VIP)
      

    架构示意图如下:


    image.png

    网关高可用和负载均衡架构图

    1. 环境检查及安装
    yum install keepalived haproxy  -y
    

    选取两个均衡节点(均衡节点不能和rgw节点重合),下面在均衡节点(LB)执行。
    开启linux ip转发功能

    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    sysctl -p
    

    允许绑定到非本地ip

    echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
    sysctl -p
    

    检查 :

    /usr/sbin/sysctl net.ipv4.ip_nonlocal_bind
    /usr/sbin/sysctl net.ipv4.ip_forward
    cat /proc/sys/net/ipv4/ip_forward  
    

    查看是否看起了ip转发功能
    如果上述文件中的值为0,说明禁止进行IP转发;如果是1,则说明IP转发功能已经打开。
    2.修改keepalived + Haproxy配置文件
    下面所有操作均只需在LB(负载均衡器)节点执行,
    本例中即在192.168.0.204;192.168.0.205 两个节点,分别修改下面配置文件
    keepalived 的配置文件
    全部节点采用backup,为了减少VIP来回切换。

    [root@home205 ~]# cat /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    vrrp_script chk_haproxy {
        script "killall -0 haproxy" # 检查haproxy进程
        interval 2
        weight 2
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface eno16780032    # 似情况修改
        virtual_router_id 1      # id号局域网唯一
        priority 100    # 优先级 每台都不能一样(0-254的数,可以设置成ip后最后3个数)
        advert_int 1   #VRRP Multicast广播周期秒数
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.0.200        # VIP,配好了,客户端连接该ip即可高可用
        }
        track_script {
            chk_haproxy
        }
    }
    

    haproxy 的配置文件

    [root@home205 ~]# cat /etc/haproxy/haproxy.cfg 
    #---------------------------------------------------------------------
    # Example configuration for a possible web application.  See the
    # full configuration options online.
    #
    #   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
    #
    #---------------------------------------------------------------------
    #---------------------------------------------------------------------
    # Global settings
    #---------------------------------------------------------------------
    global
        # to have these messages end up in /var/log/haproxy.log you will
        # need to:
        #
        # 1) configure syslog to accept network log events.  This is done
        #    by adding the '-r' option to the SYSLOGD_OPTIONS in
        #    /etc/sysconfig/syslog
        #
        # 2) configure local2 events to go to the /var/log/haproxy.log
        #   file. A line like the following can be added to
        #   /etc/sysconfig/syslog
        #
        #    local2.*                       /var/log/haproxy.log
        #
        log         127.0.0.1 local2
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid
        maxconn     4000
        user        root      # 此处要修改成对应的用户,建议用root
        group       root
        daemon
        # turn on stats unix socket
        stats socket /var/lib/haproxy/stats
    #---------------------------------------------------------------------
    # common defaults that all the 'listen' and 'backend' sections will
    # use if not designated in their block
    #---------------------------------------------------------------------
    defaults
        mode                    http
        log                     global
        option                  httplog
        option                  dontlognull
        option http-server-close
        option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
    #---------------------------------------------------------------------
    # main frontend which proxys to the backends
    #---------------------------------------------------------------------
    frontend rgw *:7480     # 侦听端口
        mode http
        default_backend    rgw
    #---------------------------------------------------------------------
    # round robin balancing between the various backends
    #---------------------------------------------------------------------
    backend rgw
        mode http
        balance    roundrobin     # 均衡模式,当前为轮循
        server rgw1 192.168.0.203:7480 check   # 填写真实网关IP和端口
        server rgw2 192.168.0.202:7480 check
    
    1. 启动服务
     systemctl start keepalived
     systemctl enable keepalived
     systemctl start haproxy
     systemctl enable haproxy
    

    最后记得防火墙允许相应端口,测试环境可以直接关闭防火墙,关闭

    selinux。
    systemctl stop firewalld
    

    另 : 上面演示的是搭建高可用的时候同时搭建负载均衡,如果只搭建网关高可用,则不需要配置haproxy,同时架构也有所变化,直接在两个网关节点(202, 203)安装keepalived(不需要额外节点),如下修改keepalived配置文件就可。(步骤1也转移到网关节点上操作)

    [root@node62 /etc/keepalived]# cat keepalived.conf
    ! Configuration File for keepalived
    
    vrrp_script chk_radosgw {
        script /etc/keepalived/kill_keepalived.sh  #检测脚本
        interval 2  #执行间隔时间s
        weight 2
    }
    
    vrrp_instance VI_1 {
        state BACKPUP
        interface ens37    # 似情况修改
        virtual_router_id 2      # id号局域网唯一
        priority 99   # 优先级 数字越大,优先级越高,每台都不能一样(0-254的数,可以设置成ip后最后3个数)
        advert_int 1 #VRRP Multicast广播周期秒数
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.157.200/24        # VIP,配好了,客户端连接该ip即可高可用
        }
        track_script {
            chk_radosgw    #在实例中引用脚本
        }
     
    }
    
    

    脚本内容

    [root@node62 /etc/keepalived]# cat kill_keepalived.sh 
    #!/bin/sh
    
    Count1=`ps -aux|grep -v grep |grep radosgw|wc -l`
    if [ $Count1 -eq 0 ]; then
        pkill keepalived
        
    else
        echo "ok"
        exit 0
    fi
    
    

    重启服务

     systemctl start keepalived
     systemctl enable keepalived
    

    当一个网关节点down机以后,虚拟IP会自动飘到其他网关节点。
    NOTE:

    相同的真实节点间可以配置多个高可用实例,设置不同的VIP,然后, 不同的节点都可以分配一个MASTER,只要不是同一个实例。(只要保证一个实例只有一个MASTER就可以)
    在测试的时候发现,切换后的虚拟IP不能跨网段访问,改用物理机后验证没有发现这个问题。

    keepalived配置文件 /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    
    global_defs {
    }
    
    vrrp_instance VI_1 {
        state MASTER              #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
        interface em2     #指定HA监测网络的接口
        virtual_router_id 49      #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
        priority 100              #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
        advert_int 1              #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
        authentication {          #设置验证类型和密码
            auth_type PASS        #设置验证类型,主要有PASS和AH两种
            auth_pass 49        #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
        }
        virtual_ipaddress {       #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
            172.29.101.250
        }
    }
    
    virtual_server 172.29.101.250 8080 {  #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
        delay_loop 6              #设置运行情况检查时间,单位是秒
        lb_algo rr                #设置负载调度算法,这里设置为wlc,即加权最少连接数算法
        lb_kind DR                #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
        nat_mask 255.255.255.0
        persistence_timeout 0    #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
                                  #有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
                                  #需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作
                                  #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受persistence_timeout的时间限制
        protocol TCP              #指定转发协议类型,有TCP和UDP两种
    
        real_server 172.29.101.162 8080 { #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开
            weight 100              #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
                                  #分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
            TCP_CHECK {           #realserver的状态检测设置部分,单位是秒
                connect_timeout 3    #表示3秒无响应超时
                nb_get_retry 3       #表示重试次数
                delay_before_retry 3 #表示重试间隔
                connect_port 8080
            }
        }
        real_server 172.29.101.163 8080 {
            weight 100
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 8080
            }
        }
        real_server 172.29.101.164 8080 {
            weight 100
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 8080
            }
        }
    }
    
    
    [root@localhost /etc/nginx]# cat nginx.conf
    
    user  root;  # 工作用户
    worker_processes  10; 
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        
        upstream rgw {   # 负载均衡名称rgw
        server 192.168.157.142:7480;
        server 192.168.157.141:7480;
        }
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
        
        client_max_body_size 10240m;
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       7480; # 监听端口
            server_name  localhost;
            # 制定post上传的$_FILES上传的文件地址,后面的数字表示 一级,二级,三级子目录
            client_body_temp_path  /spool/nginx/client_temp 3 2;
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
                client_max_body_size 10M;  # nginx上传文件大小限制,默认1MB
            proxy_pass http://rgw;    # 与前面的负载均衡名称一致
                add_header backendIP $upstream_addr;  # 返回实际访问的服务器,注意 生产环境不要开!!! 
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
          
        }   
    
    }
    

    参考:http://blog.51cto.com/lizhenliang/1653523
    http://jiebaby.com/index.php/archives/7/

    相关文章

      网友评论

        本文标题:配置ceph RGW (对象存储网关) 的高可用和负载均衡

        本文链接:https://www.haomeiwen.com/subject/ksqlfqtx.html