单台服务器部署集群3台
安装依赖包
[root@oldboy ~]# yum -y install zlib ruby rubygems
[root@oldboy ~]# gem install redis
安装
[root@oldboy ~]# wget http://download.redis.io/releases/redis-3.0.0.tar.gz
[root@oldboy ~]# tar xf redis-3.0.0.tar.gz
[root@oldboy redis-3.0.0]# make PREFIX=/root/redis
[root@oldboy redis-3.0.0]# make PREFIX=/root/redis install
配置文件
[root@oldboy redis-3.0.0]# cp /root/redis-3.0.0/src/redis-trib.rb /root/redis/bin/
[root@oldboy redis-3.0.0]# mkdir /root/redis/{conf,data,logs}
[root@oldboy redis-3.0.0]# ll /root/redis
总用量 16
drwxr-xr-x 2 root root 4096 4月 13 19:40 bin
drwxr-xr-x 2 root root 4096 4月 13 19:41 conf
drwxr-xr-x 2 root root 4096 4月 13 19:41 data
drwxr-xr-x 2 root root 4096 4月 13 19:41 logs
[root@oldboy ~]# chown redis.redis /root/redis -R
[root@oldboy ~]# ll -d /root/redis
drwxr-xr-x 6 redis redis 4096 4月 13 19:41 /root/redis
复制配置文件
[root@oldboy redis]# cp /root/redis-3.0.0/redis.conf ./conf/redis-6380.conf
[root@oldboy redis]# cp /root/redis-3.0.0/redis.conf ./conf/redis-6381.conf
[root@oldboy redis]# cp /root/redis-3.0.0/redis.conf ./conf/redis-6382.conf
修改配置文件
[root@oldboy redis]# vim ./conf/redis-6380.conf
daemonize yes
pidfile /root/redis/data/redis-6380.pid
port 6380
tcp-backlog 511
bind 192.168.145.21
unixsocket /root/redis/data/redis-6380.sock
unixsocketperm 700
timeout 300
tcp-keepalive 0
loglevel verbose
logfile "/root/redis/logs/redis-6380.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump-6380.rdb
dir /root/redis/data/
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly yes
appendfilename "appendonly-6380.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 80-100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
cluster-enabled yes
cluster-config-file /root/redis/data/nodes-6380.conf
cluster-node-timeout 5000
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-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
[root@oldboy redis]# cp ./conf/redis-6380.conf ./conf/redis-6381.conf
cp:是否覆盖"./conf/redis-6381.conf"? y
[root@oldboy redis]# cp ./conf/redis-6380.conf ./conf/redis-6382.conf
cp:是否覆盖"./conf/redis-6382.conf"? y
[root@oldboy redis]# sed -i "s#6380#6381#g" ./conf/redis-6381.conf
[root@oldboy redis]# sed -i "s#6380#6382#g" ./conf/redis-6382.conf
调整参数
[root@oldboy redis]# echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
[root@oldboy redis]# echo 1 > /proc/sys/vm/overcommit_memory
[root@oldboy redis]# echo 511 > /proc/sys/net/core/somaxconn
[root@oldboy redis]# ./bin/redis-server ./conf/redis-6380.conf ;tail -f logs/redis-6380.log
5744:M 13 Apr 20:16:14.849 - 0 clients connected (0 slaves), 1158392 bytes in use
5744:M 13 Apr 20:16:19.902 - 0 clients connected (0 slaves), 1158392 bytes in use
5744:M 13 Apr 20:16:24.955 - 0 clients connected (0 slaves), 1158392 bytes in use
5744:M 13 Apr 20:16:30.012 - 0 clients connected (0 slaves), 1158392 bytes in use
5744:M 13 Apr 20:16:35.065 - 0 clients connected (0 slaves), 1158392 bytes in use
5744:M 13 Apr 20:16:40.141 - 0 clients connected (0 slaves), 1158392 bytes in use
5744:M 13 Apr 20:16:45.368 - 0 clients connected (0 slaves), 1158392 bytes in use
5744:M 13 Apr 20:16:50.421 - 0 clients connected (0 slaves), 1158392 bytes in use
5744:M 13 Apr 20:16:55.475 - 0 clients connected (0 slaves), 1158392 bytes in use
5744:M 13 Apr 20:17:00.530 - 0 clients connected (0 slaves), 1158392 bytes in use
5749:M 13 Apr 20:17:01.711 * Increased maximum number of open files to 10032 (it was originally set to 1024).
5749:M 13 Apr 20:17:01.712 # Creating Server TCP listening socket 192.168.145.21:6380: bind: Address already in use
5744:M 13 Apr 20:17:05.584 - 0 clients connected (0 slaves), 1158392 bytes in use
^C
[root@oldboy redis]# ss -tnl|grep 6380
LISTEN 0 128 192.168.145.21:6380 *:*
LISTEN 0 128 192.168.145.21:16380
*:*
[root@oldboy redis]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@oldboy redis]# vim /etc/rc.local =========上面语句添加
[root@oldboy redis]# ./bin/redis-server ./conf/redis-6381.conf ;tail -f logs/redis-6381.log
5758:M 13 Apr 20:21:01.873 - 0 clients connected (0 slaves), 1158392 bytes in use
5758:M 13 Apr 20:21:06.924 - 0 clients connected (0 slaves), 1158392 bytes in use
5758:M 13 Apr 20:21:11.978 - 0 clients connected (0 slaves), 1158392 bytes in use
5758:M 13 Apr 20:21:17.031 - 0 clients connected (0 slaves), 1158392 bytes in use
5758:M 13 Apr 20:21:22.085 - 0 clients connected (0 slaves), 1158392 bytes in use
5758:M 13 Apr 20:21:27.138 - 0 clients connected (0 slaves), 1158392 bytes in use
5758:M 13 Apr 20:21:32.192 - 0 clients connected (0 slaves), 1158392 bytes in use
5758:M 13 Apr 20:21:37.249 - 0 clients connected (0 slaves), 1158392 bytes in use
5758:M 13 Apr 20:21:42.301 - 0 clients connected (0 slaves), 1158392 bytes in use
5758:M 13 Apr 20:21:47.421 - 0 clients connected (0 slaves), 1158392 bytes in use
5768:M 13 Apr 20:21:47.685 * Increased maximum number of open files to 10032 (it was originally set to 1024).
5768:M 13 Apr 20:21:47.685 # Creating Server TCP listening socket 192.168.145.21:6381: bind: Address already in use
5758:M
[root@oldboy redis]# ./bin/redis-server ./conf/redis-6382.conf ;tail -f logs/redis-6382.log
[root@oldboy redis]# ss -tnl|grep 63
LISTEN 0 511 192.168.145.21:16381 *:*
LISTEN 0 511 192.168.145.21:16382 *:*
LISTEN 0 128 192.168.145.21:6380 *:*
LISTEN 0 511 192.168.145.21:6381 *:*
LISTEN 0 511 192.168.145.21:6382 *:*
LISTEN 0 128 192.168.145.21:16380 *:*
创建cluster
[root@oldboy redis]# ./bin/redis-trib.rb create 192.168.145.21:6380 192.168.145.21:6381 192.168.145.21:6382
注:redis-trib.rb使用参数
Usage: redis-trib <command> <options> <arguments ...>
fix host:port
call host:port command arg arg .. arg
check host:port
import host:port
--from <arg>
set-timeout host:port milliseconds
add-node new_host:new_port existing_host:existing_port
--master-id <arg>
--slave
reshard host:port
--to <arg>
--from <arg>
--slots <arg>
--yes
create host1:port1 ... hostN:portN
--replicas <arg>
help (show this help)
del-node host:port node_id
For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
参数说明:
call:执行redis命令
create:======创建一个新的集群。
host1:port1 ... hostN:portN============指定了用于构建Redis Cluster的所有redis实例,节点角色由顺序决定,先master之后是slave。而--replicas 则指定了为Redis Cluster中的每个Master节点配备几个Slave节点。
add-node=========将一个节点添加到集群里面, 第一个是新节点ip:port, 第二个是任意一个已存在节点ip:port,--master-id
reshard===============重新分片
check:===============查看集群信息
del-node:=================移除一个节点
对于客户端redis-cli要访问集群,在启动的时候需要添加一个-c参数,如查看集群所有节点:
./bin/redis-cli -c -h 192.168.36.189 -p 6380 cluster nodes
集群命令
cluster info============打印集群的信息
cluster nodes ===============列出集群当前已知的所有节点(node),以及这些节点的相关信息。
节点
cluster meet <ip> <port> ================将ip和port所指定的节点添加到集群当中,让它成为集群的一份子。
cluster forget <node_id> ===========从集群中移除 node_id 指定的节点。
cluster replicate <node_id> ===========将当前节点设置为node_id指定的节点的从节点。
cluster saveconfig ========将节点的配置文件保存到硬盘里面。
槽(slot)
cluster addslots <slot> [slot ...] ==============将一个或多个槽(slot)指派(assign)给当前节点。
cluster delslots <slot> [slot ...] ====================移除一个或多个槽对当前节点的指派。
cluster flushslots================= 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot <slot> node <node_id> ===================将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
cluster setslot <slot> migrating <node_id> ===============将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot <slot> importing <node_id> ===================从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot <slot> stable======================== 取消对槽 slot 的导入(import)或者迁移(migrate)。
键
cluster keyslot <key> ==========================计算键 key 应该被放置在哪个槽上。 =
cluster countkeysinslot <slot> =================返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot <slot> <count> ==============返回 count 个 slot 槽中的键。
[root@oldboy redis]# ./bin/redis-cli -c -h 192.168.145.21 -p 6380
192.168.145.21:6380> set a 123
-> Redirected to slot [15495] located at 192.168.145.21:6382
OK
192.168.145.21:6382> get a
"123"
192.168.145.21:6382> quit
[root@oldboy redis]# ./bin/redis-cli -c -h 192.168.145.21 -p 6381
192.168.145.21:6381> get a
-> Redirected to slot [15495] located at 192.168.145.21:6382
"123"
192.168.145.21:6382> quit
[root@oldboy redis]# ./bin/redis-cli -c -h 192.168.145.21 -p 6382
192.168.145.21:6382> get a
"123"