当前位置 : 主页 > 操作系统 > centos >

Redis集群

来源:互联网 收集:自由互联 发布时间:2022-06-20
生产环境配置 2C8G三台,三主三从,一台二实例注意事项:一台2实例部署,主从节点要交叉,避免主从节点同时宕机影响业务 部署步骤 下载软件包wget http://download.redis.io/releases/redis-5

生产环境配置

2C8G三台,三主三从,一台二实例 注意事项:一台2实例部署,主从节点要交叉,避免主从节点同时宕机影响业务

部署步骤

  • 下载软件包 wget http://download.redis.io/releases/redis-5.0.5.tar.gz
  • 安装依赖 yum -y install gcc gcc-c++
  • 解压tar.gz包 tar xf redis-5.0.5.tar.gz -C /usr/local/
  • 编译 cd /usr/local/redis-5.0.5/ make && make install cp ./src/redis-server /usr/bin/ && cp ./src/redis-cli /usr/bin/
  • Redis优化 echo 511 > /proc/sys/net/core/somaxconn echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf && echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf echo never > /sys/kernel/mm/transparent_hugepage/enabled #开机启动 echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.d/rc.local
  • 创建目录及配置文件 mkdir /usr/local/redis-cluster/{7000,7001}/data -pv cp redis.conf /usr/local/redis-cluster/7000/ [root@redis-cs-node01 redis-cluster]# grep "^[a-Z]" 7000/redis.conf bind 0.0.0.0 protected-mode yes port 7000 tcp-backlog 511 timeout 0 tcp-keepalive 30 daemonize yes supervised no pidfile /var/run/redis_7000.pid loglevel notice logfile "/usr/local/redis-cluster/7000/redis.log" databases 16 always-show-logo yes save "" stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /usr/local/redis-cluster/7000/data replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 maxclients 10000 maxmemory 3g maxmemory-policy allkeys-lru lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 cluster-require-full-coverage no slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes #修改配置信息 cp 7000/redis.conf 7001/ sed -i 's/7000/7001/g' 7001/redis.conf #同理另外两台节点同理 mkdir /usr/local/redis-cluster/{7002,7003}/data -pv sed -i 's/7000/7001/g' 7002/redis.conf sed -i 's/7000/7001/g' 7003/redis.conf mkdir /usr/local/redis-cluster/{7004,7005}/data -pv sed -i 's/7000/7004/g' 7004/redis.conf sed -i 's/7000/7005/g' 7005/redis.conf
  • 创建启动脚本及开启启动 #第一个节点 [root@redis-cs-node01 redis-cluster]# cat start_redis_cluster.sh #!/bin/bash cd /usr/local/redis-cluster cd 7000 && /usr/bin/redis-server /usr/local/redis-cluster/7000/redis.conf cd ../7001 &&/usr/bin/redis-server /usr/local/redis-cluster/7001/redis.conf #第二个节点 [root@redis-cs-node02 redis-cluster]# cat start_redis_cluster.sh #!/bin/bash cd /usr/local/redis-cluster cd 7002 && /usr/bin/redis-server /usr/local/redis-cluster/7002/redis.conf cd ../7003 &&/usr/bin/redis-server /usr/local/redis-cluster/7003/redis.conf #第三个节点 [root@redis-cs-node03 redis-cluster]# cat start_redis_cluster.sh #!/bin/bash cd /usr/local/redis-cluster cd 7004 && /usr/bin/redis-server /usr/local/redis-cluster/7004/redis.conf cd ../7005 &&/usr/bin/redis-server /usr/local/redis-cluster/7005/redis.conf #启动节点 [root@redis-cs-node01 redis-cluster]# sh start_redis_cluster.sh [root@redis-cs-node02 redis-cluster]# sh start_redis_cluster.sh [root@redis-cs-node03 redis-cluster]# sh start_redis_cluster.sh #配置开机启动 [root@redis-cs-node01 redis-cluster]# cat /etc/rc.d/rc.local #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. touch /var/lock/subsys/local echo never > /sys/kernel/mm/transparent_hugepage/enabled /usr/bin/sh /usr/local/redis-cluster/start_redis_cluster.sh /usr/bin/sh /usr/local/redis-cluster/start_exporter.sh
  • 创建集群 redis-cli --cluster create 172.16.83.248:7000 172.16.83.248:7001 172.16.83.249:7002 172.16.83.249:7003 172.16.83.250:7004 172.16.83.250:7005 --cluster-replicas 1
  • 查看集群状态 [root@redis-cs-node01 ~]# redis-cli -c -p 7000 cluster nodes 18a0169a22e7b440213728b1fb45ae5d59bf8eef 172.16.83.249:7002@17002 master - 0 1601184964498 41 connected 6251-10922 83280280d19223180eabffb1a88ff078efdc748d 172.16.83.249:7003@17003 slave 27c6bff6b4b20d5620a81879324cf61a8e2439a1 0 1601184965000 39 connected 3933efb9b77e474ab036d7741bc4517746483496 172.16.83.248:7001@17001 slave 16ab783181c05ed6c0e3db933be6a1f56efd3317 0 1601184964097 42 connected 16ab783181c05ed6c0e3db933be6a1f56efd3317 172.16.83.250:7004@17004 master - 0 1601184965501 42 connected 88-332 5461-5794 10923-11255 11711-16383 30469e7f2ce74d6e0ff224463468909aa268c6cf 172.16.83.250:7005@17005 slave 18a0169a22e7b440213728b1fb45ae5d59bf8eef 0 1601184965501 41 connected 27c6bff6b4b20d5620a81879324cf61a8e2439a1 172.16.83.248:7000@17000 myself,master - 0 1601184965000 39 connected 0-87 333-5460 5795-6250 11256-11710 [root@redis-cs-node01 redis-cluster]# redis-cli --cluster check 127.0.0.1:7001 172.16.83.249:7002 (18a0169a...) -> 10 keys | 4672 slots | 1 slaves. 172.16.83.250:7004 (16ab7831...) -> 9 keys | 5585 slots | 1 slaves. 172.16.83.248:7000 (27c6bff6...) -> 5 keys | 6127 slots | 1 slaves. [OK] 24 keys in 3 masters. 0.00 keys per slot on average. >>> Performing Cluster Check (using node 127.0.0.1:7001) S: 3933efb9b77e474ab036d7741bc4517746483496 127.0.0.1:7001 slots: (0 slots) slave replicates 16ab783181c05ed6c0e3db933be6a1f56efd3317 M: 18a0169a22e7b440213728b1fb45ae5d59bf8eef 172.16.83.249:7002 slots:[6251-10922] (4672 slots) master 1 additional replica(s) S: 30469e7f2ce74d6e0ff224463468909aa268c6cf 172.16.83.250:7005 slots: (0 slots) slave replicates 18a0169a22e7b440213728b1fb45ae5d59bf8eef S: 83280280d19223180eabffb1a88ff078efdc748d 172.16.83.249:7003 slots: (0 slots) slave replicates 27c6bff6b4b20d5620a81879324cf61a8e2439a1 M: 16ab783181c05ed6c0e3db933be6a1f56efd3317 172.16.83.250:7004 slots:[88-332],[5461-5794],[10923-11255],[11711-16383] (5585 slots) master 1 additional replica(s) M: 27c6bff6b4b20d5620a81879324cf61a8e2439a1 172.16.83.248:7000 slots:[0-87],[333-5460],[5795-6250],[11256-11710] (6127 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
  • 扩容节点内存步骤

    说明:线上Redis节点内存接近限制3g,进行无感知进行升级内存。

  • 查看主从节点分配;
  • 确认主从不在同一节点;
  • 逐台操作从节点,进行扩容服务器配置;
  • 动态升级内存限制; config set maxmemory 6g
  • 再进行从升级主操作 在slave的Redis执行 CLUSTER FAILOVER slave会接管主, master会转化为salve

    说明:故障转移的主服务器的客户端都已停止。同时,主服务器将其复制偏移发送到从服务器,从服务器等待到达其一侧的偏移。达到复制偏移量后,故障转移将开始,并且将向旧的主服务器通知配置切换。当客户端在旧的主服务器上解除阻止时,它们将被重定向到新的主服务器;

  • 此时从变为主再进行升级主变为从节点服务器,升级配置;
  • 再动态升级内存限; config set maxmemory 6g
  • 此时升级配置扩容内存已完成,注意检查主从分配信息,确保主从不在同一点,保证服务的高可用。
  • prometheus监控Redis

  • 客户端脚本 [root@redis-cs-node01 redis-cluster]# cat start_exporter.sh #!/bin/bash cd /usr/local/redis-cluster ports=`netstat -anltp|grep LISTEN|grep -v 1700|egrep "(700|6379)"|awk '{print $4}'|cut -d ":" -f 2` echo "find ports: $ports" for p in $ports do ip=`ip addr |grep 172|grep inet|awk '{print $2}'|awk -F "/" '{print $1}'` echo "start exporter 127.0.0.1:${p} with ${ip}:5${p}" nohup ./redis_exporter -web.listen-address ":5${p}" -redis.addr 127.0.0.1:${p} & done
  • prometheus服务端配置 [root@k8s-master test]# cat redis-test-yc.yaml --- apiVersion: v1 kind: Service metadata: labels: node: redis-exporter name: redis-test-yc namespace: monitoring spec: ports: - name: metrics port: 8080 sessionAffinity: None type: ClusterIP status: loadBalancer: {} --- apiVersion: v1 kind: Endpoints metadata: name: redis-test-yc namespace: monitoring subsets: - addresses: - ip: 172.16.83.248 ports: - name: metrics port: 57000 protocol: TCP - addresses: - ip: 172.16.83.248 ports: - name: metrics port: 57001 protocol: TCP - addresses: - ip: 172.16.83.249 ports: - name: metrics port: 57002 protocol: TCP - addresses: - ip: 172.16.83.249 ports: - name: metrics port: 57003 protocol: TCP - addresses: - ip: 172.16.83.250 ports: - name: metrics port: 57004 protocol: TCP - addresses: - ip: 172.16.83.250 ports: - name: metrics port: 57005 protocol: TCP
  • 查看prometheus后台监控项
  • 【文章原创作者:阿里云代理 http://www.558idc.com/aliyun.html 复制请保留原URL】
    网友评论