【Redis系列三】Redis集群模式安装-使用-常见问题处理

安装

官方:将Redis做成一个服务 参考:Redis Quick Start

Centos下Redis 的安装

# 在/usr/local/下执行
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -zxvf redis-5.0.0.tar.gz
# yum安装gcc依赖
yum install gcc -y 
mv redis-5.0.0 redis
cd redis 
# 编译安装
make MALLOC=libc
cd src && make install 
# 此时/usr/local/redis/src目录下安装生成的可执行文件复制到了/usr/local/bin目录下,新建/usr/local/redis/bin,再将这几个可执行文件移动到/usr/local/redis/bin

可执行文件

安装目录结构

cd /usr/local/redis
.
├── bin  # 编译安装指定目录后自动生成目录及文件
│   ├── redis-benchmark
│   ├── redis-check-aof
│   ├── redis-check-rdb
│   ├── redis-cli
│   ├── redis-sentinel -> redis-server
│   └── redis-server
├── conf # 自己建立的存储配置文件的目录及自己创建的单个Redis配置文件
│   ├── 7001.conf
│   ├── 7002.conf
│   ├── 7003.conf
│   ├── 7004.conf
│   ├── ...
└── data # 自己建立的存储Redis数据的目录及单个Redis服务数据存储目录
    └── 7001
	│	├── appendonly.aof
	│	├── dump7001.rdb
	│	├── dump.rdb
	│	└── nodes-7001.conf 
	└── 7002
		├── appendonly.aof
		├── dump7002.rdb
		├── dump.rdb
		└── nodes-7002.conf 
		...

设置Redis开机自启动

cp utils/redis_init_script /etc/init.d/redis_6379
vim /etc/init.d/redis_6379

/etc/init.d/redis_6379

#!/bin/sh
# chkconfig 2345 90 25                         # linux 开机启动设置 2345 运行级别 90 启动优先级(参考 memcached head /etc/rc.d/rc3.d/S90memcached ) 25 关闭优先级 (参考memcached)
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

### BEGIN INIT INFO
# Provides:     redis_6379
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO

REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server         # 修改为自己的可执行文件所在目录
CLIEXEC=/usr/local/redis/bin/redis-cli         # 修改为自己的可执行文件所在目录

PIDFILE=/var/run/redis_${REDISPORT}.pid        # 默认就好
CONF="/usr/local/redis/conf/${REDISPORT}.conf" # 修改为自己的配置文件存放目录
···省略···
esac

开始修改redis.conf

cp redis.conf /usr/local/redis/conf/6379.conf (修改成自己定义的目录。参考上述目录结构 redis.conf 在你们redis解压目录中的src目录下)
mkdir /usr/local/redis/data/6379 (修改成自己定义的目录。
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "/var/log/redis_6379.log"
dir /usr/local/redis/data/6379

使用以下命令将新的Redis init脚本添加到所有默认的运行级别

# ubuntu
sudo update-rc.d redis_6379 defaults
# centos
chkconfig --add redis_6379

running with:

/etc/init.d/redis_6379 start

配置环境变量

# 配置环境变量,使得可以在任意路径输redis-server redis-cli等命令
vim /etc/profile
最后一行添加 export PATH=$PATH:/usr/local/redis/bin
source /etc/profile

Redis配置集群模式

准备工作:需要先安装 ruby gem

# 1 rvm安装 更换源
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -L get.rvm.io | bash -s stable
或 curl -sSL https://get.rvm.io | bash -s stable
usermod -a root -G rvm
source /etc/profile.d/rvm.sh
# 关shell 窗口,重新打开
rvm user gemsets
echo "ruby_url=https://cache.ruby-china.org/pub/ruby" > ~/.rvm/user/db


# 2 通过rvm安装 ruby、gem
rvm list known
# install ruby from internet to: /usr/local/rvm/rubies/ruby-2.4.0 by rvm
rvm install 2.4.0
rvm use 2.4.0
rvm remove 2.0.0
ruby --version
gem -v


# 3 gem 升级、更换源、通过gem安装redis
gem install rubygems-update
gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem sources -l 
gem install redis

准备工作完成,开始Redis配置集群模式

cd /usr/local/redis/conf
cp 6379.conf redis.conf.default  # 用作集群其他配置文件的蓝本
修改 vim redis.conf.default
bind 192.168.2.123  # 绑定当前机器 IP, 注释掉 bind 127.0.0.1
cluster-enabled yes # 取消注释,启动集群模式
cluster-config-file nodes-6379.conf # 取消注释,修改为 /usr/local/redis/data/6379/nodes-6379.conf  (如果遇到需要重新建立集群,不将此项修改为指定路径而和启动配置文件放在一起,会导致建立集群时,删除重建conf 文件)
cluster-node-timeout 15000 # 取消注释
appendonly yes # 将 no 修改为 yes

创建配置文件

cd /usr/local/redis/conf
echo 9001.conf 9002.conf 9003.conf 9004.conf 9005.conf 9006.conf | xargs -n 1 cp -v redis.conf.default
# 分别执行
sed -i 's/6379/9001/g'  9001.conf 
sed -i 's/6379/9002/g'  9002.conf 
sed -i 's/6379/9003/g'  9003.conf 
sed -i 's/6379/9004/g'  9004.conf 
sed -i 's/6379/9005/g'  9005.conf 
sed -i 's/6379/9006/g'  9006.conf 
# 检查配置是否正确
cat 9001.conf |grep 9001

创建数据存储文件

cd /usr/local/redis/data
mkdir -p 9001 9002 9003 9004 9005 9006
# 后期重新建立集群需要删除该文件件下的文件,用于重建集群,所以,删除命令也写一下
# rm -rf 900*/*

启动Redis cluster节点端口

/usr/local/redis/bin/redis-server /usr/local/redis/conf/9001.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/9002.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/9003.conf 
/usr/local/redis/bin/redis-server /usr/local/redis/conf/9004.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/9005.conf
/usr/local/redis/bin/redis-server /usr/local/redis/conf/9006.conf

ps -ef | grep redis

创建集群

–cluster 集群模式
–cluster-replicas 1 主从

[root@nexus bin] redis-cli --cluster create 192.168.2.123:7001 192.168.2.123:7002 192.168.2.123:7003 192.168.2.123:7004 192.168.2.123:7005 192.168.2.123:7006 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: acc302009da55751659a58e6c9b9d48173b256ec 127.0.0.1:7001
   slots:[0-5460] (5461 slots) master
M: 9bba116255fb9f547b7d2e5e3d1d0f1ee706e789 127.0.0.1:7002
   slots:[5461-10922] (5462 slots) master
M: b67e8e7402aa0c9c7a136f4ae74a810dce17db2e 127.0.0.1:7003
   slots:[10923-16383] (5461 slots) master
S: 4d05eba6c967005618dfb60db4ea301ac7891f57 127.0.0.1:7004
   replicates 9bba116255fb9f547b7d2e5e3d1d0f1ee706e789
S: 4f49d29d5c58bf989ca7c855945db998d25615fb 127.0.0.1:7005
   replicates b67e8e7402aa0c9c7a136f4ae74a810dce17db2e
S: 6320ec8b4edd305b769c5b024cbdf9c7ffaa239d 127.0.0.1:7006
   replicates acc302009da55751659a58e6c9b9d48173b256ec
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
...
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: acc302009da55751659a58e6c9b9d48173b256ec 127.0.0.1:7001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 9bba116255fb9f547b7d2e5e3d1d0f1ee706e789 127.0.0.1:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 4d05eba6c967005618dfb60db4ea301ac7891f57 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 9bba116255fb9f547b7d2e5e3d1d0f1ee706e789
S: 6320ec8b4edd305b769c5b024cbdf9c7ffaa239d 127.0.0.1:7006
   slots: (0 slots) slave
   replicates acc302009da55751659a58e6c9b9d48173b256ec
M: b67e8e7402aa0c9c7a136f4ae74a810dce17db2e 127.0.0.1:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 4f49d29d5c58bf989ca7c855945db998d25615fb 127.0.0.1:7005
   slots: (0 slots) slave
   replicates b67e8e7402aa0c9c7a136f4ae74a810dce17db2e
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

手动指定master/slave
redis 5.0中使用 redis-cli 添加cluster node 并 reshard

/var/redis/cluster/7000/bin/redis-server 7000/config/redis.conf
/var/redis/cluster/7001/bin/redis-server 7001/config/redis.conf

/var/redis/cluster/7000/bin/redis-cli --cluster create --cluster-replicas 0 10.101.2.201:7000 10.101.2.202:7000 10.101.2.203:7000 -a Oxxxxxx

/var/redis/cluster/7000/bin/redis-cli --cluster add-node 10.101.2.201:7001 10.101.2.201:7000 --cluster-slave --cluster-master-id 14de30503287b1dc4b36f1ff26d43703aba7957d  -a xxxxiNj

/var/redis/cluster/7000/bin/redis-cli --cluster add-node 10.101.2.202:7001 10.101.2.202:7000 --cluster-slave --cluster-master-id e0a52ac9807a92639ed262abe7c3a6a1c4d2a412 -a xxxxiNj

/var/redis/cluster/7000/bin/redis-cli --cluster add-node 10.101.2.203:7001 10.101.2.203:7000 --cluster-slave --cluster-master-id a2cbdf758fb8bc5ff86b86c6dd746d10f1c3ec5c -a xxxxiNj

测试:进入redis写数据

[root@nexus bin] redis-cli -c -h 192.168.2.123 -p 9001 # -c 一定要加-c集群模式 -a password

[root@nexus bin] redis-cli -c -p 7001
127.0.0.1:7001> set k1 v1
-> Redirected to slot [12706] located at 127.0.0.1:7003
OK
127.0.0.1:7003> set hello world
-> Redirected to slot [866] located at 127.0.0.1:7001
OK
127.0.0.1:7001> get hello
"world"
127.0.0.1:7001> get k1
-> Redirected to slot [12706] located at 127.0.0.1:7003
"v1"
127.0.0.1:7003> get k1
"v1"
127.0.0.1:7003> cluster info
127.0.0.1:7003> cluster nodes

删除旧集群,新建集群

1 rm -rf 删除 redis/data/7001中旧集群的数据
2 修改好conf 配置文件
3 将密码设置为空,然后执行redis-server 9001.conf ... 9006.conf # 依次起端口
4 redis-cli --cluster create 192.168.2.123:7001 192.168.2.123:7002 192.168.2.123:7003 192.168.2.123:7004 192.168.2.123:7005 192.168.2.123:7006 --cluster-replicas 1 # 创建集群
5 然后依次进入各个节点重新设置新集群的密码,具体参考下边设置Redis集群密码

设置Redis集群密码

[root@nexus bin] redis-cli -c -p 7001 
> config set masterauth 12xx56
> config set requirepass 12xx56
> auth  12xx56
> config rewrite

分别使用 redis-cli -c -p 7002 ... redis-cli -c -p 7006 去设置各个节点的密码,各个节点密码保存一致
# 下面这步可能不需要
find / -name *client.rb
找到 /root/.rvm/gems/ruby-2.4.0/gems/redis-4.2.3/lib/redis/client.rb
vim /root/.rvm/gems/ruby-2.4.0/gems/redis-4.2.3/lib/redis/client.rb
password 设置为各个节点的密码12xx56

Redis启动、停止方式

yum 安装
/etc/init.d/redis-server stop
/etc/init.d/redis-server start
/etc/init.d/redis-server restart

源码安装 三种方式
sudo /etc/init.d/redis_6379 start
/usr/local/redis/bin/redis-server redis.conf  # 注意此处缺省:配置文件路径
redis-cli -h 127.0.0.1 -p 6379 shutdown
注:如果只是停止本地redis 请执行: redis-cli shutdown

强制终止
kill -9 进程号
pkill redis

参考文献
redis.io/topics/quickstart
必须是全网最全的Redis集群搭建教程
REDIS集群模式部署
Redis 集群搭建详细指南
修改密码

使用

Redis常用命令

1.打开一个 cmd 窗口 使用cd命令切换目录到 D:\Redis-x64-3.2.100 运行 redis-server.exe redis.windows.conf ,这相当于开启redis服务,redis.windows.conf 可以省略
2.redis服务启动后,这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。

切换到redis目录下运行 redis-cli.exe -c -h 127.0.0.1 -p 6379 -a password,如果没有设置密码就不写。

# -c 集群模式cluster
./redis-cli -c -h 127.0.0.1 -p 6379 -a password
# 设置键值对: 
set key Value
# 取出键值对: 
get key 
# 查所有数据
keys *  
# get hash
hgetall key_name
hdel
xinfo
xrange
# 查某个key对应value的type
type key_name
# 清空
flushall

Redis集群常用命令

Redis集群常用命令

cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。

redis 实践 常见问题处理

[root@ytj-sdn-control-10e101e8e60 secure]# /var/redis/cluster/7001/bin/redis-cli -c -h 10.10.80.60 -p 7001 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
10.10.80.60:7001> cluster nodes
f31ed535191cc5218dc40790765ba446105bff3b 10.10.80.61:7000@17000 slave fc1e413f2b0dfbeac12d6496d2684d8d8344eb38 0 1670393318077 7 connected
1170c683afe9f92ef5ab873e4a3a4ff1be57cda9 10.10.80.61:7001@17001 slave bcd451bd5201b7a7c3c1f8f8d2b677cbc19e1a9d 0 1670393320081 14 connected
bcd451bd5201b7a7c3c1f8f8d2b677cbc19e1a9d :0@0 master,noaddr - 1670393000615 1670393000588 14 disconnected 10923-16383
54d5925f5be51f39f1e35c3d18b31376237a3b72 10.10.80.60:7000@17000 master,fail? - 1670393000615 1670393000588 1 disconnected
cfd4034963e193b675d840b5a52e3e6df7496467 :0@0 master,noaddr - 1670393000615 1670393000588 15 disconnected 0-5460
fc1e413f2b0dfbeac12d6496d2684d8d8344eb38 10.10.80.60:7001@17001 myself,master - 0 1670393318000 7 connected 5461-10922

redis从节点slave,fail,noaddr问题处理

redis从节点slave,fail,noaddr问题处理

redis failover

redis高可用实践之FAILOVER

CLUSTER FAILOVER 正常的主从切换
CLUSTER FAILOVER FORCE 主节点宕机时快速选主
CLUSTER FAILOVER TAKEOVER 半数master故障时,强制更新快速止损恢复服务

redis 慢查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值