简单步骤:
安装完redis单机版后,操作如下步骤:
使用一台服务器安装redis集群
第一步:创建文件夹目录:
(1) mkdir -p /usr/local/redis-4.0/cluster/7001(创建7001到7006,存放配置文件)
(2) mkdir /usr/local/redis-4.0/data(用来存放redis数据文件)
第二步:拷贝配置文件
(1) cp /usr/local/redis-4.0/redis.conf /usr/local/redis-4.0/cluster/7001
(2) mv /usr/local/redis-4.0/cluster/7001/redis.conf /usr/local/redis-4.0/cluster/7001/redis-7001.conf
第三步:修改配置文件
vi /usr/local/redis-4.0/cluster/7001/redis-7001.conf
port 700*(分别对每个机器的端口号进行设置)
bind 192.168.1.150(必须要绑定当前机器的ip,不然会无限悲剧下去哇..深坑勿入!!!)
dir /usr/local/ redis-4.0/cluster/700*/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据,深坑勿入!!!)
cluster-enabled yes(启动集群模式)
cluster-config-file nodes-700*.conf(这里700x最好和port对应上)
cluster-node-timeout 5000
appendonly yes
pidfile /var/run/redis_700*.pid
logfile /usr/local/redis-4.0/data/700*/redis.log
daemonize yes
第四步:安装ruby
(1)yum install ruby
(2)yum install rubygems
(3)gem install redis (安装redis和ruby的接口)
第五步:分别启动6个redis实例,然后检查是否启动成功
(1)/usr/local/redis-4.0/bin/redis-server /usr/local/redis-4.0/cluster/redis-700*.conf
(2)ps -el | grep redis 查看是否启动成功
第六步:创建集群,执行redis-trib.rb
(1)cd /usr/local/redis-4.0/bin/redis-trib.rb(从解压编译的目录/usr/local/redis-4.0.9/src拷贝)
(2)./redis-trib.rb create --replicas 1 192.168.1.150:7001 192.168.1.150:7002 192.168.1.150:7003 192.168.1.150:7004 192.168.1.150:7005 192.168.1.150:7006
第七步:到此为止我们集群搭建成功!进行验证:
(1)连接任意一个客户端即可:./redis-cli -c -h -p (-c表示集群模式,指定ip地址和端口号)如:/usr/local/redis/bin/redis-cli -c -h 192.168.1.171 -p 700*
(2)进行验证:cluster info(查看集群信息)、cluster nodes(查看节点列表)
(3)进行数据操作验证
(4)关闭集群则需要逐个进行关闭,使用命令:usr/local/redis/bin/redis-cli -c -h 192.168.1.171 -p 700* shutdown
第八步:(补充)
友情提示:当出现集群无法启动时,删除临时的数据文件,再次重新启动每一个redis服务,然后重新构造集群环境。
一、Redis集群安装配置详细步骤
IP地址:192.168.1.150
安装路径:/user/local/redis4.0.9
主 | 从 |
192.168.1.150:7001 | 192.168.1.150:7004 |
192.168.1.150:7002 | 192.168.1.150:7005 |
192.168.1.150:7003 | 192.168.1.150:7006 |
1、解压文件
tar -zxvf redis-4.0.9.tar.gz -C /usr/local/
2、安装gcc依赖
执行gcc -v查看是否有安装gcc,如果没有安装,执行命令sudo yum install -y gcc
3、编译安装
cd /usr/local/redis-4.0.9
make
cd /usr/local/redis-4.0.9/src
make install PREFIX=/usr/local/redis-4.0
4、创建目录结构
cp /usr/local/redis-4.0.9/src/redis-trib.rb /usr/local/redis-4.0/bin/ #拷贝执行集群的文件
mkdir -p /usr/local/redis-4.0/cluster #集群配置文件目录
mkdir -p /usr/local/redis-4.0/data/7001 #创建数据、日志保存目录6个,7001至7006
5、配置redis.conf文件
cp /usr/local/redis-4.0.9/redis.conf /usr/local/redis-4.0/cluster/
mv redis.conf redis-7001.conf #重命名文件
/usr/local/redis-4.0/cluster/redis-7001.conf /usr/local/redis-4.0/cluster/redis-700*.conf #(拷贝六个节点配置文件)。
vim redis-7001.conf 编辑配置文件
修改内容:
#该节点端口号
port 700*
#(绑定本机内网地址)
bind 172.21.0.4
#redis数据保存路径
dir /usr/local/redis-4.0/data/700*/
#是否开启集群
cluster-enabled yes
#集群节点配置文件,程序客户端连接时从该配置文件中获取ip,如供外网访问,
#该文件中的IP地址是内网地址的话需要改成外网地址客户端才能连接得上
cluster-config-file nodes-700*.conf
#集群节点的通信时间
cluster-node-timeout 5000
#开启aof方式持久化
appendonly yes
#日志文件路径
logfile "/usr/local/redis-4.0/data/700*/redis.log"
pidfile /var/run/redis_7001.pid
#线程后台启动
daemonize yes
6、安装ruby
yum -y install ruby
yum -y install rubygems
gem install redis #(安装redis和ruby的接口)
CentOS7 yum库中ruby的版本支持到 2.0.0,可gem 安装redis需要最低是2.2.2,采用rvm来更新ruby:
(1)安装RVM
curl -L get.rvm.io | bash -s stable
执行:
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
ccurl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
find / -name rvm -print
需要执行的命令如下:
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
curl -L get.rvm.io | bash -s stable
使刚安装的rvm立即生效:
source /usr/local/rvm/scripts/rvm
查看rvm库中ruby版本:
rvm list known
(2)安装一个ruby版本
rvm install 2.4.1
使用一个ruby版本
rvm use 2.4.1
设置默认版本
rvm use 2.4.1 –default
卸载一个已知版本
rvm remove 2.0.0
查看ruby版本:
ruby --version
重新安装redis:
gem install redis
7、分别启动6个redis实例,然后检查是否启动成功
#(起动6个节点,获取做个shell脚本文件批量启动)
/usr/local/redis-4.0/bin/redis-server /usr/local/redis-4.0/cluster/redis-700*.conf
8、打开防火墙端口(创建集群前开放端口)
#添加端口:
firewall-cmd --permanent --add-port=7001/tcp(7001至7006)
#添加端口:
firewall-cmd --permanent --add-port=17001/tcp(17001至17006)
#重启防火墙:
firewall-cmd --reload
注意:
redis集群总线端口为redis客户端端口加上10000,比如说你的redis 6379端口为客户端通讯端口,那么16379端口为集群总线端口,所以开放防火墙端口的时候也要对其开放。
更多关于防火墙的操作:
#防火墙启用状态:
firewall-cmd –state
#查看防火墙是否已开发:
firewall-cmd --query-port=9876/tcp
#查看所有打开的端口:
firewall-cmd --list-ports(或后面是-all)
#启动防火墙:
service firewalld start
#关闭防火墙:
service firewalld stop
#删除端口:
firewall-cmd --permanent --remove-port=17006/tcp
9、云服务器安全组开放端口,线上可以指定IP地址(创建集群前开放端口)
来源:124.64.236.185(指定对某一外网ip或全开放0.0.0.0/0)
协议端口:TCP:7001,7002,7003,7004,7005,7006,17001,17002,17003,17004,17005,17006
10、创建集群,给节点分片(槽)
# --replicas 1 表示1主1从,前三个节点为主节点,后三个为对应前三个主节点的从节点
# --replicas 1 表示1主2从,前三个节点为主节点,后六个节点为从节点,分两组,三个一组,
#一一对应主节点。
/usr/local/redis-4.0/bin/redis-trib.rb create --replicas 1 192.168.1.150:7001 192.168.1.150:7002 192.168.1.150:7003 192.168.1.150:7004 192.168.1.150:7005 192.168.1.150:7006
参照 以上6、安装ruby
然后再次执行(ip地址使用外网IP地址,要不然程序使用内网地址操作失败):
/usr/local/redis-4.0/bin/redis-trib.rb create --replicas 1 192.168.1.150:7001 192.168.1.150:7002 192.168.1.150:7003 192.168.1.150:7004 192.168.1.150:7005 192.168.1.150:7006
注意:当出现一直提示Waiting for the cluster to join....时,需要开放连接redis客户端口和集群总线端口参考上面开放端口内容。
集群连接找的是nodes-700*.conf文件中的ip地址,如果使用内网地址创建集群分片则,该文件记录的是内网地址,同时程序取到的也是内网地址,这样操作就会报错:
检查集群情况:
/usr/local/redis-4.0/bin/redis-trib.rb check 192.168.1.150:7001
11、验证
/usr/local/redis-4.0/bin/redis-cli -c -h 192.168.1.150 -p 7001
cluster info
cluster nodes
cluster meet 192.168.1.150 7003
12、编写启动、关闭shell脚本
启动redis集群命令脚本:
vim start-all.sh
/usr/local/redis-4.0/bin/redis-server /usr/local/redis-4.0/cluster/redis-7001.conf
/usr/local/redis-4.0/bin/redis-server /usr/local/redis-4.0/cluster/redis-7002.conf
/usr/local/redis-4.0/bin/redis-server /usr/local/redis-4.0/cluster/redis-7003.conf
/usr/local/redis-4.0/bin/redis-server /usr/local/redis-4.0/cluster/redis-7004.conf
/usr/local/redis-4.0/bin/redis-server /usr/local/redis-4.0/cluster/redis-7005.conf
/usr/local/redis-4.0/bin/redis-server /usr/local/redis-4.0/cluster/redis-7006.conf
停用集群命令脚本:
vim shutdown-all.sh
/usr/local/redis-4.0/bin/redis-cli -c -h 192.168.1.150 -p 7001 shutdown
/usr/local/redis-4.0/bin/redis-cli -c -h 192.168.1.150 -p 7002 shutdown
/usr/local/redis-4.0/bin/redis-cli -c -h 192.168.1.150 -p 7003 shutdown
/usr/local/redis-4.0/bin/redis-cli -c -h 192.168.1.150 -p 7004 shutdown
/usr/local/redis-4.0/bin/redis-cli -c -h 192.168.1.150 -p 7005 shutdown
/usr/local/redis-4.0/bin/redis-cli -c -h 192.168.1.150 -p 7006 shutdown
设置权限启动
chmod 777 start-all.sh
chmod 777 shutdown -all.sh
这样就可以使用./start-all.sh、shutdown -all.sh启动和关闭了
13、Vim字符替换使用
vim 字符串全部替换 格式:
#str2全部替换str1字符
:1,$/str1/str2/g
#光标所在行中str2替换str1字符
: s/str1/str2/g
如全部替换:
:1,$ s/172.21.0.4/192.168.1.150/g
14、Java连接集群测试
public class RedisClusterTest {
public static void main(String[] args) throws IOException {
JedisCluster cluster =null;
try{
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort("192.168.1.150", 7001));
nodes.add(new HostAndPort("192.168.1.150", 7002));
nodes.add(new HostAndPort("192.168.1.150", 7003));
nodes.add(new HostAndPort("192.168.1.150", 7004));
nodes.add(new HostAndPort("192.168.1.150", 7005));
nodes.add(new HostAndPort("192.168.1.150", 7006));
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(10); //最大连接数
jedisPoolConfig.setMaxIdle(1);//最大空闲数
jedisPoolConfig.setMaxWaitMillis(10*1000);//最大等待时间,超过该时间还未获取到连接,会抛出异常
cluster = new JedisCluster(nodes, jedisPoolConfig);
cluster.set("age", "18");
System.out.println(cluster.get("age"));
}finally {
if(cluster != null){
cluster.close();
}
}
}
}