準(zhǔn)備工作:
centos7 鏡像地址:https://developer.aliyun.com/mirror/
redis 下載地址:http://download.redis.io/releases/redis-6.0.6.tar.gz
- 首先查看防火墻的狀態(tài)
export PATH=/usr/local/bin:$PATH
systemctl status firewalld.service
- 然后執(zhí)行命令進(jìn)行關(guān)閉
systemctl stop firewalld service
- systemctl disable firewalld.service,開機(jī)禁止防火墻服務(wù)器
- systemctl enable firewalld.service橄务,開機(jī)啟動(dòng)防火墻服務(wù)器
配置redis過程中可能遇到的問題藏杖,前置配置解決
Increased maximum number of open files to 10032 (it was originally set to 1024).
- 查看文件打開數(shù)配置
ulimit -a
- 配置方案
ulimit -n 65535
echo ulimit -n 65535 >>/etc/profile
WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
- 臨時(shí)方案
echo 1024 > /proc/sys/net/core/somaxconn
- 配置方案
echo net.core.somaxconn= 1024 >> /etc/sysctl.conf && sysctl -p
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
- 配置方案
echo vm.overcommit_memory = 1 >> /etc/sysctl.conf && sysctl -p
安裝
如果大家在centos7下編譯redis6.0版本凡泣,如果出現(xiàn)以下錯(cuò)誤
In file included from server.c:30:0:
server.h:1022:5: error: expected specifier-qualifier-list before ‘_Atomic’
_Atomic unsigned int lruclock; /* Clock for LRU eviction */
請(qǐng)先檢查gcc的版本是否低于5箫措,如果是請(qǐng)先升級(jí)桦山,可以使用以下命令:
sudo yum install centos-release-scl
sudo yum install devtoolset-7-gcc*
scl enable devtoolset-7 bash
開始安裝
sudo su root ## 先切換到 root 身份下
sudo mkdir /opt/src /opt/redis
cd /opt/src
sudo wget http://download.redis.io/releases/redis-6.0.6.tar.gz
sudo tar xzf redis-6.0.6.tar.gz
cd redis-6.0.6
sudo make && make install
修改安裝腳本
vim ./utils/install_server.sh
-- 注釋掉這段代碼
#bail if this system is managed by systemd
#_pid_1_exe="$(readlink -f /proc/1/exe)"
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
# echo "This systems seems to use systemd."
# echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
# exit 1
#fi
#unset _pid_1_exe
執(zhí)行安裝
sudo ./utils/install_server.sh
配置文件目錄輸入這個(gè)地址:/opt/redis/6379/6379.conf
其他的都可以默認(rèn)尘分,一直回車
修改啟動(dòng)腳本(不設(shè)置連接密碼的排拷,可以不修改)
sudo vim /etc/init.d/redis_6379
REDISPORT=6379 下加入
PASSWORD=$(cat $CONF|grep '^\s*requirepass'|awk '{print $2}'|sed 's/"http://g')
替換:
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
if [ -z $PASSWORD ]
then
$CLIEXEC -p $REDISPORT shutdown
else
$CLIEXEC -a $PASSWORD -p $REDISPORT shutdown
fi
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
修改配置文件
- 修改成允許所有ip連接
- AOF開啟
- 重啟一下Redis,安裝就好了
sed -i 's/# bind 127.0.0.0/bind 0.0.0.0/g' /opt/redis/6379/6379.conf
sed -i 's/bind 127.0.0.0/bind 0.0.0.0/g' /opt/redis/6379/6379.conf
sed -i 's/appendonly no/appendonly yes/g' /opt/redis/6379/6379.conf
service redis_6379 restart
- 拷貝兩份Redis配置文件和啟動(dòng)文件缺前,一會(huì)用來做集群的搭建
mkdir /opt/redis/cluster
cp /opt/redis/6379/6379.conf /opt/redis/cluster/6380.conf
cp /opt/redis/6379/6379.conf /opt/redis/cluster/6381.conf
- 配置sentinel哨兵文件
cp /opt/src/redis-6.0.6/sentinel.conf /opt/redis/6379/
sed -i 's/daemonize no/daemonize yes/g' /opt/redis/6379/sentinel.conf
sed -i 's/logfile ""/logfile "\/var\/log\/sentinel.log"/g' /opt/redis/6379/sentinel.conf
sed -i 's/monitor mymaster 127.0.0.1 6379 2/monitor mymaster [你的master ip] 6379 2/g' /opt/redis/6379/sentinel.conf
echo "bind 0.0.0.0" >> /opt/redis/6379/sentinel.conf
echo "sentinel down-after-milliseconds mymaster 5000" >> /opt/redis/6379/sentinel.conf
## sentinel auth-pass mymaster <password> 配置密碼的話需要填寫密碼
- 配置sentinel哨兵啟動(dòng)文件
cp /etc/init.d/redis_6379 /etc/init.d/sentinel
sed -i 's/redis_6379.pid/redis-sentinel.pid/g' /etc/init.d/sentinel
sed -i 's/REDISPORT="6379"/REDISPORT="26379"/g' /etc/init.d/sentinel
sed -i 's/6379.conf/sentinel.conf/g' /etc/init.d/sentinel
sed -i 's/redis_6379/sentinel/g' /etc/init.d/sentinel
sed -i 's/Redis/Sentinel/g' /etc/init.d/sentinel
sed -i 's/redis-server/redis-sentinel/g' /etc/init.d/sentinel
- 修改 6380 配置
mkdir /var/lib/redis/6380
sed -i 's/port 6379/port 6380/g' /opt/redis/cluster/6380.conf
sed -i 's/redis_6379/redis_6380/g' /opt/redis/cluster/6380.conf
sed -i 's/dir \/var\/lib\/redis\/6379/dir \/var\/lib\/redis\/6380/g' /opt/redis/cluster/6380.conf
sed -i 's/# cluster-enabled yes/cluster-enabled yes/g' /opt/redis/cluster/6380.conf
sed -i 's/# cluster-node-timeout 15000/cluster-node-timeout 15000/g' /opt/redis/cluster/6380.conf
- 修改 6381 配置
/var/lib/redis/6381
sed -i 's/port 6379/port 6381/g' /opt/redis/cluster/6381.conf
sed -i 's/redis_6379/redis_6381/g' /opt/redis/cluster/6381.conf
sed -i 's/dir \/var\/lib\/redis\/6379/dir \/var\/lib\/redis\/6381/g' /opt/redis/cluster/6381.conf
sed -i 's/# cluster-enabled yes/cluster-enabled yes/g' /opt/redis/cluster/6381.conf
sed -i 's/# cluster-node-timeout 15000/cluster-node-timeout 15000/g' /opt/redis/cluster/6381.conf
- 配置cluster啟動(dòng)服務(wù)
cp /etc/init.d/redis_6379 /etc/init.d/redis_6380; cp /etc/init.d/redis_6379 /etc/init.d/redis_6381
sed -i 's/6379/6380/g' /etc/init.d/redis_6380
sed -i 's/\/opt\/redis\/6380/\/opt\/redis\/cluster/g' /etc/init.d/redis_6380
sed -i 's/6379/6381/g' /etc/init.d/redis_6381
sed -i 's/\/opt\/redis\/6381/\/opt\/redis\/cluster/g' /etc/init.d/redis_6381
- 軟鏈一下
ln -s /usr/local/bin/redis-cli /usr/bin/redis-cli
虛擬機(jī)的話蛀醉,克隆當(dāng)前機(jī)器出兩臺(tái)來,用來搭建集群
主從配置
- slave (兩臺(tái)機(jī)器)上執(zhí)行
sed -i 's/# replicaof <masterip> <masterport>/replicaof [你的master ip] 6379/g' /opt/redis/6379/6379.conf
- 重啟 slave (兩臺(tái)機(jī)器)上的redis
service redis_6379 restart
- 查看日志是否連接成功
tail -f /var/log/redis_6379.log
- 登錄redis 查看是否有主從信息
redis-cli
127.0.0.1:6379> info replication
主從-主-info-replication.png
- master 主上設(shè)置值
127.0.0.1:6379> set master master
slave 機(jī)器上
- 登錄redis 查看是否有主從信息衅码,并獲取master設(shè)置的值
redis-cli
127.0.0.1:6379> info replication
127.0.0.1:6379> get master
主從-從-info-replication.png
sentinel 哨兵配置
- master 機(jī)器上重啟sentinel
service sentinel restart
- [如果是克隆出來的鏡像的話] slave機(jī)器上拯刁,注釋掉myid 不能重復(fù),并執(zhí)行重啟逝段,自動(dòng)生成
sed -i 's/sentinel myid/# sentinel myid/g' /opt/redis/6379/sentinel.conf
service sentinel restart
- [主備切換] master 機(jī)器上重啟停掉redis
service redis_6379 stop
- 查看日志是否有自動(dòng)切換master的日志
tail -f /var/log/sentinel.log
- 成功切換master之后垛玻,重新啟動(dòng)redis
service redis_6379 start
- 登錄redis
redis-cli
127.0.0.1:6379> info replication
- 查看是否已經(jīng)從 master -> slave
集群配置
- 主從機(jī)器,全部啟動(dòng) 6380 6381
service redis_6380 start
service redis_6381 start
- 創(chuàng)建集群 [ip替換自己的集群ip]
redis-cli --cluster create 10.211.55.7:6380 10.211.55.7:6381 10.211.55.8:6380 10.211.55.8:6381 10.211.55.9:6380 10.211.55.9:6381 --cluster-replicas 1
- 登錄集群 [-c 集群方式登錄]
redis-cli -c -p 6380
- 查看集群信息
127.0.0.1:6380> cluster info
cluster-cluster-info.png
- 列出節(jié)點(diǎn)信息
127.0.0.1:6380> cluster nodes
cluster-cluster-nodes.png
- 設(shè)置一個(gè)值
127.0.0.1:6380> set cluster cluster
- 在集群中任一節(jié)點(diǎn)進(jìn)去后奶躯,是否都能獲取到值
127.0.0.1:6380> get cluster
寫在最后:結(jié)合官方的安裝腳本帚桩,理論上能實(shí)現(xiàn)一個(gè)集群安裝腳本的