目录
redis从5开始已经废弃了使用ruby脚本创建配置,而将创建配置文件直接集成在redis-cli里面
生产环境建议采用3master + 3slave总共6台独立服务器架构
主机规划
操作系统 | IP | 主机名 | CPU/内存 | 版本 |
---|---|---|---|---|
麒麟信安3.3 | 10.0.0.31 | redis1 | 2核+2G | 6.0.19 |
麒麟信安3.3 | 10.0.0.32 | redis2 | 2核+2G | 6.0.19 |
麒麟信安3.3 | 10.0.0.33 | redis3 | 2核+2G | 6.0.19 |
麒麟信安3.3 | 10.0.0.34 | redis4 | 2核+2G | 6.0.19 |
麒麟信安3.3 | 10.0.0.35 | redis5 | 2核+2G | 6.0.19 |
麒麟信安3.3 | 10.0.0.36 | redis6 | 2核+2G | 6.0.19 |
redis安装
下载redis
wget http://download.redis.io/releases/redis-6.0.19.tar.gz
安装依赖
yum -y install gcc automake autoconf libtool make
关闭防火墙
1.#闭防火墙、selinux、dnsmasq/NetworkManager
systemctl disable --now firewalld
systemctl disable --now dnsmasq
systemctl disable --now NetworkManager
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
#检查
grep ^SELINUX= /etc/selinux/config
编译安装redis
tar xf redis-6.0.19.tar.gz
mv redis-6.0.19 /usr/local/redis
cd /usr/local/redis
make
通过 echo $?
来判断编译和安装是否成功
所以主机配置环境变量
#/usr/local/redis/src
cat>>/etc/profile<<'EOF'
export PATH=/usr/local/redis/src:$PATH
EOF
tail -1 /etc/profile
source /etc/profile
echo $PATH
所以主机创建配置目录
分别创建目录
mkdir /data/6379 -p
创建配置文件
cat > /data/6379/redis.conf <<EOF
port 6379
bind 0.0.0.0
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dbfilename dump.rdb
dir /data/6379
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 10.0.0.31 #每个节点ip地址
appendonly yes
requirepass 123
EOF
内核优化
cat >>/etc/sysctl.conf<<EOF
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
vm.overcommit_memory = 0
EOF
sysctl -p
关于vm.overcommit_memory参数说明
设置为2,禁用overcommit,会降低内存的使用效率,浪费内存资源。但是不会发生OOM。
设置为1,不建议使用。
设置为0,默认值,适度超发内存,但也有OOM风险。(这也是数据库经常发生OOM的原因)
启动redis
redis-server /data/6379/redis.conf
- 脚本管理
#!/bin/bash
REDIS_CONFIG_PATH=/data/6379/redis.conf
choice=$1
start(){
echo "开始启动redis"
PID=$(ps -ef | grep redis-server | grep -v grep | wc -l)
if [ $PID -eq 0 ]; then
/usr/local/redis/src/redis-server $REDIS_CONFIG_PATH
sleep 2
echo "redis启动成功"
else
echo "redis已启动"
fi
}
stop(){
echo "开始停止redis"
PID=$(ps -ef | grep redis-server | grep -v grep | wc -l)
if [ $PID -eq 1 ]; then
redis-cli -h 127.0.0.1 -p 6379 -a 123 shutdown
sleep 2
echo "redis停止成功"
else
echo "redis已停止"
fi
}
case "$choice" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "请输入正确的格式: sh $0 {start|stop|restart}"
;;
esac
使用system管理
cat >/usr/lib/systemd/system/redis.service<<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/redis/src/redis-server /data/6379/redis.conf --supervised systemd
ExecStop=/usr/local/redis/src/redis-cli shutdown
Type=notify
User=root
Group=root
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
- 启动
systemctl daemon-reload
systemctl enable --now redis.service
systemctl status redis.service
netstat -lantup | grep 6379
使用redis-cli创建集群
2018年十月 Redis 发布了稳定的 5.0 版本,推出了非常多的新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli 的方式。
所以说现在有两种方式来创建集群:
● 一种是ruby启动方式;
● 另外一个是 C语言的方式。
因为我用的 redis 版本是 6.2.6,如果要用ruby创建集群的方式,还需要安装ruby语言的一些东西,所以这里使用的 redis-cli 的方式创建集群。
创建集群
redis-cli -a 123 --cluster create \
10.0.0.31:6379 \
10.0.0.32:6379 \
10.0.0.33:6379 \
10.0.0.34:6379 \
10.0.0.35:6379 \
10.0.0.36:6379 \
--cluster-replicas 1
注意事项:如果出现Waiting for the cluster to join需要检查以下配置
1)配置文件redis.conf 中的bind 设置,IP要是本机地址
2)确保所有使用的端口之间互通,可用telnet ip port 测试**
3)登录到每个客户端,执行 flushall、 cluster reset,重启实例之前你要删除以下文件:
rm -rf nodes.conf // cluster-config-file
rm -rf dump.rdb // dbfilename
rm -rf appendonly.aof // appendfilename
重启所有实例:redis-server /data/6379/redis.conf
查看集群状态
redis-cli -h 10.0.0.31 -a 123 cluster info
redis-cli -a 123 -p 6379 cluster nodes | grep connected
redis-cli -a 123 -p 6379 cluster nodes | grep master
redis-cli -a 123 -p 6379 cluster nodes | grep slave
可以看到每个节点的状态都是 connected
,并且集群的槽位分配和节点角色(主节点和从节点)也都正确
集群状态验证
集群状态的redis需要指定 -c 参数表示以集群模式连接
[服务未授权][root@redis1 ~]# redis-cli -h 10.0.0.31 -c -a 123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
10.0.0.31:6379> set redis 6.26
OK
10.0.0.31:6379> exit
[服务未授权][root@redis1 ~]# redis-cli -h 10.0.0.35 -c -a 123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
10.0.0.35:6379> get redis
-> Redirected to slot [1151] located at 10.0.0.31:6379
"6.26"
10.0.0.31:6379>
标签:10.0,grep,cli,6379,redis,cluster,集群
From: https://www.cnblogs.com/Unstoppable9527/p/18345367