centos 7下搭建Redis5.x版集群
二、开始集群搭建
redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,这里用一台机器(可以多台机器部署,修改一下ip地址就可以了)部署6个redis实例,三主三从,搭建集群的步骤如下:
第一步:在第一台机器的/usr/local下创建文件夹redis-cluster,然后在其下面创建6个文件夾如下:
mkdir /usr/local/redis-cluster cd /usr/local/redis-cluster mkdir 8001 8002 8003 8004 8005 8006
第二步:把之前的redis.conf配置文件copy到8001下,修改如下内容:
1)daemonize yes
2)port 8001(分别对每个机器的端口号进行设置)
3)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
4)cluster-enabled yes(启动集群模式)
5)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)
6)cluster-node-timeout 5000
1. bind 127.0.0.1(去掉bind绑定访问ip信息)
2. protected-mode no (关闭保护模式)
9)appendonly yes
10)设置pidfile存放在 run目录下的文件名 pidfile /var/run/redis_8001.pid
11)dbfilename dump_8001.rdb
如果要设置密码需要增加如下配置:
12)requirepass xxx (设置redis访问密码)
13)masterauth xxx (设置集群节点间访问密码,跟上面一致)
第三步:把修改后的配置文件,
copy到8001-8006,修改第2、3、5项里的端口号,可以用
echo 8001 8002 8003 8004 8005 8006 | xargs -n 1 cp -v /usr/local/redis-cluster/redis.conf
上面的意思是将/usr/local/redis-cluster/redis.conf文件同时复制到8001-8006 二个文件夹。
-n 1 告诉 xargs 命令每个命令行最多使用一个参数,并发送到 cp 命令中。
cp 用于复制文件。
-v 启用详细模式来显示更多复制细节。
如果是将指定文件复制到当前路径下的所有文件夹:
echo ./* |xargs -n 1 cp -v d 注意千万不能漏写.另外当前路径下有其他文件会被d文件覆盖 此命令慎用 如果文件不是特别多建议使用上面的命令。
批量替换[在vi编辑状态下使用]:
%s/源字符串/目的字符串/g
批量替换多个文件的内容
格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir` example: sed -i "s/8001/8002/g" `grep 8001 -rl /usr/local/redis-cluster/8002/redis.conf`
第四步:分别启动6个redis实例,然后检查是否启动成功
在redis-cluster目录下,编写redis_cluster_start_all.sh启动脚本,启动六个redis实例
/usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8001/redis.conf /usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8002/redis.conf /usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8003/redis.conf /usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8004/redis.conf /usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8005/redis.conf /usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8006/redis.conf
由于刚创建好的redis_cluster_start_all.sh脚本是没有执行权限的,所以需要给脚本添加可执行权限
8001 8002 8003 8004 8005 8006 redis_cluster_start_all.sh redis.conf [ redis-cluster]# ll | grep redis_cluster_start_all.sh -rw-r--r--. 1 root root 473 3月 1 19:05 redis_cluster_start_all.sh [ redis-cluster]# chmod +x redis_cluster_start_all.sh [ redis-cluster]# ll | grep redis_cluster_start_all.sh -rwxr-xr-x. 1 root root 473 3月 1 19:05 redis_cluster_start_all.sh
启动六个redis实例
./redis_cluster_start_all.sh
查看是否启动成功
ps -ef | grep redis
第五步:用redis-cli创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现)
/usr/local/redis507/bin/redis-cli -a gerry123 --cluster create --cluster-replicas 1 192.168.6.172:7001 192.168.6.172:7002 192.168.6.172:7003 192.168.6.172:7004 192.168.6.172:7005 192.168.6.172:7006
代表为每个创建的主服务器节点创建一个从服务器节点
第七步:验证集群:
1)连接任意一个客户端即可:
./redis-cli -c -a gerry123 -h 192.168.6.172 -p 7001
提示:-a访问服务端密码,-c表示集群模式,指定ip地址和端口号
例如:
/usr/local/redis-5.0.2/src/redis-cli -a xxx -c -h 192.168.5.100 -p 8001
注意这里进入到8002了,redirected。
2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)
3)进行数据操作验证
4)关闭集群则需要逐个进行关闭,使用命令:
/usr/local/redis/src/redis-cli -a xxx -c -h 192.168.0.60 -p 8001 shutdown
三、Jedis连接Redis集群
import java.io.IOException; import java.util.HashSet; import java.util.Set; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPoolConfig; /** 访问redis集群 @author GERRY */ public class RedisCluster { public static void main(String[] args) throws IOException { Set jedisClusterNode = new HashSet(); jedisClusterNode.add(new HostAndPort(“192.168.6.61”, 8001)); jedisClusterNode.add(new HostAndPort(“192.168.6.62”, 8002)); jedisClusterNode.add(new HostAndPort(“192.168.6.63”, 8003)); jedisClusterNode.add(new HostAndPort(“192.168.6.61”, 8004)); jedisClusterNode.add(new HostAndPort(“192.168.6.62”, 8005)); jedisClusterNode.add(new HostAndPort(“192.168.6.63”, 8006)); JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(100); config.setMaxIdle(10); config.setTestOnBorrow(true); //connectionTimeout:指的是连接一个url的连接等待时间 //soTimeout:指的是连接上一个url,获取response的返回等待时间 JedisCluster jedisCluster = new JedisCluster(jedisClusterNode, 6000, 5000, 10, "gerry", config); System.out.println(jedisCluster.set("student", "GERRY")); System.out.println(jedisCluster.set("age", "19")); System.out.println(jedisCluster.get("student")); System.out.println(jedisCluster.get("age")); jedisCluster.close(); }
相关推荐
zhouminit 2020-09-23
soyo 2020-08-31
DiamondTao 2020-08-17
kaixinfelix 2020-07-30
zhangll00 2020-07-29
litterfrog 2020-06-11
afanti 2020-06-08
soyo 2020-06-06
oZaoHua 2020-06-05
qingmuluoyang 2020-05-29
王道革 2020-05-25
GavinZhera 2020-05-19
denghonghao 2020-05-12
fsl 2020-05-12
fansenjun 2020-05-12
zhangtianshun 2020-05-11
fsl 2020-05-04
kaixinfelix 2020-04-20
litterfrog 2020-04-19