0x01 前言
真的很快速,只要拥有足够的内存,和CPU资源,一切都可以很快,因为这篇文章不涉及调优的部分。而下一篇文章会涉及调优、vip和测试的部分。
0x02 准备
大型集群肯定要有足够多的机器,所以我的redis和哨兵是分开部署的,为了避免脑裂,需要至少3+3台虚拟机:
然后下载最新的安装包:
这篇文章使用6.0.4,操作系统使用centos 7.8。
因为涉及两个组件,所以有些步骤是不一样的,在操作之前先执行共通的命令,以下命令需要在6台服务器中执行:
# 调优 cat >> /etc/sysctl.conf << EOF net.core.somaxconn=2048 vm.overcommit_memory=1 EOF # 开启透明大页 echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local \ && chmod +x /etc/rc.d/rc.local # 重启 reboot # 安装devtoolset9用于编译 yum -y install epel-release \ && yum -y install centos-release-scl \ && yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils \ && scl enable devtoolset-9 bash # 添加用户及创建目录 groupadd redis \ && useradd -g redis redis \ && mkdir -pv /usr/local/redis/{bin,conf,logs}
然后在root目录下创建临时目录、下载源码、解压和编译安装:
cd /root/ \ && mkdir -p codex/redis \ && cd codex/redis \ && curl http://download.redis.io/releases/redis-6.0.4.tar.gz > redis-6.0.4.tar.gz \ && tar zxvf redis-6.0.4.tar.gz \ && cd redis-6.0.4 \ && make -j PREFIX=/usr/local/redis install
至此,所有准备工作均已完成,如果一切正常,那么会是这样的:
/usr/local/redis/bin 下会有可执行的二进制文件:
0x03 配置
因为有两个组件,所以配置分为两部分,而server和哨兵的配置文件是不一样的,先配置主从架构。
需要注意的是,主从的英文并不是master-slave,而是master-replica。
0x03.1 主从架构
在三台server服务器中执行以下命令:
cp redis.conf /usr/local/redis/conf \ && chown -R redis:redis /usr/local/redis
然后在主服务器中执行以下命令:
sed -i "s@bind 127.0.0.1@bind 0.0.0.0@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@daemonize no@daemonize yes@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@[email protected]@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@logfile \"\"@logfile \"/usr/local/redis/logs/redis.log\"@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@dir ./@dir /usr/local/redis@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@# requirepass foobared@requirepass Passw0rd@g" /usr/local/redis/conf/redis.conf
以上命令会修改配置文件中的以下信息:
- 将监听IP修改为0.0.0.0
- 开启daemonize
- 修改pid文件名
- 修改日志文件路径
- 修改软件目录为绝对路径
- 修改密码
请根据实际情况指定一个强密码。
紧接着执行以下命令以建立service:
cat > /etc/systemd/system/redis-server.service << EOF [Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis Group=redis ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf ExecStop=/usr/local/redis/bin/redis-cli shutdown Restart=always Type=forking [Install] WantedBy=multi-user.target EOF
最后执行以下命令即可完成主服务器的配置和启动工作:
systemctl daemon-reload \ && systemctl enable redis-server.service \ && systemctl start redis-server.service
紧接着配置从服务器,而这部分的配置和主服务器有所区别:
sed -i "s@bind 127.0.0.1@bind 0.0.0.0@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@daemonize no@daemonize yes@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@[email protected]@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@logfile \"\"@logfile \"/usr/local/redis/logs/redis.log\"@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@dir ./@dir /usr/local/redis@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@# requirepass foobared@requirepass Passw0rd@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@# replicaof <masterip> <masterport>@replicaof 10.1.3.89 6379@g" /usr/local/redis/conf/redis.conf \ && sed -i "s@# masteruser <username>@masterauth \"Passw0rd\"@g" /usr/local/redis/conf/redis.conf
除主服务器的配置项外,从服务器增加以下配置的修改:
- 指定主服务器的IP及端口
- 指定主服务器的密码用于同步数据
请根据实际情况修改最后两行中的相关内容。
随后执行主服务器建立service的命令和启动命令即可完成两台从服务器的配置和服务启动工作。如果一切正常,那么日志显示如下:
0x03.2 哨兵
sentinel,也就是哨兵,主要用于监控集群状态和推选master,至少需要3个节点以避免脑裂。以下命令直接在三个哨兵节点上执行即可。
首先将源码文件夹里的复制配置文件到指定位置:
cp cp sentinel.conf /usr/local/redis/conf/ \ && chown -R redis:redis /usr/local/redis
然后修改该配置文件:
sed -i "s@bind 127.0.0.1@bind 0.0.0.0@g" /usr/local/redis/conf/sentinel.conf \ && sed -i "s@daemonize no@daemonize yes@g" /usr/local/redis/conf/sentinel.conf \ && sed -i "s@logfile \"\"@logfile \"/usr/local/redis/logs/redis.log\"@g" /usr/local/redis/conf/sentinel.conf \ && sed -i "s@dir ./@dir /usr/local/redis@g" /usr/local/redis/conf/sentinel.conf \ && sed -i "s@# sentinel auth-pass mymaster MySUPER--secret-0123passw0rd@sentinel auth-pass ngxmaster Passw0rd@g" /usr/local/redis/conf/sentinel.conf \ && sed -i "s@sentinel monitor mymaster 127.0.0.1 6379 2@sentinel monitor ngxmaster 10.1.3.89 6379 2@g" /usr/local/redis/conf/sentinel.conf \ && sed -i "s@sentinel down-after-milliseconds mymaster 30000@sentinel down-after-milliseconds ngxmaster 30000@g" /usr/local/redis/conf/sentinel.conf \ && sed -i "s@sentinel parallel-syncs mymaster 1@sentinel parallel-syncs ngxmaster 1@g" /usr/local/redis/conf/sentinel.conf \ && sed -i "s@sentinel failover-timeout mymaster 180000@sentinel failover-timeout ngxmaster 180000@g" /usr/local/redis/conf/sentinel.conf
需要将配置文件中mymaster的名称全部修改,当然,使用默认的也没问题,用于识别而已。随后写入service文件:
cat > /etc/systemd/system/redis-sentinel.service << EOF [Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis Group=redis ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/sentinel.conf --sentinel ExecStop=/usr/local/redis/bin/redis-cli shutdown Restart=always Type=forking [Install] WantedBy=multi-user.target EOF
最后启动即可:
systemctl daemon-reload \ && systemctl enable redis-sentinel.service \ && systemctl start redis-sentinel.service
如果一切正常,哨兵的日志是这样的:
当尝试关闭master会尝试推算新master和切换:
0x04 结语
很简单,没啥要补充的。
接下来要调优和配置vip,顺便测试哨兵接口。