Linux(Centos)安装Redis集群

Posted 曼莎70

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux(Centos)安装Redis集群相关的知识,希望对你有一定的参考价值。

目录名字

1、背景

redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,这里用一台机器部署6个redis实例,一共三组一主一从集群。

2、准备3个节点

192.168.0.186
192.168.0.187
192.168.0.188
且每个节点,都配置2个端口 7001 7002 。

3、http://download.redis.io/releases/ 下载需要的版本

我下载的5.0.14。
上传到每个节点的 /opt/software 或者使用wget的方式。

4、解压:tar -zxvf redis-5.0.14.tar.gz -C /opt/module/

5、然后以hadoop104为例开始安装配置。

1)首先进入 redis目录,创建7001 7002目录

2)分别创建两个7001和7002的配置文件目录conf,日志目录logs,数据存储目录data,如下命令

mkdir conf logs data

直接在7001/下面,创建 conf logs data 
直接在7002/下面,创建 conf logs data
3)执行以下命令复制配置redis.conf文件并编辑,将这个redis.conf放到 conf/目录下。

cp redis.conf ./7001/conf
vim ./7001/conf/redis.conf

这里的是可能需要修改的哈。。。

protected-mode no
port 7001    # redis监听端口
daemonize yes  #使用 yes 启用守护进程(redis后台运行)

pidfile /var/run/redis_7001.pid   #当 Redis 以守护进程方式运行时,Redis 默认会把 pid(pid进程文件名,以端口号命名)  # pid文件,**运行多个实例时,需要指定不同的pid文件

logfile /opt/module/redis-5.0.14/7001/logs/redis-7001.log #日志目录(日志文件名称,以端口号为目录来区分) # 日志文件位置,运行多实例时,需要修改不同的端口。

dir /opt/module/redis-5.0.14/7001/data #本地数据库存放目录(数据文件存放地址,以端口号为目录名来区分)(#存放数据的目录)
#redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。

appendonly yes #开启AOF(每次更新操作后进行日志记录,默认:no)(启动AOF增量持久化策略)

# 开启redis-cluster集群
cluster-enabled yes

#集群配置文件,由redis自动更新,不需要手动配置,**运行多实例时请注修改为对应端口**
#每个实例还包含存储此节点配置的文件的路径
cluster-config-file nodes-7001.conf  # 保存节点配置,自动创建,自动更新(配置每个节点的配置文件,同样以端口号为名称)

# 绑定服务器域名或IP地址(本绑定服务器域名或IP地址)(本机ip,使得三台服务器可相互访问)
bind 192.168.0.188

# 集群超时时间,节点超过这个时间没反应就断定是宕机
#集群节点超时时间,即集群中主从节点断开连接时间阈值,超过该值则认为主节点不可以,从节点将有可能转为master
cluster-node-timeout 15000


# AOF 自动重写
no-appendfsync-on-rewrite yes
以下的配置应该默认值就是这样的,不需要修改,根据自己需求调整:

# 日志记录级别,共4个级别:debug、verbose、notice(默认)、warning
loglevel notice
# 通过upstart和systemd管理Redis守护进程,与具体的操作系统相关的
supervised no
# 多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save 900 1
save 300 10
save 60 10000
# 本地数据库的名字
dbfilename dump.rdb
# 存储到本地文件开启压缩,默认:yes
rdbcompression yes
# 更新日志文件名
appendfilename "appendonly.aof"
# 指定更新日志条件:
# # no: 等操作系统进行数据缓存同步到磁盘(快)
# # always: 每次更新操作后手动调用 fsync() 将数据写磁盘(慢,安全)
# # everysec: 每秒同步一次(折中,默认值)
# appendfsync always
appendfsync everysec
# appendfsync no

# 密码暂未设置,给出配置
# # 当 master 服务设置了密码保护时,slav 服务连接 master 的密码
# masterauth <master-password>

# 连接密码,客户端需使用AUTH <password>命令连接
# requirepass foobared

#重写百分比
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
4)执行 cp redis.conf …/7002/conf/,把7001目录下的redis.conf配置文件复制到7002目录下,然后执行sed -i ‘s/7001/7002/g’ redis.conf 将7001全部替换成7002即可。

6、剩下的两台服务器依照上面一样操作即可…

一样操作hadoop102和hadoop103。

7、编译安装的Redis

1)命令
1、首先安装依赖,三台都安装。
yum -y install gcc gcc-c++ wget

2、进入/opt/module/redis-5.0.14,开始编译安装
make && make PREFIX=/usr/local/redis install    (Prefix指定目录)
2)编译安装后应该如图所示(三个节点都应该是一样哈)

3)分别查看三台机器是否编译安装成功,执行 echo $? ,如果输出0 表示redis安装成功了。

4)配置环境变量,在 vim /etc/profile.d/my_env.sh 文件最后添加如下内容,并且通过xsync同步到其他2台机器上。(二者选一即可)
vim /etc/profile.d/my_env.sh
添加上下面的内容

###### redis env ######
export REDIS_HOME=/usr/local/redis
export PATH=$PATH:$REDIS_HOME/bin

然后加载:source /etc/profile.d/my_env.sh
然后同步:xsync /etc/profile.d/my_env.sh

注意:这种配置环境变量,没办法在任意目录下直接使用 redis-cli 和 redis-server 命令。
所以我又多在 etc/profile 配置了。就可以直接使用了。

根据自己使用,可以只设置下面这个环境变量。。

vim /etc/profile
###### redis env ######
export REDIS_HOME=/usr/local/redis
export PATH=$PATH:$REDIS_HOME/bin


source /etc/profile   加载
xsync /etc/profile  同步到其他节点
5)分别启动三台机器上的Redis。均成功。

hadoop102启动命令以及示例。

[root@hadoop102 redis-5.0.14]# redis-server /opt/module/redis-5.0.14/7001/conf/redis.conf
[root@hadoop102 redis-5.0.14]# redis-server /opt/module/redis-5.0.14/7002/conf/redis.conf
[root@hadoop102 redis-5.0.14]# ps -ef | grep redis
root       8895      1  0 15:23 ?        00:00:00 redis-server 192.168.0.186:7001 [cluster]
root       8900      1  0 15:23 ?        00:00:00 redis-server 192.168.0.186:7002 [cluster]
root       8905   8350  0 15:23 pts/2    00:00:00 grep --color=auto redis

注意:redis.conf配置文件中,注释要写对,不然会报错

8、创建集群(在控制节点上面操作即可,剩余机器不用操作)

1)我选择hadoop102作为控制节点哈。

三台服务器,启动6个实例,形成三主三从,其中存储相同数据的主从节点不能落在同一台机器上,目的是防止部署redis的虚拟机宕机从而造成主从节点全部失效,所以为了使用主从节点不落在同一台机器上,使用如下命令:每台ip+port交叉,执行命令后出现如下图所示表示redis集群创建成功。

[root@hadoop102 redis-5.0.14]# redis-cli --cluster create --cluster-replicas 1 192.168.0.186:7001 192.168.0.187:7002 192.168.0.187:7001 192.168.0.188:7002 192.168.0.188:7001 192.168.0.186:7002

集群参数解释:
-a redis:redis 是密码 根据各自情况配置
cluster-replicas 1:表示希望为集群中的每个主节点创建一个从节点(一主一从)
cluster-replicas 2:表示希望为集群中的每个主节点创建两个从节点(一主二从)
我们采用的是cluster-replicas 1 三主三从
2)成功如图所示:

3)查看我们刚创建集群的状态,如下命令:(在3台集群中的任意一台机器查看任意节点都一样,我在第一台机器上查看,会带出所有的节点信息)
[root@hadoop102 redis-5.0.14]# redis-cli --cluster check 192.168.0.186:7001

9、测试集群

1)实践:在集群中的任意一台测试都可以。
在102上的7001设置key:
[root@hadoop102 redis-5.0.14]# redis-cli -c -h 192.168.0.186 -p 7001
192.168.0.186:7001> set name 7088
-> Redirected to slot [5798] located at 192.168.0.187:7002
OK


在104上的7002获取key
[root@hadoop104 redis-5.0.14]# redis-cli -c -h 192.168.0.188 -p 7002
192.168.0.188:7002> get name
-> Redirected to slot [5798] located at 192.168.0.187:7002
"7088"
192.168.0.187:7002> 

说明我们测试的数据在集群之间同步完成了。
2)常用命令
redis-cli -a redis -h ip -p 端口 -c
登录集群客户端,-c  标识以集群方式登录 cluster info
-a 是设置集群密码,可以不设置

cluster info 查看集群健康状态
cluster nodes 查看节点健康状态

10、设置开机自启动,三台分别都成功。

1)由于咱们使用的虚拟机,不用的时候可以直接关机,避免一直占用着系统的资源。

当重启虚拟机的时候,如果你不嫌繁琐,可以登录到虚拟机里,直接运行 redis-server 命令启动服务。
更为优雅的方式,当然是开机后自动启动 Redis 服务,这也是生产环境上,研发或运维都必须要关注的,服务器重启,对应的服务也要跟着自动启动,而不需要人为手动干预了。
进入 /etc/init.d/ 目录,创建并编辑 redis 文件:

vim redis

#!/bin/bash
#chkconfig: 22345 10 90
#description: Start and Stop redis

IP=`ip addr | grep 'state UP' -A2 | tail -n1 | awk 'print $2' | cut -f1 -d '/'`

# 端口,按照实际端口来
REDISPORT_1=7001
REDISPORT_2=7002

# 多个可以另外设置  redis_$REDISPORT 使用端口号作为pid文件的名称,改成你本地的路径
PIDFILE_1=/var/run/redis_7001.pid
PIDFILE_2=/var/run/redis_7002.pid
# 这个是redis的配置文件,改成你本地的路径
CONF_1="/opt/module/redis-5.0.14/7001/conf/redis.conf"
CONF_2="/opt/module/redis-5.0.14/7002/conf/redis.conf"

# 密码,不一定要用
# PASS="redis123"    


# 服务器启动,改成你本地的路径
EXEC=/usr/local/redis/bin/redis-server 
# 客户端启动,改成你本地的路径
CLIEXEC=/usr/local/redis/bin/redis-cli

case "$1" in
    start)
        if [ -f $PIDFILE_1 ];then
            echo "$PIDFILE_1 exists,process is already running or crashed"
        else
            echo "Starting Redis server... $CONF_1"
            $EXEC $CONF_1
        fi
        if [ -f $PIDFILE_2 ];then
            echo "$PIDFILE_2 exists,process is already running or crashed"
        else
            echo "Starting Redis server... $CONF_2"
            $EXEC $CONF_2
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE_1 ];then
            echo "$PIDFILE_1 does not exist,process is not running"
        else
            PID=$(cat $PIDFILE_1)
            echo "Stopping..."
            $CLIEXEC -h $IP -p $REDISPORT_1 shutdown
            while [ -x /proc/$PID ]
                do
                    echo "Waiting for Redis to shutdown..."
                    sleep 1
                done
                echo "Redis stopped $CONF_1"
        fi

        if [ ! -f $PIDFILE_2 ];then
            echo "$PIDFILE_2 does not exist,process is not running"
        else
            PID=$(cat $PIDFILE_2)
            echo "Stopping..."
            $CLIEXEC -h $IP -p $REDISPORT_2 shutdown
            while [ -x /proc/$PID ]
                do
                    echo "Waiting for Redis to shutdown..."
                    sleep 1
                done
                echo "Redis stopped $CONF_2"
        fi
        ;;
    restart)
        "$0" stop
        sleep 3
        "$0" start
        ;;
    *)
       echo "Please use start or stop or restart as first argument"
        ;;
esac

2)Redis 文件修改为可执行文件:

chmod 777 redis

3)添加到系统服务列表:
# 将 /etc/init.d/redis 添加到系统服务列表
chkconfig --add redis

# 设置开机自启动
chkconfig redis on

# 查看所有注册的脚本文件
chkconfig --list   

4)优雅的启动停止方式
# 启动服务
service redis start
# 停止服务
service redis stop
# 重启服务
service redis restart

以上是关于Linux(Centos)安装Redis集群的主要内容,如果未能解决你的问题,请参考以下文章

Linux(Centos)安装Redis集群

Linux(CentOS7) 环境搭建 redis5.0.8 集群

Linux aliyun ECS CentOS8 服务器安装Redis 部署集群 ,JDK安装与Tomcat配置

Linux(Centos7)下redis5集群分布式搭建

Linux离线安装redis集群

如何在suse linux中安装redis集群