Redis集群配置
编译安装redis
参考redis安装
创建redis节点
先每个节点单独创建一个配置文件
如redis1.conf,redis2.conf,redis3.conf,redis4.conf
bind 192.168.1.41
daemonize yes //redis后台运行
pidfile /var/run/redis_6379.pid //pidfile文件对应端口号
port 6379 //端口
cluster-enabled yes //开启集群
cluster-config-file nodes_6379.conf //集群的配置 配置文件首次启动自动生成
cluster-node-timeout 5000 //请求超时 设置5秒够了
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
启动redis
./src/redis-server redis_cluster/redis1.conf
./src/redis-server redis_cluster/redis2.conf
./src/redis-server redis_cluster/redis3.conf
./src/redis-server redis_cluster/redis4.conf
./src/redis-server redis_cluster/redis5.conf
./src/redis-server redis_cluster/redis6.conf
查看服务
ps -ef | grep redis #查看是否启动成功
创建集群
./redis-trib.rb create --replicas 1 192.168.1.41:6379 192.168.1.41:6380 192.168.1.41:6381 192.168.1.41:6382 192.168.1.41:6383 192.168.1.41:6384
- –replicas 1 表示 自动为每一个master节点分配一个slave节点 上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)
- 运行中,提示Can I set the above configuration? (type ‘yes’ to accept): yes //输入yes>3.
- 接下来 提示 Waiting for the cluster to join… 安装的时候在这里就一直等等等,没反应,傻傻等半天,看这句提示上面一句,Sending Cluster Meet Message to join the Cluster.
- 如果集群分布在不同机器上,需要进入所有的服务器操作
- 在其他服务器上, redis-cli -c -p 6380 分别进入redis各节点的客户端命令窗口, 依次输入 cluster meet 192.168.1.238 6379
- 回到Server1,已经创建完毕了。
查看一下 ./redis-trib.rb check 192.168.1.41:6379
到这里集群已经初步搭建好了。
测试
- get和set 数据
./redis-cli -c -p 6379
set k1 v1
set k2 v2
set k3 v3
每次调用set会均匀分布在不同的服务上,并且会自动同步数据导slave上面
- 宕机测试
假设有一个节点挂了,对应的slave节点会自动切换成master,master节点还是保持奇数个。
如果挂点的节点再次启动,会自动成为slave节点
清除集群
- 删除node*.conf
- 删除appendonly.aof
- 删除dump.rdb
- 停止所有redis节点
安装ruby
yum -y install ruby ruby-devel rubygems rpm-build
再用 gem 这个命令来安装 redis接口 gem是ruby的一个工具包.
gem install redis //等一会儿就好了
如果提示“redis requires Ruby version >= 2.2.2”请安如下步骤升级ruby
安装RVM
gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
curl -sSL https://get.rvm.io | bash -s stable
find / -name rvm -print
source /usr/local/rvm/scripts/rvm
查看ruby版本
rvm list known
安装一个ruby版本
rvm install 2.4.1
使用一个ruby版本
rvm use 2.4.1
//设置为默认版本
rvm use 2.4.1 --default
//查看ruby版本
ruby --version
java客户端连接集群
引入jedis依赖包
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
只要连接一个节点就可以,集群其他节点会自动发现。当然也可以把所有的节点都加上
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
//Jedis Cluster will attempt to discover cluster
nodes automatically
jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7379));
JedisCluster jc = new JedisCluster(jedisClusterNodes);
jc.set("foo", "bar");
String value = jc.get("foo");