部署全局缓存集群

请在所有服务端节点执行以下操作。

部署集群

  1. 修改“gcache.conf”配置项。

    1. 打开文件。
      1
      vi /opt/gcache/conf/gcache.conf
      
    2. “i”键进入编辑模式,参照如下内容进行修改。
      • 以下为“gcache.conf”的全量可配置项,其中用“#”注释的配置项为默认项,即如果用户不配置,该配置项就会以默认值生效,如果用户取消注释进行配置,程序会以用户的配置值生效。
      • 非默认项的配置项为必须配置项,即配置文件必须存在这些配置项,用户可以自行配置生效。
      • 配置项以单元标签进行分类,配置项与单元标签相关,如果A单元的配置项配置到B单元的标签下不会生效。单元内的标签可以无序,例如A标签下的item1可以在item2之前也可以在之后,但是必须在A标签下;单元也可以无序,例如A单元可以在B单元之前,B单元也可在A单元之前。
      • ccm单元为ccm服务专属配置单元,gc、sa、global单元为globalcache服务专属配置单元,其余单元为共享配置单元。服务启动会校验专属配置单元和共享配置单元中的配置项。
      • public_ipv4_addr和cluster_ipv4_addr出于安全角度考虑建议配置到不同网段。
        1
        2
        3
        4
        5
        6
        7
        8
        9
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
       20
       21
       22
       23
       24
       25
       26
       27
       28
       29
       30
       31
       32
       33
       34
       35
       36
       37
       38
       39
       40
       41
       42
       43
       44
       45
       46
       47
       48
       49
       50
       51
       52
       53
       54
       55
       56
       57
       58
       59
       60
       61
       62
       63
       64
       65
       66
       67
       68
       69
       70
       71
       72
       73
       74
       75
       76
       77
       78
       79
       80
       81
       82
       83
       84
       85
       86
       87
       88
       89
       90
       91
       92
       93
       94
       95
       96
       97
       98
       99
      100
      101
      102
      103
      104
      105
      106
      107
      108
      109
      ## 注意关于文件夹,文件路径,路径配置项的值长度最长为128,过长会被判断非法
      ## ---------------------------- log ----------------
      # [log]
      # log_flush_interval = 500         ## 日志刷盘频率,单位毫秒,range:[0,2147483647]
      # log_size = 20971520              ## 最大备份日志大小,单位bytes,range:[0,20971520]
      # log_num = 100                    ## 最大日志备份文件数量,单位个,range:[0,2147483647]
      # log_level = INFO                 ## 日志打印级别阈值,range:CRI,ERR,WARN,INFO,DBG
      # log_file_path = /var/log/gcache/                      ## 日志文件路径
      # log_backup_file_path = /var/log/gcache/backup/        ## 日志备份文件路径
      # log_file_path_tmp = /opt/gcache/tmp/                  ## 日志系统故障时容错路径
      # log_backup_file_path_tmp = /opt/gcache/tmp/backup     ## 日志系统故障时容错备份路径
      # log_disk_threshold = 80                               ## range:[0,100]
      # log_disk_interval = 1                                 ## range:[0,2147483647]
      # log_mod_level = 386:INFO                              ## 各模块日志级别,书写格式:moduAId:logLevel,modiBId:logLevel
      # zk_log_level = zk_log_level_info                      ## zk日志级别,range: zk_log_level_error,zk_log_level_warn, zk_log_level_info, zk_log_level_debug
      # log_retention_period = 31536000                       ## 日志留存期,单位秒
      ## --------------------------security------------------------
      [security]
      tls_status=on                                           ## 是否开启tls,range:on,off。注意如果配置为on,需要security标签下的所有配置项合法,比如kmc,cert路径文件存在;如果配置是off,那么启动时不会校验该单元标签下的配置项
      # max_connect = 4096                                    ## ssl最大链接数,range:[0,40960]
      # portid_start = 7880                                   ## 端口号起点,range:[1024,65535]
      # portid_end = 7889                                     ## 端口号终点,range:[1024,65535]
      # cert_check_period_days = 3                            ## 证书过期检测周期天数,range:[0,2147483647]
      # cert_check_warnning_days = 90                         ## 证书过期告警提前天数,range:[0,2147483647]
      # tls_cipher_list = TLS_AES_256_GCM_SHA384              ## tls算法, range:TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_AES_128_CCM_SHA256, TLS_AES_128_CCM_8_SHA256
      # cert_path = /opt/gcache/secure/Certs                  ## cert相关文件路径
      # ca_file = ca.crt                                      ## ca证书文件名,所在目录为cert_path配置路径
      # keypass_file = identity.ks                            ## 口令文件名称,所在目录为cert_path配置路径
      # agent_cert_file = agent.crt                           ## 设备证书文件名称,所在目录为cert_path配置路径
      # public_key_file = agent.common                        ## 设备公钥文件名称,所在目录为cert_path配置路径
      # private_key_file = agent.self                         ## 设备私钥文件名称,所在目录为cert_path配置路径
      # revoke_crl_file = revoke.crl                          ## 吊销列表文件名称,所在目录为cert_path配置路径
      # kmc_path = /opt/gcache/secure/kmc                     ## kmc相关文件路径
      # kmc_primary_ksf = kmc.primary.ks                      ## kmc primary密钥文件名,所在目录为kmc_path配置路径
      # kmc_standby_ksf = kmc.standby.ks                      ## kmc standby密钥文件名,所在目录为kmc_path配置路径
      ## -------------------------- gcrpc -----------------
      [gcrpc]
      ccm_address = 192.168.1.108:7910                            ## ccm进程的rpc server侦听地址,ip与public_ipv4_addr保持一致
      gc_address  = 192.168.1.108:7915                            ## gc进程的rpc server侦听地址,ip与public_ipv4_addr保持一致
      # -----------------------------proxy-----------------------------
      [proxy]
      ceph_conf_path = /opt/gcache/ceph/ceph.conf                ## ceph配置文件路径
      ceph_keyring_path = /opt/gcache/ceph/ceph.client.admin.keyring     ## ceph keyring文件路径
      # core_number = 26,27,28,29                           ## CephProxy绑核信息,其中每个数字表示CPU ID
      # bind_core = 1                                       ## 是否绑核,1表示绑核,0表示不绑核,为0时,core_number无效
      rados_mon_op_timeout = 5                              ## CephProxy与Monitor交互的请求超时时间,单位秒(s),如果不设置该选项或者改为0,则表示不超时,range:[0,2147483647]
      # rados_osd_op_timeout = 0                            ## osd超时时间,0表示不设置超时,range:[0,2147483647]
      # proxy_worker_queue_num = 1                            ## range:[0,32]
      # proxy_rados_ctx_num = 1                               ## range:[0,32]
      # --------------------------- communicate ---------------------------------
      [communicate]
      public_ipv4_addr = 192.168.1.108                      ## 前端网络IP,服务端与客户端之间的网络, 用于客户端与SA(Sever Adapter)之间通信
      # local_port = 7880,7881                              ## 本节点用于接收客户端的请求的端口号,目前最多支持配置8个端口使用端口号,每个需要在[1024,65535]内的没有使用的端口号
      zk_server_list = ceph1:2181,ceph2:2181,ceph3:2181     ## 在ZooKeeper中配置的IP,在/etc/hosts中映射得到,ZooKeeper server集群IP:port,如果是多机,则用逗号,隔开; 如果开启了tls_status,那么端口号需要设置为客户端安全端口号2281(与zookeeper server zoo.cfg中的配置相同)。无默认值,必须配置
      # -----------------------------ccm----------------------------
      [ccm]
      # replication_num = 3                                 ## 数据副本数,多节点填3,单节点填1
      cache_node_num = 3                                    ## 当前gc集群节点数,该值必须不小于replication_num,不大于集群最大节点数128
      pt_num = 4096
      pg_num = 1024
      # temp_fault_time_out = 1800                          ## 临时故障检测时间,超时判断为永久故障,range:[1,2147483647]
      # check_node_up_time_out = 900                        ## 节点启动检测时间,超时判断为节点故障,range:[1,2147483647]
      # heartbeat_timeout = 5                               ## 心跳超时时间,单位秒,范围[3,20]
      # heartbeat_interval = 1                              ## 心跳上报和检测时间间隔,单位秒,范围[1,3]
      # rpc_timeout = 5                                     ## 范围[5,15]
      ccm_monitor = 1                                       ## 该节点是否作为ccm部署节点,1为部署,0为不部署
      fault_domain = node                                   ## ccm故障域设置,可选值node或者rack
      # write_op_throttle = 200                             ## 限制未返回的write operation的数量,0表示不限制
      # read_op_throttle = 0                                ## 限制未返回的read operation的数量,0表示不限制
      # write_bw_throttle = 600000                          ## 限制未返回的write operation的带宽,单位kb,0表示不限制
      # read_bw_throttle = 0                                ## 限制未返回的read operation的带宽,单位kb,0表示不限制
      [gc]
      cluster_ipv4_addr = 192.168.2.108                     ## 后端网络IP,服务端之间的网络,用于Plog(Persistence Layer)之间通信
      # rack_id = 0xFFFFFFFF
      ## ------------------------ cluster Hb -------------
      # # cluster heartbeat parameters, 超时时间为retry_times * retry_interval + interval,如下默认配置为5s
      # [clusterHb]
      # interval = 1                                        ## 连接上如果没有数据发送的话,多久后发送keepalive探测分组,单位是秒,range:[1,3]
      # retry_times = 4                                     ## 关闭连接之前的最大重试次数,range:[3,10]
      # retry_interval = 1                                  ## 前后两次探测之间的时间间隔,单位是秒,range:[1,3]
      # -----------------------------sa----- ------------------------
      # [sa]
      # core_number_64 = 18,19,20,21,22,23,24,25,26,27          ## server adaptor绑核信息,其中每个数字表示CPU ID
      # core_number_96 = 72,73,74,75,76,77,78,79,80,81,82,83
      # core_number_128 = 72,73,74,75,76,77,78,79,80,81,82,83
      # core_number_256 = 72,73,74,75,76,77,78,79,80,81,82,83
      # sa_worker_core_64 = 25,26,27
      # sa_worker_core_96 = 79,80,81,82,83
      # sa_worker_core_128 = 18,19,20,21,22,23,24
      # sa_worker_core_256 = 79,80,81,82,83
      # queue_amount = 8                                     ## 消息处理队列数量,range:[4,5000]
      # queue_max_capacity = 512                             ## 消息处理队列最大容量, 最大1024,range:[1,1024]
      # msgr_amount = 5                                      ## SA的msgr-worker线程数量,range:[1,16]
      # bind_core = 1                                        ## messenger线程是否绑核,range:0 or 1
      # bind_queue_core = 1                                  ## pthread绑核,range:0 or 1
      # write_qos = 1                                        ## 是否启用wcache的QoS,0表示不启用
      # get_quota_cyc = 1000                                 ## 启用wcacheQoS时,读取wcache带宽限额的时间间隔,单位ms
      # enable_messenger_throttle = 1                        ## 是否启用Ceph messenger的QoS,0表示不启用
      # sa_op_throttle = 30000                               ## 限制未返回的operation的数量,0表示不限制
      #-------------------------sa ceph-------------------------
      [global]
      ms_connection_idle_timeout = 259200                    ## 空闲链接可以保留的时间,单位秒。网络超时配置
      # 以下三个参数用于配置Ceph messenger的throttle。启用Ceph messenger的QoS时有效
      osd_client_message_size_cap = 8589934592
      osd_client_message_cap = 5000000000
      ms_dispatch_throttle_bytes = 1258291200
      
      [cache]
      # rcache_snapshot_enable = 1                           ##是否需要开启读缓存快照加速功能,建议在云桌面场景下开启,默认关闭
      
    3. (可选)全闪存场景下建议修改如下配置项。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      [sa]
      msgr_amount = 10                                                                             #将msgr sa的数量修改为10个
      core_number_128 = 18,19,20,21,22,23,24,25,26,27,28,29,30,31        #SA使用18-31核
      sa_op_throttle = 30000                                                                      #SA限制未返回的operation的数量为30000
      [proxy]
      proxy_worker_queue_num = 8                                                           #CephProxy使用的proxy_worker的数量
      proxy_rados_ctx_num = 8                                                                  #CephProxy使用的rados数量
      core_number = 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63      #CephProxy绑核信息
      [communicate]
      local_port = 7880,7881,7883                                                             #SA使用3个的local_port
      
    4. “Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。

  2. (可选)修改“ceph.conf”配置项。

    全闪存场景下建议进行如下修改,均衡型场景请跳过该步骤。

    1. 打开文件。
      1
      vim /opt/gcache/ceph/ceph.conf
      
    2. “i”键进入编辑模式,参照如下内容进行修改。
      1
      2
      [global]
      ms_async_op_threads = 6
      
    3. “Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。

  3. 拷贝Ceph配置信息到“/opt/gcache/ceph”下。

    1
    2
    3
    4
    cp /etc/ceph/ceph.conf /opt/gcache/ceph/
    cp /etc/ceph/ceph.client.admin.keyring /opt/gcache/ceph/
    chown globalcache:globalcache -R /opt/gcache/ceph/
    chmod 640 /opt/gcache/ceph/*
    

  4. 为globalcache和globalcacheop开放相关命令免密权限。

    1. 创建并打开“/etc/sudoers.d/globalcache-smartctl”文件。
      1
      2
      touch /etc/sudoers.d/globalcache-smartctl
      vim /etc/sudoers.d/globalcache-smartctl
      
    2. “i”键进入编辑模式,添加如下内容。
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      globalcache ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9]n1
      globalcache ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9]n1p[0-9]
      globalcache ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9]n1p[0-9][0-9]
      globalcache ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9][0-9]n1
      globalcache ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9][0-9]n1p[0-9]
      globalcache ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9][0-9]n1p[0-9][0-9]
      globalcache ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9][0-9]n1p[0-9][0-9][0-9]
      globalcacheop ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9]n1
      globalcacheop ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9]n1p[0-9]
      globalcacheop ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9]n1p[0-9][0-9]
      globalcacheop ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9][0-9]n1
      globalcacheop ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9][0-9]n1p[0-9]
      globalcacheop ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9][0-9]n1p[0-9][0-9]
      globalcacheop ALL=NOPASSWD:/usr/sbin/smartctl -i /dev/nvme[0-9][0-9]n1p[0-9][0-9][0-9]
      

      此处以NVMe NameSpace为1作为示例,请以此为参照对其余NameSpace进行修改。

    3. “Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。

  5. 根据所使用的机器的NVMe盘的使用情况修改“bdm.conf”配置文件,配置文件在“/opt/gcache/conf”目录下。

    1. 使用如下命令查看系统磁盘,确认哪一块盘是空闲的可以做BDM分区。
      1
      lsblk
      

      如上图所示nvme0n1p13和nvme1n1p13可以使用,可以看到nvme0n1p13和nvme1n1p13的容量大小都是2.7TB,8中关于创建池的大小设置可以根据实际情况分配。

    2. 修改“/opt/gcache/conf/bdm.conf”文件。

      bdm.conf配置文件中默认使用“/path/to/your/disk”作为BDM控制的设备,需要根据实际情况进行修改。通常情况下Ceph的WAL与DB分区会使用一部分NVMe空间,在这种情况下需要手动创建BDM的NVMe分区。

      参见部署OSD节点“partition.sh”脚本最后两行创建/dev/nvme0n1p13与/dev/nvme1n1p13给BDM使用,则修改bdm.conf配置文件为:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      #metapool:id:<pool_id>:segmentSize:<size>:name:<name>
      #datapool:id:<pool_id>:segmentSize:<size>:name:<name>
      metapool:id:0:segmentSize:4096:name:metapool
      metapool:id:1:segmentSize:262144:name:headpool
      datapool:id:2:segmentSize:4194304:name:datapool
      
      #device:id:<disk_id>:size:<size>:status:<status>:name:<name>
      device:id:0:vid:0:sn:0:size:0:status:0:name:/dev/nvme0n1p13
      device:id:1:vid:1:sn:0:size:0:status:0:name:/dev/nvme1n1p13
      

      以上最后两行加粗的盘符即使用的NVMe盘。

      当前版本CCM支持以下三种分区规格,否则会导致启动失败。

      • 2个vDisk,每个vDisk下分别有1个分区,共2个分区。
      • 4个vDisk,每个vDisk下分别有2个分区,共8个分区。
      • 4个vDisk,每个vDisk下分别有3个分区,共12个分区。

      样例为第一种规格,2个vDisk需要配置vid分别为0和1,每个vDisk下分别有1个分区,共2个分区。当前版本需要保证8的WCachePool 180 G空间和IndexPool 700G空间,RCachePool使用剩余空间。

  6. 修改使用的NVMe分区的权限,以/dev/nvme0n1p13/dev/nvme1n1p13为例。

    1
    2
    chown globalcache:globalcache /dev/nvme0n1p13
    chown globalcache:globalcache /dev/nvme1n1p13
    

  7. 为开机执行脚本添加执行权限。

    1. “rc.local”文件添加700权限。
      1
      chmod 700 /etc/rc.d/rc.local
      
    2. 打开“rc.local”文件。
      1
      vim /etc/rc.d/rc.local
      
    3. “i”键进入编辑模式,添加以下内容。
      1
      2
      chown globalcache:globalcache /dev/nvme0n1p13
      chown globalcache:globalcache /dev/nvme1n1p13
      
    4. “Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。

  8. 格式化BDM, 并创建WcachePool、RcachePool、IndexPool、StreamPool。

    BDM格式化前,需要确保“gcache.conf”配置正确,否则会初始化失败,失败原因可以查看“/var/log/messages”

    • 推荐配置1(3.2TB NVMe盘*2):
      1
      2
      3
      4
      5
      sudo -u globalcacheop LD_LIBRARY_PATH=/opt/gcache/lib /opt/gcache/bin/bdm_format /opt/gcache/conf/bdm.conf --force
      sudo -u globalcacheop LD_LIBRARY_PATH=/opt/gcache/lib /opt/gcache/bin/bdm_createCapPool 4194304 180G WCachePool
      sudo -u globalcacheop LD_LIBRARY_PATH=/opt/gcache/lib /opt/gcache/bin/bdm_createCapPool 67108864 3500G RCachePool
      sudo -u globalcacheop LD_LIBRARY_PATH=/opt/gcache/lib /opt/gcache/bin/bdm_createCapPool 67108864 700G IndexPool
      sudo -u globalcacheop LD_LIBRARY_PATH=/opt/gcache/lib /opt/gcache/bin/bdm_createCapPool 4194304 20G StreamPool
      
    • 推荐配置2(7.68TB NVMe盘*2):
      1
      2
      3
      4
      5
      sudo -u globalcacheop LD_LIBRARY_PATH=/opt/gcache/lib /opt/gcache/bin/bdm_format /opt/gcache/conf/bdm.conf --force
      sudo -u globalcacheop LD_LIBRARY_PATH=/opt/gcache/lib /opt/gcache/bin/bdm_createCapPool 4194304 180G WCachePool
      sudo -u globalcacheop LD_LIBRARY_PATH=/opt/gcache/lib /opt/gcache/bin/bdm_createCapPool 67108864 7000G RCachePool
      sudo -u globalcacheop LD_LIBRARY_PATH=/opt/gcache/lib /opt/gcache/bin/bdm_createCapPool 67108864 700G IndexPool
      sudo -u globalcacheop LD_LIBRARY_PATH=/opt/gcache/lib /opt/gcache/bin/bdm_createCapPool 4194304 20G StreamPool
      

  9. 查看Pool信息。

    1
    sudo -u globalcacheop LD_LIBRARY_PATH=/opt/gcache/lib /opt/gcache/bin/bdm_df
    

    Pool ID为3、4、5、6的Pool创建成功,并且Pool ID和4的创建顺序正确对应。

  10. 配置进程可拥有的VMA(Virtual Memory Area)数量。

    1. 创建“sysctl.conf”文件。
      1
      vim /etc/sysctl.con
      
    2. “i”键进入编辑模式,添加以下内容。
      1
      2
      3
      4
      5
      6
      7
      # sysctl settings are defined through files in
      # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
      ## Vendors settings live in /usr/lib/sysctl.d/.
      # To override a whole file, create a new file with the same in
      # /etc/sysctl.d/ and put new settings there. To override# only specific settings, add a file with a lexically later
      # name in /etc/sysctl.d/ and put new settings there.## For more information, see sysctl.conf(5) and sysctl.d(5).
      vm.max_map_count = 1000000
      
    3. “Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。
    4. 使修改内容生效。
      1
      sysctl -p
      

集群启动后,不可使用“/opt/apache-zookeeper-3.6.3-bin-bcm/bin”“/opt/apache-zookeeper-3.6.3-bin/bin”目录下的“zkCli.sh”对ZooKeeper集群的信息做出修改,否则会导致严重问题。

创建运维用户

为安全起见,建议创建运维用户,并禁止root用户的远程登录。

  1. 解除操作系统对普通用户使用su命令的限制。

    1. 打开“su”文件。
      1
      vim /etc/pam.d/su
      
    2. “i”键进入编辑模式,使用“#”注释掉下图红框中代码。

    3. “Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。

  2. 禁止root用户的远程登录。

    1. 打开“sshd_config”文件。
      1
      vim /etc/ssh/sshd_config
      
    2. “i”键进入编辑模式,如下图所示,修改“PermitRootLogin”“no”

    3. “Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。
    4. 重启sshd服务,使配置生效。
      1
      systemctl restart sshd.service
      

  3. 修改运维用户口令期限。

    1. 设置口令有效期为90天。
      1
      passwd -x 90 globalcacheop
      

    2. 设置口令到期前7天提醒。
      1
      passwd -w 7 globalcacheop
      

    3. 设置口令过期后35天内允许用户修改。
      1
      passwd -i 35 globalcacheop