记录:441
场景:在CentOS 7.9操作系统上,使用redis-6.2.5版本,在三台机器上,安装Redis集群。
版本:Redis-6.2.5,CentOS 7.9,Linux kernel-5.4.218,gcc 9.3.1。
1.主机规划
目标:使用三台主机部署三主三从Redis集群。
每台机器分布一个主节点(Master)一个从节点(Slave)。
主机app161;IP:192.168.19.161;端口:27001,27002。
主机app162;IP:192.168.19.162;端口:27001,27002。
主机app163;IP:192.168.19.163;端口:27001,27002。
2.安装gcc
在主机app161中操作,给3台主机安装gcc。
2.1安装gcc
命令:
for host_name in app161 app162 app163;do ssh -t root@$host_name 'yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils gcc';done
2.2配置gcc
安装完成后需要配置生效。
命令:
for host_name in app161 app162 app163;do ssh -t root@$host_name "echo 'source /opt/rh/devtoolset-9/enable'>>/etc/profile; source /etc/profile";done
2.3查看版本
命令:gcc --version
3.下载Redis安装包
下载版本:redis-6.2.5.tar.gz
下载地址:http://download.redis.io/releases
下载命令:wget http://download.redis.io/releases/redis-6.2.5.tar.gz
解析:下载完成后,redis-6.2.5.tar.gz包在当前目录。
4.解压redis包到指定目录
命令:tar -zxvf /home/apps/software/redis-6.2.5.tar.gz -C /home/opt/
解析:解压到指定目录:/home/opt/redis-6.2.5
5.编译redis
操作目录:cd /home/opt/redis-6.2.5
编译命令:make -C /home/opt/redis-6.2.5/
解析:编译redis后,在redis-6.2.5/src目录下生成.o文件和redis-server等文件,生成./deps文件夹。
6.安装redis
操作目录:cd /home/opt/redis-6.2.5
安装命令:make install PREFIX=/home/opt/redis-6.2.5/
解析:把redis指定安装在/home/opt/redis-6.2.5/,则会在此目录下生成bin目录。一般默认安装到目录:/usr/local/。
7.创建集群目录
7.1集群目录规划
在集群每个节点都创建如下目录。
集群主目录:mkdir -p /home/opt/redis-cluster
节点27001目录:mkdir -p /home/opt/redis-cluster/node-27001
节点27002目录:mkdir -p /home/opt/redis-cluster/node-27002
节点27001目录:
配置目录:mkdir -p /home/opt/redis-cluster/node-27001/conf
数据目录:mkdir -p /home/opt/redis-cluster/node-27001/data
日志目录:mkdir -p /home/opt/redis-cluster/node-27001/log
运行目录:mkdir -p /home/opt/redis-cluster/node-27001/run
节点27002目录:
配置目录:mkdir -p /home/opt/redis-cluster/node-27002/conf
数据目录:mkdir -p /home/opt/redis-cluster/node-27002/data
日志目录:mkdir -p /home/opt/redis-cluster/node-27002/log
运行目录:mkdir -p /home/opt/redis-cluster/node-27002/run
7.2远程执行创建目录
脚本名称:makedir.sh
脚本内容:
#!/bin/bash
for host_name in app161 app162 app163
do
ssh -t root@$host_name 'mkdir -p /home/opt/redis-cluster/node-27001/conf; \
mkdir -p /home/opt/redis-cluster/node-27001/data;\
mkdir -p /home/opt/redis-cluster/node-27001/log;\
mkdir -p /home/opt/redis-cluster/node-27001/run;\
mkdir -p /home/opt/redis-cluster/node-27002/conf;\
mkdir -p /home/opt/redis-cluster/node-27002/data;\
mkdir -p /home/opt/redis-cluster/node-27002/log;\
mkdir -p /home/opt/redis-cluster/node-27002/run'
done
执行脚本:bash makedir.sh
8.拷贝redis.conf到节点node-27001和node-27002
在主机app161中操作。
命令:
for i in 1 2 ;do cp -r /home/opt/redis-6.2.5/redis.conf /home/opt/redis-cluster/node-2700${i}/conf/ ;done
解析:把redis.conf配置拷贝到节点node-27001和node-27002中。
9.修改redis.conf配置文件
在主机app161中操作。
9.1修改节点node-27001
修改命令:vi /home/opt/redis-cluster/node-27001/conf/redis.conf
修改内容:
port 27001
bind 192.168.19.161
daemonize yes
pidfile /home/opt/redis-cluster/node-27001/run/redis.pid
logfile "/home/opt/redis-cluster/node-27001/log/stdout.pid"
dir /home/opt/redis-cluster/node-27001/data
cluster-enabled yes
cluster-config-file nodes_27001.conf
cluster-node-timeout 15000
appendonly yes
masterauth
requirepass demo12345678
#bind 127.0.0.1 -::1
9.2修改节点node-27002
修改命令:vi /home/opt/redis-cluster/node-27002/conf/redis.conf
修改内容:
port 27002
bind 192.168.19.161
daemonize yes
pidfile /home/opt/redis-cluster/node-27002/run/redis.pid
logfile "/home/opt/redis-cluster/node-27002/log/stdout.pid"
dir /home/opt/redis-cluster/node-27002/data
cluster-enabled yes
cluster-config-file nodes_27002.conf
cluster-node-timeout 15000
appendonly yes
masterauth
requirepass demo12345678
#bind 127.0.0.1 -::1
10.拷贝主机app161的redis和redis-cluster到其它主机
在主机app161已经完成编译、安装、配置等操作,只需将app161主机redis相关内容拷贝到主机app162和app163。针对少量差异配置适配修改接口,比如修改绑定的IP。
10.1拷贝主机app161的redis和redis-cluster到其它主机
脚本名称:bash scpconfig.sh
脚本内容:
#!/bin/bash
#创建目录
for host_name in app162 app163
do
ssh -t root@${host_name} 'mkdir -p /home/opt/redis-6.2.5/'
done
#拷贝文件
for host_name in app162 app163
do
scp -r /home/opt/redis-cluster/* root@${host_name}:/home/opt/redis-cluster/
scp -r /home/opt/redis-6.2.5/* root@${host_name}:/home/opt/redis-6.2.5/
done
执行脚本:bash scpconfig.sh
10.2分别修改主机app162和app163集群配置
修改命令:vi /home/opt/redis-cluster/node-27001/conf/redis.conf
修改命令:vi /home/opt/redis-cluster/node-27002/conf/redis.conf
主机app162修改:bind 192.168.19.162
主机app163修改:bind 192.168.19.163
11.更改redis目录所有权
此步骤前安装和配置redis使用root用户操作,实际生产中一般使用普通用户启动和维护redis,因此将redis相关目录更改所有权为普通用户:learn。
脚本名称:chgown.sh
脚本内容:
#!/bin/bash
for host_name in app161 app162 app163
do
ssh -t root@${host_name} 'chown -R learn:learn /home/opt/redis-6.2.5/ ; \
chown -R learn:learn /home/opt/redis-cluster/'
done
执行脚本:bash chgown.sh
12.启动集群全部redis
12.1启动redis集群
脚本名称:redis-start.sh
脚本内容:
#!/bin/bash
for host_name in app161 app162 app163
do
ssh -t learn@${host_name} '/home/opt/redis-6.2.5/bin/redis-server /home/opt/redis-cluster/node-27001/conf/redis.conf ;\
/home/opt/redis-6.2.5/bin/redis-server /home/opt/redis-cluster/node-27002/conf/redis.conf'
done
执行脚本:bash redis-start.sh
12.2查看redis端口
脚本名称:redis-status.sh
脚本内容:
#!/bin/bash
for host_name in app161 app162 app163
do
echo "查看主机 ${host_name} 启动的节点:"
ssh -t learn@${host_name} 'ps -ef | grep 27001 ;ps -ef | grep 27002'
done
执行脚本:bash redis-status.sh
13.创建集群
在主机app161操作。
命令:
home/opt/redis-6.2.5/bin/redis-cli -a demo12345678 --cluster create 192.168.19.161:27001 192.168.19.161:27002 192.168.19.162:27001 192.168.19.162:27002 192.168.19.163:27001 192.168.19.163:27002 --cluster-replicas 1
解析:redis-cli,客户端。 -a demo12345678,访问密码。--cluster create,创建集群。--cluster-replicas 1,创建一个副本。
14.常用命令
14.1查看集群状态
命令:
/home/opt/redis-6.2.5/bin/redis-cli -h 192.168.19.161 -p 27001 -a demo12345678 cluster info
解析:redis-cli,客户端。-h,指定主机IP。-p,指定端口。-a demo12345678,指定密码。cluster info,集群信息。
14.2使用命令行登录
(1)在主机app161登录并写入数据
命令:
/home/opt/redis-6.2.5/bin/redis-cli -h 192.168.19.161 -p 27001 -a demo12345678 -c
写入数据:set D:2023060701 Hangzhou
日志信息:
[learn@app161 opt]$ /home/opt/redis-6.2.5/bin/redis-cli -h 192.168.19.161 -p 27001 -a demo12345678 -c
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.19.161:27001> set D:2023060701 Hangzhou
OK
(2)在主机app162登录并读出数据
命令:
/home/opt/redis-6.2.5/bin/redis-cli -h 192.168.19.162 -p 27001 -a demo12345678 -c
写入数据:get D:2023060701
日志信息:
[learn@app162 ~]$ /home/opt/redis-6.2.5/bin/redis-cli -h 192.168.19.162 -p 27001 -a demo12345678 -c
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.19.162:27001> get D:2023060701
-> Redirected to slot [852] located at 192.168.19.161:27001
"Hangzhou"
(2)小结
示例中,在一个节点写入数据,其它节点读出数据,集群已经正常工作。
以上,感谢。
2023年6月7日