分布式系统-高级篇-CentOS7-redis集群装配
1、安装前准备
安装redis集群前,准备两台centOS 7 主机,A主机IP地址:192.168.83.136,B主机IP地址:192.168.83.137;在A、B主机分布配置三个redis节点;A主机redis三节点端口为7000,7001,7002;B主机redis三节点端口为:7003,7004,7005.
2、创建节点
系统redis安装在/usr/local/目录下。
1、创建redis_cluster文件夹
在/usr/local/redis3.2/文件夹下创建 redis_cluster文件夹
$:mkdir redis_cluster
2、创建节点
$:mkdir 7000 7001 7002 //分别代表三个节点 其对应端口 7000 7001 7002
3、创建节点redis.conf配置
创建对应节点的redis.conf 配置,命名为端口号
$:cp /usr/local/redis-3.2/redis.conf usr/local/redis-3.2/redis_cluster/7000/
重命名
$: Mv reids.conf 7000.conf
4、修改节点redis.conf配置
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7002,7003
port 7000 //端口7000,7002,7003
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7000.conf //集群的配置 配置文件首次启动自动生成
cluster-node-timeout 5000 //请求超时 设置5秒够了
appendonly yes //aof日志开启 有需要就开启,它会每次写操作都记录一条日志
备注:以上红色端口修改成对应的节点端口号,按如上操作redis的节点配置也完成,如下配置开启启动
3、配置开启配置 redis7000,redis7001,redis7002,
1、创建个节点启动文件
在/etc/init.d 文件目录下创建三个节点的启动配置文件,命名为redis7000,redis7001,redis7002。
$: vi /etc/init.d/redis7000
2、启动文件配置项目
Redis7000启动文件配置内容:
#!/bin/sh
# chkconfig: 2345 90 10
# description: Start and Stop redis7000
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDISPORT=7000
EXEC=/usr/local/redis3.2/src/redis-server
CLIEXEC=/usr/local/redis3.2/src/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis3.2/redis_cluster/7000/${REDISPORT}.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
说明:注意修改以上内容中的红色部分
3、配置开启启动
更改权限
chmod +x /etc/init.d/redis7000
设置开启启动
chkconfig redis7000 on
4、手动启动redis
service redis7000 start
service redis7001 start
service redis7002 start
4、打开防火墙
1、打开防火墙:
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=17000/tcp --permanent
firewall-cmd --zone=public --add-port=7001/tcp --permanent
firewall-cmd --zone=public --add-port=17001/tcp --permanent
firewall-cmd --zone=public --add-port=7002/tcp --permanent
firewall-cmd --zone=public --add-port=17002/tcp --permanent
2、重启防火墙
systemctl restart firewalld.service
5、创建集群
前面已经准备好了搭建集群的redis节点,接下来我们要把这些节点都串连起来搭建集群。官方提供了一个工具:redis-trib.rb(/usr/local/redis-3.2.1/src/redis-trib.rb) 看后缀就知道这鸟东西不能直接执行,它是用ruby写的一个程序,所以我们还得安装ruby.
安装ruby
1、安装ruby
$:yum -y install ruby ruby-devel rubygems rpm-build
2、安装redis接口
再用 gem 这个命令来安装 redis接口 gem是ruby的一个工具包.
$:gem install redis //等一会儿就好了这个有点慢
3、创建集群
进入/usr/local/redis3.2/src/目录,执行如下命令
$:./redis-trib.rb create --replicas 1 192.168.83.136:7000 192.168.83.136:7001 192.168.83.136:7002 192.168.83.137:7003 192.168.83.137:7004 192.168.83.137:7005
此处忘了截图
6、Redis集群操作命令
1、客户端连接命令
单个客户端连接命令,此命令必须在对应的redis安装目录src下
$: ./redis-cli -h 192.168.83.136 -p 7000
集群客户端连接命令
$: ./redis-cli c -h 192.168.83.136 -p 7000
2、集群命令
3、集群状态
cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。
cluster forget <node_id> :从集群中移除 node_id 指定的节点。列如:
CLUSTER FORGET 2ae88288b7bb1a13b959de9abf0c29e5aa185d15
cluster meet <ip> <port> :将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。列如:CLUSTER MEET 192.168.83.137 7004
cluster replicate <node_id> :将当前节点设置为 node_id 指定的节点的从节点。
cluster saveconfig :将节点的配置文件保存到硬盘里面。
1、槽(slot)
cluster addslots <slot> [slot ...] :将一个或多个槽( slot)指派( assign)给当前节点。
cluster delslots <slot> [slot ...] :移除一个或多个槽对当前节点的指派。
cluster flushslots :移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot <slot> node <node_id> :将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给
另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
cluster setslot <slot> migrating <node_id> :将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot <slot> importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot <slot> stable :取消对槽 slot 的导入( import)或者迁移( migrate)。
2、键
cluster keyslot <key> :计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot <slot> :返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot <slot> <count> :返回 count 个 slot 槽中的键