码迷,mamicode.com
首页 > 其他好文 > 详细

redis集群

时间:2020-01-04 12:14:46      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:timeout   nod   cli   文件夹   rect   rmi   keep   first   redis集群   

手动部署Redis群集

PS:一台物理机上部署redis集群

1.redis安装

cd /home
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
tar xzf redis-4.0.9.tar.gz
cd redis-4.0.9/
make
--PS:如果没有安装gcc先安装 gcc-v 查看有无安装
--yum install gcc-c++
make PREFIX=/usr/local/redis install

修改/ect/profile

export REDIS_HOME=/usr/local/redis
export PATH=$PATH:$REDIS_HOME/bin

source /ect/profile

然后可在任何地方启动redis

2.Redis群集
创建相关目录,主文件夹是redis-cluster,在此文件夹下建立6个子文件夹,名称分别是:7000,7001,7002,7003,7004,7005,
该目录以我们将在任何给定目录内运行的实例的端口号命名。
cd /etc/redis/
mkdir redis-cluster
cd redis-cluster/
mkdir 7000 7001 7002 7003 7004 7005
cp /home/redis-4.0.9/redis.conf /etc/redis/redis-cluster/7000
cd 7000
修改配置文件:
vi redis.conf
bind 127.0.0.1 //绑定服务器IP地址-0本地

      port 7000 //绑定端口号,必须修改,以此来区分Redis实例

      daemonize yes //后台运行

      pidfile /var/run/redis-7000.pid //修改pid进程文件名,以端口号命名

      logfile "7000.log" //修改日志文件名称,以端口号为目录来区分

      cluster-enabled yes //启用集群

      cluster-config-file nodes-7000.conf //配置每个节点的配置文件,同样以端口号为名称

      cluster-node-timeout 15000 //配置集群节点的超时时间,可改可不改

      appendonly yes //启动AOF增量持久化策略

      appendfsync always //发生改变就记录日志

529 root /etc/redis/redis-cluster/7000# cp redis.conf ../7001
530 root /etc/redis/redis-cluster/7000# cp redis.conf ../7002
531 root /etc/redis/redis-cluster/7000# cp redis.conf ../7003
532 root /etc/redis/redis-cluster/7000# cp redis.conf ../7004
533 root /etc/redis/redis-cluster/7000# cp redis.conf ../7005
切换到各个目录下
vi redis.conf
:%s/7000/700X/g 修改各个配置文件

apt-get install ruby //安装ruby
apt-get install rubygems //安装rubygems,最新版本会自动安装
gem install redis // 安装Redis的Ruby接口程序

指定配置文件 启动6个Redis实例
556 root /etc/redis/redis-cluster# redis-server 7000/redis.conf
557 root /etc/redis/redis-cluster# redis-server 7001/redis.conf
558 root /etc/redis/redis-cluster# redis-server 7002/redis.conf
559 root /etc/redis/redis-cluster# redis-server 7003/redis.conf
560 root /etc/redis/redis-cluster# redis-server 7004/redis.conf
561 root /etc/redis/redis-cluster# redis-server 7005/redis.conf

查看redis实例
ps -ef | grep redis
root 11708 1 0 12:33 ? 00:00:00 redis-server 127.0.0.1:7000 [cluster]
root 11740 1 0 12:33 ? 00:00:00 redis-server 127.0.0.1:7001 [cluster]
root 11745 1 0 12:33 ? 00:00:00 redis-server 127.0.0.1:7002 [cluster]
root 11750 1 0 12:33 ? 00:00:00 redis-server 127.0.0.1:7003 [cluster]
root 11780 1 0 12:33 ? 00:00:00 redis-server 127.0.0.1:7004 [cluster]
root 11785 1 0 12:33 ? 00:00:00 redis-server 127.0.0.1:7005 [cluster]

cp /home/redis-4.0.9/src/redis-trib.rb /etc/redis/redis-cluster/
ruby redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7004 to 127.0.0.1:7000
Adding replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding replica 127.0.0.1:7003 to 127.0.0.1:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: fbc77bd57aba292bbe0a9af38a026c278695e291 127.0.0.1:7000
slots:0-5460 (5461 slots) master
M: 191b5af689b554218f9d4928e2039c4cb2f16839 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
M: fbf5e0dbb34b013e4446c7af1494e6bc8c61e01c 127.0.0.1:7002
slots:10923-16383 (5461 slots) master
S: bee00a5eb67188517a83bca106026731d063f7af 127.0.0.1:7003
replicates 191b5af689b554218f9d4928e2039c4cb2f16839
S: 20464029a6c04c07f975dafedc3aabe6e1d9dad3 127.0.0.1:7004
replicates fbf5e0dbb34b013e4446c7af1494e6bc8c61e01c
S: 2d0b14491494352209d733388a8aa25412a9400b 127.0.0.1:7005
replicates fbc77bd57aba292bbe0a9af38a026c278695e291
Can I set the above configuration? (type ‘yes‘ to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.....
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: fbc77bd57aba292bbe0a9af38a026c278695e291 127.0.0.1:7000
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: bee00a5eb67188517a83bca106026731d063f7af 127.0.0.1:7003
slots: (0 slots) slave
replicates 191b5af689b554218f9d4928e2039c4cb2f16839
S: 20464029a6c04c07f975dafedc3aabe6e1d9dad3 127.0.0.1:7004
slots: (0 slots) slave
replicates fbf5e0dbb34b013e4446c7af1494e6bc8c61e01c
M: 191b5af689b554218f9d4928e2039c4cb2f16839 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
1 additional replica(s)
M: fbf5e0dbb34b013e4446c7af1494e6bc8c61e01c 127.0.0.1:7002
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: 2d0b14491494352209d733388a8aa25412a9400b 127.0.0.1:7005
slots: (0 slots) slave
replicates fbc77bd57aba292bbe0a9af38a026c278695e291
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

分别登陆7000,7001,7002Redis的实例客户端,进行测试
545 root /etc/redis/redis-cluster/7000# redis-cli -c -p 7000
127.0.0.1:7000> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=7005,state=online,offset=140,lag=0 //从节点为7005
master_replid:cbc232c5470acc39ce74765967b9e3cbd15f26cb
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:140
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_off

547 root /etc/redis/redis-cluster/7000# redis-cli -c -p 7005
127.0.0.1:7005> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:7000
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:182
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:cbc232c5470acc39ce74765967b9e3cbd15f26cb
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:182
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:182
127.0.0.1:7005>

通过CLUSTER NODES命令和CLUSTER INFO命令来看看集群效果。
127.0.0.1:7000> CLUSTER NODES
bee00a5eb67188517a83bca106026731d063f7af 127.0.0.1:7003@17003 slave 191b5af689b554218f9d4928e2039c4cb2f16839 0 1577941454434 4 connected
20464029a6c04c07f975dafedc3aabe6e1d9dad3 127.0.0.1:7004@17004 slave fbf5e0dbb34b013e4446c7af1494e6bc8c61e01c 0 1577941454000 5 connected
191b5af689b554218f9d4928e2039c4cb2f16839 127.0.0.1:7001@17001 master - 0 1577941455435 2 connected 5461-10922
fbf5e0dbb34b013e4446c7af1494e6bc8c61e01c 127.0.0.1:7002@17002 master - 0 1577941453432 3 connected 10923-16383
2d0b14491494352209d733388a8aa25412a9400b 127.0.0.1:7005@17005 slave fbc77bd57aba292bbe0a9af38a026c278695e291 0 1577941453000 6 connected
fbc77bd57aba292bbe0a9af38a026c278695e291 127.0.0.1:7000@17000 myself,master - 0 1577941453000 1 connected 0-5460

127.0.0.1:7000> 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:433
cluster_stats_messages_pong_sent:434
cluster_stats_messages_sent:867
cluster_stats_messages_ping_received:429
cluster_stats_messages_pong_received:433
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:867

550 root /etc/redis/redis-cluster/7000# redis-cli -c -p 7000
127.0.0.1:7000> get name
-> Redirected to slot [5798] located at 127.0.0.1:7001
"hehe"
127.0.0.1:7001> set name hah
OK
127.0.0.1:7001> get name
"hah"
127.0.0.1:7001> set k1 v1
-> Redirected to slot [12706] located at 127.0.0.1:7002
OK
127.0.0.1:7002> keys *
1) "k1"
127.0.0.1:7002> get k1
"v1"
127.0.0.1:7002> quit
551 root /etc/redis/redis-cluster/7000# redis-cli -c -p 7004
127.0.0.1:7004> keys *
1) "k1"
127.0.0.1:7004> get k1
-> Redirected to slot [12706] located at 127.0.0.1:7002
"v1"
127.0.0.1:7002>

golang操作redis集群
package main

import (
"github.com/gitstliu/go-redis-cluster"
"fmt"
"os"
"time"
)


func main () {
cluster, err := redis.NewCluster(
&redis.Options{
StartNodes: []string{"127.0.0.1:7000", "127.0.0.1:7001", "127.0.0.1:7002","127.0.0.1:7003", "127.0.0.1:7004", "127.0.0.1:7005"},
ConnTimeout: 50 * time.Millisecond,
ReadTimeout: 50 * time.Millisecond,
WriteTimeout: 50 * time.Millisecond,
KeepAlive: 16,
AliveTime: 60 * time.Second,
})
if err != nil {
fmt.Println(err)
os.Exit(0)
}
defer cluster.Close()

cluster.Do("SET", "name", "Haha")
cluster.Do("SET", "k1", "v1")
cluster.Do("SET", "k2", "v2")
cluster.Do("SET", "k3", "v3")
name, err := redis.String(cluster.Do("GET", "name"))
if err != nil {
fmt.Println(err)
return
}
fmt.Println(name)
v1, err := redis.String(cluster.Do("GET", "k1"))
if err != nil {
fmt.Println(err)
return
}
fmt.Println(v1)
v2, err := redis.String(cluster.Do("GET", "k2"))
if err != nil {
fmt.Println(err)
return
}
fmt.Println(v2)
v3, err := redis.String(cluster.Do("GET", "k3"))
if err != nil {
fmt.Println(err)
return
}
fmt.Println(v3)
}

redis集群

标签:timeout   nod   cli   文件夹   rect   rmi   keep   first   redis集群   

原文地址:https://www.cnblogs.com/chen1986/p/12148258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!