redis单节点与集群的搭建

1.redis节点搭建

##下载redis

cd /usr/local
wget http://download.redis.io/releases/redis-4.0.11.tar.gz
tar -zxvf redis-4.0.11.tar.gz
mv redis-4.0.11 redis && cd redis

##安装redis到指定目录/opt/beh/core/redis/

mkdir -p /opt/beh/core/
make PREFIX=/opt/beh/core/redis/ install        
cp ./redis.conf  /opt/beh/core/redis/bin/

##启动redis

cd /opt/beh/core/redis/bin/
./redis-server          

可能出现告警:

4543:M 11 Jan 20:32:07.177 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
4543:M 11 Jan 20:32:07.177 # Server initialized
4543:M 11 Jan 20:32:07.177 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
4543:M 11 Jan 20:32:07.177 * Ready to accept connections

根据警告提示进行修改:

echo  1024 > /proc/sys/net/core/somaxconn
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local
chmod +x /etc/rc.local
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl vm.overcommit_memory=1

##修改配置,允许后台执行

vi redis.conf +136                             ##设置daemonize为YES

daemonize YES

##后台启动redis

##后台启动redis
./redis-server redis.conf


##查看运行进程
ps -ef|grep redis

                     
##进入客户端
./redis-cli

##当输入ping命令时,返回PONG就表示连接正常

 

 

2.redis集群搭建

##注意:

redis集群管理工具redis-trib.rb依赖ruby环境

##安装ruby环境

yum -y install ruby rubygems

##安装ruby和redis的接口程序

wget https://rubygems.org/downloads/redis-3.0.0.gem

gem install redis-3.0.0.gem

##用一台机器不同目录下配置不同端口代替集群模式:

mkdir /usr/local/redis-cluster && cd /usr/local/redis-cluster

for i in 7001 7002 7003 7004 7005 7006;do
mkdir $i
cp -d /opt/beh/core/redis/bin/* ./$i
rm -rf ./$i/dump.rdb
rm -rf ./$i/nodes.conf
sed -i 's/# cluster-enabled yes/cluster-enabled yes/g' ./$i/redis.conf
sed -i "s/port 6379/port $i/g" ./$i/redis.conf
done

##将redis源码目录src下的redis-trib.rb拷贝到redis-cluster目录下:

cp /usr/local/redis/src/redis-trib.rb /usr/local/redis-cluster/

##使用后台启动的方式启动每个redis:

for i in 7001 7002 7003 7004 7005 7006;do
cd $i 
./redis-server ./redis.conf
cd ..
done

##创建redis集群:

./redis-trib.rb  create --replicas 1  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 127.0.0.1:7006

##三个节点时:

./redis-trib.rb create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003

 

如果执行错误:

[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

解决方法

先停掉该节点的redis进程;然后删除生成的配置文件nodes.conf,dump.rdb;再启动停掉的进程;再执行集群的创建命令;

##使用redis-cli命令进入集群环境;其中-c表示要链接到集群 必须使用这个参数

./7001/redis-cli -c -p 7001    
ping
cluster info                      ##查看集群信息
cluster nodes                     ##查看集群节点信息

a.集群添加master主节点

cd /usr/local/redis-cluster
mkdir 7007
cp -rd 7006/* 7007
cd 7007
rm -rf dump.rdb  nodes.conf           ##删除7006中复制过来的这两个文件,以免后面操作会报错
vi redis.conf                         ##修改7007对应的端口为7007		
./redis-server ./redis.conf           ##启动7007
cd ..
./redis-trib.rb add-node 127.0.0.1:7007 127.0.0.1:7001	    ##添加7007到集群
cd /usr/local/redis-cluster
./7001/redis-cli -c -p 7001                                 ##进入集群查看信息
cluster info

cluster nodes

##hash槽重新分配

从上图可以看到7007还没有分配槽

1)连接上集群

./redis-trib.rb reshard 127.0.0.1:7001          ##连接集群中任意一个可用节点都行

2)输入要分配的槽数量

输入 500  表示要分配500个槽

3)输入接收槽的结点id

这里准备给7007分配槽,通过cluster nodes查看7007节id

输入其id:80a0d6b1053cea63ad9968eb6ee06310cd06b567

4)输入源节点id

这里输入all

5)最后输入yes,开始移动槽到目标结点id

分配成功后可以查看对应的信息

./7001/redis-cli -c -p 7001 

cluster nodes

 

b.集群添加slave从节点

##首先按照7007方式添加节点7008

cd /usr/local/redis-cluster
mkdir 7008
cp -rd 7007/* 7008
cd 7008
rm -rf dump.rdb  nodes.conf       
sed -i "s/port 7007/port 7008/g" redis.conf                        	
./redis-server ./redis.conf         
cd ..

##将7008作为7007的从节点。

##命令格式(master id可通过cluster nodes命令查看)

./redis-trib.rb add-node --slave --master-id 主节点id 从节点ip:端口 集群已存在节点ip:端口
./redis-trib.rb add-node --slave --master-id 80a0d6b1053cea63ad9968eb6ee06310cd06b567 127.0.0.1:7008 127.0.0.1:7001

./7001/redis-cli -c -p 7001 
cluster nodes   

 

c.删除节点

命令格式:

 ./redis-trib.rb del-node 节点的ip:端口  节点id

 ./redis-trib.rb del-node 127.0.0.1:7008  44ea212538aac5ae7fff149ac3a7d10fea8c4916

删除7008直接删除;删除7007会报错,需要将该结点占用的hash槽分配出去(参考hash槽重新分配)

 

d.设置redis服务(使用service redisd start启动)

##设置端口6379的redis启动/停止

mkdir /etc/redis
cp /opt/beh/core/redis/bin/redis.conf /etc/redis/6379.conf  

##拷贝redis源码包下util文件夹中redis_init_script并重命名为redisd

cp /usr/local/redis/utils/redis_init_script /etc/init.d/redisd   

##修改redisd文件

vi /etc/init.d/redisd +15

EXEC=/opt/beh/core/redis/bin/redis-server
CLIEXEC=/opt/beh/core/redis/bin/redis-cli

chkconfig redisd on       ##设置为开机自启动

service redisd start       ##启动服务

service redisd stop       ##关闭服务

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值