在redhat6.4安装redis集群【教程】

时间:2022-02-18 21:24:59

  参考:

  http://redis.io/topics/cluster-tutorial(主要是Creating a Redis Cluster using the create-cluster script部分)

  https://ruby.taobao.org/

  安装一款不熟悉的软件前先看INSTALL,README,这是习惯,生产上要建立普通用户并调节适当参数,下面是以root身份安装运行.

  下载解压并安装redis

  make test提示需要更高版本的tcl,跳到安装过程可能遇到的问题

  

?
1
2
3
4
5
6
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
tar xf redis-3.0.7.tar.gz
cd redis-3.0.7
mkdir -p /opt/redis
make test
make PREFIX=/opt/redis install

  复制两个脚本到安装的目录

 

?
1
2
3
4
5
cp ~/redis-3.0.7/src/redis-trib.rb /opt/redis/
 
 cp ~/redis-3.0.7/utils/create-cluster/create-cluster /opt/redis/1212

  根据实际修改/opt/redis/create-cluster.改动的地方有几处

  a.增加了三个变量BASEDIR,BINDIR和DATADIR,

  b.修改相关命令路径,

  c.start前,先进入DATADIR,start后,返回原目录

  d.clean前,先进入DATADIR,start后,返回原目录

  e.create的host由127.0.0.1改为192.168.1.194(不改有时会报Too many Cluster redirections)

  下面是修改后的shell

 

?
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#!/bin/bash
 
 # Settings
 
 PORT=30000
 
 TIMEOUT=2000
 
 NODES=6
 
 REPLICAS=1
 
 BASEDIR=/opt/redis
 
 BINDIR=$BASEDIR/bin
 
 DATADIR=$BASEDIR/data
 
 
 # You may want to put the above config parameters into config.sh in order to
 
 # override the defaults without modifying this script.
 
 if [ -a config.sh ]
 
 then
 
 source "config.sh"
 
 fi
 
 # Computed vars
 
 ENDPORT=$((PORT+NODES))
 
 if [ "$1" == "start" ]
 
 then
 
 cd $DATADIR
 
 while [ $((PORT < ENDPORT)) != "0" ]; do
 
 PORT=$((PORT+1))
 
 echo "Starting $PORT"
 
 $BINDIR/redis-server --port $PORT --cluster-enabled yes --cluster-config-file nodes-${PORT}.conf --cluster-node-timeout $TIMEOUT --appendonly yes --appendfilename appendonly-${PORT}.aof --dbfilename dump-${PORT}.rdb --logfile ${PORT}.log --daemonize yes
 
 done
 
 cd -
 
 exit 0
 
 fi
 
 if [ "$1" == "create" ]
 
 then
 
 HOSTS=""
 
 while [ $((PORT < ENDPORT)) != "0" ]; do
 
 PORT=$((PORT+1))
 
 HOSTS="$HOSTS 192.168.1.194:$PORT"
 
 done
 
 $BASEDIR/redis-trib.rb create --replicas $REPLICAS $HOSTS
 
 exit 0
 
 fi
 
 if [ "$1" == "stop" ]
 
 then
 
 while [ $((PORT < ENDPORT)) != "0" ]; do
 
 PORT=$((PORT+1))
 
 echo "Stopping $PORT"
 
 $BINDIR/redis-cli -p $PORT shutdown nosave
 
 done
 
 exit 0
 
 fi
 
 if [ "$1" == "watch" ]
 
 then
 
 PORT=$((PORT+1))
 
 while [ 1 ]; do
 
 clear
 
 date
 
 $BINDIR/redis-cli -p $PORT cluster nodes | head -30
 
 sleep 1
 
 done
 
 exit 0
 
 fi
 
 if [ "$1" == "tail" ]
 
 then
 
 INSTANCE=$2
 
 PORT=$((PORT+INSTANCE))
 
 tail -f ${PORT}.log
 
 exit 0
 
 fi
 
 if [ "$1" == "call" ]
 
 then
 
 while [ $((PORT < ENDPORT)) != "0" ]; do
 
 PORT=$((PORT+1))
 
 $BINDIR/redis-cli -p $PORT $2 $3 $4 $5 $6 $7 $8 $9
 
 done
 
 exit 0
 
 fi
 
 if [ "$1" == "clean" ]
 
 then
 
 cd $DATADIR
 
 rm -rf *.log
 
 rm -rf appendonly*.aof
 
 rm -rf dump*.rdb
 
 rm -rf nodes*.conf
 
 cd -
 
 exit 0
 
 fi
 
 echo "Usage: $0 [start|create|stop|watch|tail|clean]"
 
 echo "start -- Launch Redis Cluster instances."
 
 echo "create -- Create a cluster using redis-trib create."
 
 echo "stop -- Stop Redis Cluster instances."
 
 echo "watch -- Show CLUSTER NODES output (first 30 lines) of first node."
 
 echo "tail -- Run tail -f of instance at base port + ID."
 
 echo "clean -- Remove all instances data, logs, configs."123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

  不要忘了创建数据目录mkdir -p /opt/redis/data

  根据上面的参考,启动集群和停止集群

  启动集群:先敲入/opt/redis/create-cluster start回车,再敲入/opt/redis/create-cluster create回车,再输入yes回车

  停止集群:敲入/opt/redis/create-cluster stop回车

  如果以前启动过,造成不一致数据,create时就会报错,可先/opt/redis/create-cluster clean

  测试

 

?
1
2
3
4
5
<dependency>
 <groupId>redis.clients</groupId>
 <artifactId>jedis</artifactId>
 <version>2.8.1</version>
</dependency>

  声明JedisCluster Bean

 

?
1
2
3
4
5
6
7
8
@Bean
 public JedisCluster jedisCluster(){
  Set<HostAndPort> nodes=new HashSet<>(3);
  nodes.add(new HostAndPort("192.168.1.194",30001));
  nodes.add(new HostAndPort("192.168.1.194",30002));
  nodes.add(new HostAndPort("192.168.1.194",30003));
  return new JedisCluster(nodes,2000,5);
 }

 

  测试set和get

  

?
1
2
3
4
AnnotationConfigApplicationContext context= new AnnotationConfigApplicationContext(AppConfig.class);
 JedisCluster jedisCluster = (JedisCluster) context.getBean("jedisCluster");
 jedisCluster.set("xxx","123");
 System.out.println("jedisCluster.get = " + jedisCluster.get("xxx"));

  安装过程可能遇到的问题:

  make test时,提醒You need tcl 8.5 or newer in order to run the Redis test.到http://www.tcl.tk/software/tcltk/download.html下载Tcl,

 

?
1
2
3
4
5
6
7
wget http://prdownloads.sourceforge.net/tcl/tcl8.5.19-src.tar.gz
tar xf tcl8.5.19-src.tar.gz
cd tcl8.5.19/unix
./configure
make
make test
make install

 

  因为create-cluster create会调用redis-trib.rb,它是一个ruby脚本,所以提示没有安装ruby,就先安装yum install -y ruby

  如果提示加载rubygems错误,使用以下办法安装rubygems

  a.https://rubygems.org/pages/download下载tgz格式的安装包(wget可能不通,在windows用旋风或迅雷下载)

  b.mount -t cifs -o username=xiejx618,password=123456 //192.168.1.115/share /share

  

?
1
2
3
4
cp /share/rubygems-2.6.4.tgz ./
tar xf rubygems-2.6.4.tgz
cd rubygems-2.6.4
ruby setup.rb

  如果再提示no such file to load – rdoc/rdoc,就先安装yum install -y rdoc

  如果再提示 no such file to load – redis,就使用gem install redis -v 3.0.7

  gem又是因为墙原因无法使用默认源,就修改为淘宝源

  可能用到的几个命令

  帮助:gem sources --help

  查看源:gem sources -l

  删除源:gem sources -r https://rubygems.org/

  添加源:gem sources -a https://ruby.taobao.org/

  更新源缓存:gem sources -u