Redis é群
Redis æ¯ Remote Dictionary Service è¿ç¨åå ¸æå¡ï¼å®å¨è¿å¹´æ¥é£é¡ä¸æ¶ï¼ä¸ä» éäºä¼ ç»ç memcached ä¹ç±»çç¼åï¼è¿éè¿å ¶ä¸°å¯çæ°æ®ç»ææ¯æè®¸å¤å ¶ä»çåºç¨ï¼æ¯å¦å°éæ°æ®åå¨ï¼åå¸å¼éï¼ç®åç pub/sub æå¡ççã
å½ç¶åå° Redis è¯å®ä¸æ»¡è¶³é«å¯ç¨æ§çè¦æ±ï¼Redis ç HA æ¹æ¡ä¸»è¦æä¸¤ç§
Redis Sentinel çæ©å±æ§ä¸å¥½ï¼æä»¥ä»ç¥ï¼ä¸»è¦ä»¥ Redis Cluster 为ä¾ï¼å®å°ææçæ°æ®åå为 16384 ä¸ªæ§½ä½ slot, æ¯ä¸ªèç¹è´è´£ä¸é¨å, å¦ä¸å¾ï¼æ¯å¯¹redis èç¹åé ä¸åä¹ä¸çæ§½ä½ã
å½ç¶å®¢æ·ç«¯è¿æ¥æ¶éè¦è·åæ§½ä½çé ç½®ä¿¡æ¯æç¥éå°åªä¸ªèç¹ä¸å»ååæ°æ®ï¼è¿ä¸ªé 置信æ¯ç±äºèç¹å¯è½å¢åæè å´©æºï¼æä»¥ä¹ä¸ä¸å®åï¼å¨è®¿é®å°ä¸å¹é çèç¹æ¶ ï¼Redis ä¼è¿å MOVED ååºè®©å®¢æ·ç«¯å»å ¶ä»èç¹
æå»º Redis é群
Redis 5.0 èªèº«å°±æä¾äºæå»º redis çå½ä»¤ï¼æç¨ Fabric ç®ååä¸ä¸ªèæ¬ï¼å°è£ äºç¹ççå½ä»¤ï¼ç¨æ¥å¿«éæå»º Redis Cluster
为ç®åèµ·è§ï¼æå¨ä¸å° Ubuntu Server ä¸çæ 6个 Redis å®ä¾æ¥æ¨¡æ6 å° Redis æå¡å¨èç¹
fab generate_config
å¯å¨ 6个redis å®ä¾
fab start_redis
å建å
å«è¿6个redis å®ä¾ç Redis é群
fab create_redis_cluster
åå¤å·¥ä½:
æ¾ä¸å° ubuntu server
å° Redis å®ç½ä¸ä¸è½½ redis å
å®è£
python3 å fabric3 (pip install fabric3)
ï¼æå
³ Fabric çä»ç»ï¼è¯·åè§æ§æ ç¨åºåç士ååä¹ Fabricï¼
è¿ä¸ª fabfile.py èæ¬çæºä»£ç å¦ä¸
from fabric.api import *
from fabric.api import settings
from fabric.context_managers import *
from fabric.contrib.console import confirm
import os, subprocess
redis_path = '/home/walter/package/redis-5.0.8/src'
redis_config = '''daemonize yes
bind 0.0.0.0
port 9001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
@task
def clean_config():
for port in range(9001,9007):
local("rm -rf {}".format(port))
@task
def write_config(file_path, port):
config_content = redis_config.replace('9001', str(port))
with open(file_path, "w") as fp:
fp.write(config_content)
@task
def generate_config():
for port in range(9001,9007):
local("mkdir -p {}".format(port))
config_file = '{}/redis.conf'.format(port)
print("write {}".format(config_file))
write_config(config_file, port)
@task
def start_redis():
for folder in range(9001,9007):
with lcd(str(folder)):
local("{}/redis-server ./redis.conf".format(redis_path))
@task
def stop_redis():
cmd = redis_path + "/redis-cli -p {} shutdown nosave"
for port in range(9001,9007):
local(cmd.format(port))
@task
def kill_redis():
cmd = "ps -efw --width 1024|grep redis-server |grep -v grep|awk '{print $2}"
pids = subprocess.check_output(cmd, shell=True)
print(pids)
with settings(warn_only=True):
for pid in pids.decode("utf-8").split('\n'):
local("kill -9 {}".format(pid))
@task
def check_ports_mac():
with settings(warn_only=True):
for port in range(9001,9007):
local("lsof -nP -iTCP:{} | grep LISTEN".format(port))
@task
def check_redis():
cmd = "ps -ef|grep redis-server |grep -v grep"
with settings(warn_only=True):
local(cmd)
@task
def create_redis_cluster():
cmd = redis_path + "/redis-cli --cluster create {} {}"
host_and_ports = ""
for port in range(9001,9007):
host_and_ports = host_and_ports + "0.0.0.0:{} ".format(port)
option = "--cluster-replicas 1"
local(cmd.format(host_and_ports, option))
@task
def redis_cli(command=''):
if command:
local(redis_path + "/redis-cli -c -p 9001 %s" % command)
else:
local(redis_path + "/redis-cli -p 9001")
注æå°ä»¥ä¸èæ¬ä¸ç redis_path æ¹ä¸ºèªå·±ç redis æºä»£ç è·¯å¾
redis 代ç ä¸è½½åç´æ¥æ§è¡ make å°±å¯ä»¥ç¼è¯çæå¯æ§è¡æä»¶
å°ä»¥ä¸ç fabfile æ¾å¨ä¸ä¸ªä»»ä¸ä¸ªç®å½ä¸ï¼æ§è¡
fab generate_config
fab start_redis
fab create_redis_cluster
å³å¯çæ Redis é群
$ ps -ef|grep redis|grep -v grep
root 19702 1 0 Jun06 ? 00:12:42 /home/walter/package/redis-5.0.8/src/redis-server 0.0.0.0:9001 [cluster]
root 19708 1 0 Jun06 ? 00:12:38 /home/walter/package/redis-5.0.8/src/redis-server 0.0.0.0:9002 [cluster]
root 19714 1 0 Jun06 ? 00:12:41 /home/walter/package/redis-5.0.8/src/redis-server 0.0.0.0:9003 [cluster]
root 19720 1 0 Jun06 ? 00:14:27 /home/walter/package/redis-5.0.8/src/redis-server 0.0.0.0:9004 [cluster]
root 19726 1 0 Jun06 ? 00:14:20 /home/walter/package/redis-5.0.8/src/redis-server 0.0.0.0:9005 [cluster]
root 19732 1 0 Jun06 ? 00:14:25 /home/walter/package/redis-5.0.8/src/redis-server 0.0.0.0:9006 [cluster]
root@node5:~#
éè¿Redis çå½ä»¤è¡ redis-cli å¯ä»¥å¯çé群å
é¨çä¿¡æ¯ï¼
å¯çé群ä¸çèç¹ä¿¡æ¯
fab redis_cli:"cluster nodes"
[localhost] local: /home/walter/package/redis-5.0.8/src/redis-cli -c -p 9001 cluster nodes
be6213517632bdc1dc21ecdc6db99718ad996227 127.0.0.1:9006@19006 slave 5999be7b420c0b5efadb3adaca8d1fc96b6a2494 0 1592020538000 6 connected
907f0344f54a5df28ef1cf548da32e64cfab8d16 127.0.0.1:9001@19001 myself,master - 0 1592020538000 1 connected 0-5460
50f321d0f3007da039f9350930b176f2b22ec1e0 127.0.0.1:9004@19004 slave 5f4f1fe7432dff359ea5b05f8997432ae726f7bd 0 1592020537000 4 connected
ba918ea80644efca8405b8480c2ccb941ed831b0 127.0.0.1:9005@19005 slave 907f0344f54a5df28ef1cf548da32e64cfab8d16 0 1592020537378 5 connected
5999be7b420c0b5efadb3adaca8d1fc96b6a2494 127.0.0.1:9002@19002 master - 0 1592020537578 2 connected 5461-10922
5f4f1fe7432dff359ea5b05f8997432ae726f7bd 127.0.0.1:9003@19003 master - 0 1592020538380 3 connected 10923-16383
å¯çæ´ä¸ªé群çç¶æ
fab redis_cli:"cluster info"
[localhost] local: /home/walter/package/redis-5.0.8/src/redis-cli -c -p 9001 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1053876
cluster_stats_messages_pong_sent:1054292
cluster_stats_messages_sent:2108168
cluster_stats_messages_ping_received:1054292
cluster_stats_messages_pong_received:1053871
cluster_stats_messages_received:2108163
å¯çé群ä¸ç slots
fab redis_cli:"cluster slots"
[localhost] local: /home/walter/package/redis-5.0.8/src/redis-cli -c -p 9001 cluster slots
1) 1) (integer) 0
2) (integer) 5460
3) 1) "127.0.0.1"
2) (integer) 9001
3) "907f0344f54a5df28ef1cf548da32e64cfab8d16"
4) 1) "127.0.0.1"
2) (integer) 9005
3) "ba918ea80644efca8405b8480c2ccb941ed831b0"
2) 1) (integer) 5461
2) (integer) 10922
3) 1) "127.0.0.1"
2) (integer) 9002
3) "5999be7b420c0b5efadb3adaca8d1fc96b6a2494"
4) 1) "127.0.0.1"
2) (integer) 9006
3) "be6213517632bdc1dc21ecdc6db99718ad996227"
3) 1) (integer) 10923
2) (integer) 16383
3) 1) "127.0.0.1"
2) (integer) 9003
3) "5f4f1fe7432dff359ea5b05f8997432ae726f7bd"
4) 1) "127.0.0.1"
2) (integer) 9004
3) "50f321d0f3007da039f9350930b176f2b22ec1e0"
妿æä»¬æ³ç¥éæä¸ª key å±äºåªä¸ä¸ª slot ï¼ä¹å¯ä»¥ç¨å½ä»¤ cluster KEYSLOT $key æ¥æ¥è¯¢ï¼ä¾å¦ âhelloâ éè¿å¦ä¸å½ä»¤å¯ä»¥æ¥åºå®å±äº slot 866, åºè¯¥è½å¨ â 127.0.0.1:9001â è¿ä¸ªå®ä¾ä¸ã
fab redis_cli:"cluster KEYSLOT hello"
[localhost] local: /home/walter/package/redis-5.0.8/src/redis-cli -c -p 9001 cluster KEYSLOT hello
(integer) 866
è®¿é® Redis é群
Redis ç RESP åè®®é常ç®åæäºï¼å ä¹åç§è¯è¨é½æç¸åºçåºå¯ä»¥è®¿é® Redis
以 Python 为ä¾, å建å¦ä¸ä¸¤ä¸ªæä»¶
requirements.txt
loguru
redis
hiredis
redis-py-cluster
redis-test.py
import sys
from rediscluster import RedisCluster
import redis
from redis.client import Redis
from loguru import logger
logger.add(sys.stderr,
format="{time} {message}",
filter="client",
level="INFO")
logger.add('logs/redis_client_{time:YYYY-MM-DD}.log',
format="{time} {level} {message}",
filter="client",
level="ERROR")
class RedisClient:
def __init__(self, connection_string, password=None):
self.startup_nodes = []
nodes = connection_string.split(',')
for node in nodes:
host_port = node.split(':')
self.startup_nodes.append({'host': host_port[0], 'port': host_port[1]})
self.password = password
logger.info(self.startup_nodes)
self.redis_pool = None
self.redis_instance = None
self.redis_cluster = None
def connect(self):
if(len(self.startup_nodes) < 2):
host = self.startup_nodes[0].get('host')
port = self.startup_nodes[0].get('port')
if self.password:
self.redis_pool = redis.ConnectionPool(host=host, port=port, db=0)
else:
self.redis_pool = redis.ConnectionPool(host=host, port=port, password = self.password, db=0)
self.redis_instance = Redis(connection_pool=self.redis_pool, decode_responses=True)
return self.redis_instance
#, skip_full_coverage_check=True
self.redis_cluster = RedisCluster(startup_nodes=self.startup_nodes, password=self.password)
return self.redis_cluster
def quick_test():
client = RedisClient("10.224.112.73:9001")
conn = client.connect()
key = "hello"
value = "world"
conn.set(key, value)
conn.expire(key, 300)
ret = conn.get(key)
logger.info("value={}", ret)
conn.hsetnx("walter", "age", 30)
conn.hsetnx("walter", "gender", 'male')
conn.expire(key, 300)
values = conn.hgetall("walter")
for key, value in values.items():
logger.info("{}={}".format(key, value))
if __name__ == "__main__":
quick_test()
pip install -r requirements.txt
python redis-test.py
è¾åºç»æå¦ä¸
2020-06-13 13:05:52.071 | INFO | __main__:__init__:27 - [{'host': '10.224.112.73', 'port': '9001'}]
2020-06-13 13:05:52.229 | INFO | __main__:test_cluster:110 - value=b'world'
2020-06-13 13:05:52.354 | INFO | __main__:test_cluster:118 - b'age'=b'30'
2020-06-13 13:05:52.354 | INFO | __main__:test_cluster:118 - b'gender'=b'male'
redis çå½ä»¤è¡å·¥å
·å¯ä»¥è·å Redis çåç§åº¦éä¿¡æ¯ï¼é¤äºä¸é¢æå°ç cluster ç¸å
³å½ä»¤ï¼è¿æå¾å¤ï¼æ¯å¦æå¸¸ç¨ç info å½ä»¤å¯ä»¥è·åå¦ä¸9大åçä¿¡æ¯
Server
Clients
Memory
Persistennce
Stats
Replication
Cluster
Keyspace
fab redis_cli:info
[localhost] local: /home/walter/package/redis-5.0.8/src/redis-cli -c -p 9001 info
#-------------------------------
# Server æå¡å¨ä¿¡æ¯
#-------------------------------
redis_version:5.0.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:391103cbae5277b6
redis_mode:cluster
os:Linux 4.4.0-135-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:5.4.0
process_id:19702
run_id:0c3d2c132eefbf68a23dab136cdc79999b6c8ca3
tcp_port:9001
uptime_in_seconds:1444
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:14386466
executable:/home/walter/package/redis-5.0.8/src/redis-server
config_file:/home/walter/mdd/oss/redis/9001/./redis.conf
#-------------------------------
# Clients 客æ·ç«¯ä¿¡æ¯
#-------------------------------
connected_clients:1
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
#-------------------------------
# Memory å
åä¿¡æ¯
#-------------------------------
used_memory:2652664
used_memory_human:2.53M
used_memory_rss:5267456
used_memory_rss_human:5.02M
used_memory_peak:2693616
used_memory_peak_human:2.57M
used_memory_peak_perc:98.48%
used_memory_overhead:2578384
used_memory_startup:1463192
used_memory_dataset:74280
used_memory_dataset_perc:6.24%
allocator_allocated:2638792
allocator_active:2822144
allocator_resident:5382144
total_system_memory:8370958336
total_system_memory_human:7.80G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.07
allocator_frag_bytes:183352
allocator_rss_ratio:1.91
allocator_rss_bytes:2560000
rss_overhead_ratio:0.98
rss_overhead_bytes:-114688
mem_fragmentation_ratio:2.03
mem_fragmentation_bytes:2677952
mem_not_counted_for_evict:0
mem_replication_backlog:1048576
mem_clients_slaves:16922
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
#----------------------------------
# Persistence æä¹
åä¿¡æ¯
#----------------------------------
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1591443327
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:274432
aof_enabled:1
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
aof_current_size:0
aof_base_size:0
aof_pending_rewrite:0
aof_buffer_length:0
aof_rewrite_buffer_length:0
aof_pending_bio_fsync:0
aof_delayed_fsync:0
#----------------------------------
# Stats ç»è®¡ä¿¡æ¯
#----------------------------------
total_connections_received:4
total_commands_processed:1448
instantaneous_ops_per_sec:0
total_net_input_bytes:52741
total_net_output_bytes:14030
instantaneous_input_kbps:0.02
instantaneous_output_kbps:0.01
rejected_connections:0
sync_full:1
sync_partial_ok:0
sync_partial_err:1
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:178
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
#----------------------------------
# Replication å¤å¶ä¿¡æ¯
#----------------------------------
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=9005,state=online,offset=2016,lag=1
master_replid:d633853458a2973c12ab79442bc807d35e387f5d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2016
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2016
#----------------------------------
# CPU ä¸å¤®å¤çå¨ä¿¡æ¯
#----------------------------------
used_cpu_sys:0.912000
used_cpu_user:0.844000
used_cpu_sys_children:0.000000
used_cpu_user_children:0.000000
#----------------------------------
# Cluster é群信æ¯
#----------------------------------
cluster_enabled:1
使®éç¨æ·ä¸å¯è½ç»å¸¸ç»å½æå¡å¨æ§è¡ï¼éè¿æå¡å¨ç«¯ç agent æ¥å®æ¶éæ ·åæ¶é redis æå¨æå¡å¨åå
¶ redis èªèº«çåº¦éæ°æ®æ¯å®é
ä¸ç常ç¨åæ³ã
ææ¾ç»ç¨è¿ä¸¤ç§æ¹æ¡ï¼
MetricBeat --> ElasticSearch -> Kibana
Telegraf --> Influxdb --> Grafana
è¿æå
¶ä»åºäº Collectd, Prometheus çæ¹æ¡ï¼æä¸ä¸è¡¨.
å¨å®è·µä¸ï¼ä¸ºäºé²æ¢åéç«¯åæ¥æ¶ç«¯çååéä¸å¹é
çé®é¢ï¼å¸¸ç¨ Kafka æ¥ä¸è½¬ï¼è¿éå
ä»ç» Telegraf --> Influxdb --> Grafana è¿ç§æ¹æ¡ã
Telegraf
å®è£
åç
§ https://docs.influxdata.com/telegraf/v1.14/introduction/downloading/
以 Ubuntu16 ç³»ç»ä¸ºä¾ï¼
wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -
source /etc/lsb-release
echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt-get update
sudo apt-get install telegraf
sudo systemctl start telegraf
å¯å¨ä¹å伿以ä¸é»è®¤çé
ç½®
2020-06-13T10:28:56Z I! Starting Telegraf 1.14.4
2020-06-13T10:28:56Z I! Using config file: /etc/telegraf/telegraf.conf
2020-06-13T10:28:56Z I! Loaded inputs: diskio kernel mem processes swap system cpu disk
2020-06-13T10:28:56Z I! Loaded aggregators:
2020-06-13T10:28:56Z I! Loaded processors:
2020-06-13T10:28:56Z I! Loaded outputs: influxdb
é
ç½®æä»¶ä½äº /etc/telegraf/telegraf.conf, é
置项é常å¤ï¼ä¸è¿ä¸»è¦çä¹å°±å æ¡
- input åº¦éæ°æ®ä»åªéæ¥
- output åº¦éæ°æ®å°åªéå»
- aggregators èåå¨
- processors å¤çå¨
InfluxDB
æå
³ InfluxDb çä»ç»è¯·åè§æ§æåº¦é驱å¨å¼åä¹ InfluxDB
å
å¿«éå®è£
å®
sudo apt-get install influxdb
sudo systemctl unmask influxdb.service
sudo systemctl start influxdb
ç¨ influx å½ä»¤å¯çä¸ä¸ telegraf é»è®¤å建ç度é表
influx
Connected to http://localhost:8086 version 1.8.0
InfluxDB shell version: 1.8.0
> show databases
name: databases
telegraf
_internal
> use telegraf
Using database telegraf
> show measurements
name: measurements
diskio
kernel
processes
system
å 为æä»¬è¦çæ§æ¯ç Redis cluster, æä»¥æä»¬éè¦æ´æ¹ telegraf çé
ç½®, éè¿å®ç Redis çæ§æä»¶æ¥è·å Redis çåº¦éæ°æ®
åè§ https://github.com/influxdata/telegraf/blob/release-1.14/plugins/inputs/redis/README.md
The Redis input plugin gathers the results of the INFO Redis command. There are two separate measurements: redis and redis_keyspace, the latter is used for gathering database-related statistics.
Additionally the plugin also calculates the hit/miss ratio (keyspace_hitrate) and the elapsed time since the last RDB save (rdb_last_save_time_elapsed).
å¯ä»¥ç´æ¥ä¿®æ¹ vi /etc/telegraf/telegraf.conf æè
ç´æ¥çæä¸ä¸ªæ°çé
ç½®æä»¶
telegraf --input-filter redis:cpu:mem:net:swap --output-filter influxdb config > telegraf.conf
ä¸»è¦æ¯å¢å äºè¿ä¸¤è¡
[[inputs.redis]]
servers = ["tcp://127.0.0.1:9001"]
éæ°å¯å¨ telegraf
sudo systemctl stop influxdb
sudo systemctl start influxdb
è¿æ ·æä»¬åè¿è¡ influx å½ä»¤è¡å¯ä»¥çå°åºç°äº4 å¼ æ°è¡¨
redis
redis_cmdstat
redis_keyspace
redis_replication
influx -database='telegraf' -execute='show measurements'
name: measurements
diskio
kernel
processes
redis
redis_cmdstat
redis_keyspace
redis_replication
system
çç redis measurement çç»æï¼æä»¬ä¹åå¨ redis-cli info çè¾åºçå°çå¨ influxdb ç redis measurement é½è½çå°
influx -database='telegraf' -execute='SHOW TAG KEYS FROM "redis"'
name: redis
tagKey
------
replication_role
server
root@node5:~# influx -database='telegraf' -execute='SHOW FIELD KEYS FROM "redis"'
name: redis
fieldKey fieldType
-------- ---------
active_defrag_hits integer
active_defrag_key_hits integer
active_defrag_key_misses integer
active_defrag_misses integer
active_defrag_running integer
allocator_active integer
allocator_allocated integer
allocator_frag_bytes integer
allocator_frag_ratio float
allocator_resident integer
allocator_rss_bytes integer
allocator_rss_ratio float
aof_base_size integer
aof_buffer_length integer
aof_current_rewrite_time_sec integer
aof_current_size integer
aof_delayed_fsync integer
aof_enabled integer
aof_last_bgrewrite_status string
aof_last_cow_size integer
aof_last_rewrite_time_sec integer
aof_last_write_status string
aof_pending_bio_fsync integer
aof_pending_rewrite integer
aof_rewrite_buffer_length integer
aof_rewrite_in_progress integer
aof_rewrite_scheduled integer
blocked_clients integer
client_recent_max_input_buffer integer
client_recent_max_output_buffer integer
clients integer
cluster_enabled integer
connected_slaves integer
evicted_keys integer
expired_keys integer
expired_stale_perc float
expired_time_cap_reached_count integer
instantaneous_input_kbps float
instantaneous_ops_per_sec integer
instantaneous_output_kbps float
keyspace_hitrate float
keyspace_hits integer
keyspace_misses integer
latest_fork_usec integer
lazyfree_pending_objects integer
loading integer
lru_clock integer
master_repl_offset integer
maxmemory integer
maxmemory_policy string
mem_aof_buffer integer
mem_clients_normal integer
mem_clients_slaves integer
mem_fragmentation_bytes integer
mem_fragmentation_ratio float
mem_not_counted_for_evict integer
mem_replication_backlog integer
migrate_cached_sockets integer
number_of_cached_scripts integer
pubsub_channels integer
pubsub_patterns integer
rdb_bgsave_in_progress integer
rdb_changes_since_last_save integer
rdb_current_bgsave_time_sec integer
rdb_last_bgsave_status string
rdb_last_bgsave_time_sec integer
rdb_last_cow_size integer
rdb_last_save_time integer
rdb_last_save_time_elapsed integer
redis_version string
rejected_connections integer
repl_backlog_active integer
repl_backlog_first_byte_offset integer
repl_backlog_histlen integer
repl_backlog_size integer
rss_overhead_bytes integer
rss_overhead_ratio float
second_repl_offset integer
slave_expires_tracked_keys integer
sync_full integer
sync_partial_err integer
sync_partial_ok integer
total_commands_processed integer
total_connections_received integer
total_net_input_bytes integer
total_net_output_bytes integer
total_system_memory integer
uptime integer
used_cpu_sys float
used_cpu_sys_children float
used_cpu_user float
used_cpu_user_children float
used_memory integer
used_memory_dataset integer
used_memory_dataset_perc float
used_memory_lua integer
used_memory_overhead integer
used_memory_peak integer
used_memory_peak_perc float
used_memory_rss integer
used_memory_scripts integer
used_memory_startup integer
root@node5:~#
Grafana
æ¥ä¸æ¥å°±å¯ä»¥å®è£
Grafana 以 InfluxDb ä¸ºæ°æ®æºï¼è¿è¡åºäºæ¶é´åºåçæ°æ®å±ç¤ºååæï¼å¹¶æ·»å ç¸åºçæ¥è¦è§å
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install grafana
è®¿é® http://10.20.30.40:3000/
é»è®¤å¯ç æ¯ admin/admin, ç»å½ä¹å第ä¸ä»¶äºæ¯é
ç½®æ°æ®æº
Grafana å·²ç»æè®¸å¤ç°æç仪表çå¯ä»¥åç¨ï¼ä¾å¦
https://grafana.com/grafana/dashboards/6908
å°±æ¯ä¸ä¸ªGrafana å¯¹äº telegraf ææ¶éå°çåº¦éæ°æ®æå»ºç«ç仪表çã
å½ç¶ä½ ä¹å¯ä»¥å建ä¸ä¸ªéåèªå·±çå¾è¡¨ï¼ä¾å¦