内网离线部署redis7.2
环境说明
镜像系统:CentOS-7-x86_64-Everything-1908.iso
网络:
内网地址:192.168.24.20
无其他网卡
内存:8GB
CPU:1颗4核
硬盘:64GB
安装方式:带GUI的服务器
主机名:data0
另外,内网环境中有一个harbor服务主机,上面有nfs服务、ntpd服务、harbor镜像仓库,此主机可以连接公网,我使用它来准备必要文件,data0主机通过nfs共享获取文件。
基础环境准备
配置服务
cd /etc/yum.repos.d/ && tar -cf all.tar *.repo --remove-files
echo "192.168.24.5 harbor" >> /etc/hosts
mkdir /nfs && chmod 777 -Rf /nfs/
echo "harbor:/nfs /nfs nfs defaults 0 0" >> /etc/fstab
mount -t nfs harbor:/nfs /nfs
#设置时间同步
systemctl disable chronyd.service && systemctl stop chronyd.service
timedatectl set-timezone 'Asia/Shanghai'
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#设置时间的配置文件
line_number=$(awk '/server 3.centos.pool.ntp.org iburst/{print NR}' /etc/ntp.conf) #这条语句是centos7特制的,其他版本不知道是不是这样
sed -i -e 's/^server/#server/' /etc/ntp.conf
sed -i "$line_number a server harbor iburst" /etc/ntp.conf
line_number=$(awk '/restrict ::1/{print NR}' /etc/ntp.conf)
ntpdate harbor
systemctl start ntpd &&systemctl enable ntpd
内核升级
cd /nfs/kernerl/ && rpm -ivh kernel-lt-5.4.267-1.el7.elrepo.x86_64.rpm
grub2-set-default 0
#查看内核列表:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
准备redis相关组件和源码
此步骤在harbor上执行
mkdir /nfs/redis/ && cd /nfs/redis/
#下载最新的稳定版
wget https://download.redis.io/redis-stable.tar.gz
#编译工具
yumdownloader --destdir /nfs/redis/ gcc gcc-c++ kernel-devel
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/cpp-4.8.5-44.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libstdc++-4.8.5-44.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libgcc-4.8.5-44.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libstdc++-devel-4.8.5-44.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libgomp-4.8.5-44.el7.x86_64.rpm
mkdir /nfs/python3 && cd /nfs/python3
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
mkdir /nfs/zlib/ && cd /nfs/zlib/ && yumdownloader --destdir /nfs/zlib/ zlib*
mkdir /nfs/tcl && cd /nfs/tcl
yumdownloader --destdir /nfs/tcl/ tcl*
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/tk-8.5.13-6.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/updates/x86_64/Packages/postgresql-libs-9.2.24-7.el7_9.x86_64.rpm
编译和安装redis
此步骤在data0上执行.
#安装编译工具
yum localinstall /nfs/redis/*.rpm -y
#编译python3
yum localinstall /nfs/zlib/*.x86_64.rpm
#建议断开ssh重连
mkdir python3.6 && cd /python3.6/
cp /nfs/python3/Python-3.6.8.tgz ./
tar xf Python-3.6.8.tgz
cd Python-3.6.8/
#编译构建
./configure
make
#一般没有明显的提示说失败就是成功了
make install
#有如下提示则成功:
#Successfully installed pip-18.1 setuptools-40.6.2
#安装tcl,用于测试
yum localinstall /nfs/tcl/*.x86_64.rpm
#编译redis
mkdir /redis-stable && tar -xf /nfs/redis/redis-stable.tar.gz -C / && cd /redis-stable
#编译
make
#等待编译结束,没那么快,也没那么慢
#测试
make test
#有如下输出则表示测试通过
\o/ All tests passed without errors!
Cleanup: may take some time... OK
make[1]: Leaving directory `/redis-stable/src'
#安装进入系统
make install
自此,安装结束。
FQA
max_latency <= 40
可能在make test 的时候会出现如下警告:
!!! WARNING The following tests failed:
*** [err]: Active defrag - AOF loading in tests/unit/memefficiency.tcl
Expected 215 <= 40 (context: type eval line 37 cmd {assert {$max_latency <= 40}} proc ::test)
Cleanup: may take some time... OK
make[1]: *** [test] Error 1
make[1]: Leaving directory `/redis-stable/src'
make: *** [test] Error 2
这其实是再说延迟的问题,由于我是在虚拟机中部署的,并且还是X79平台的老设备了,就是会有一定的延迟,可以不管它。如果一定要解决,请修改这个文件的内容:
vi tests/unit/memefficiency.tcl
将其修改为大于实际值的值(比如我这儿的实际值为215,我将其修改为300):
然后make clean清理。执行make && make test重新编译测试。
$frag >= $expected_frag
*** [err]: Active defrag big keys in tests/unit/memefficiency.tcl
Expected 1.59 >= 1.7 (context: type eval line 73 cmd {assert {$frag >= $expected_frag}} proc ::test)
调整预期值:
然后make clean清理。执行make && make test重新编译测试。
使用systemctl管理redisCluster
[root@data0 ~]# cat /etc/systemd/system/redisCluster.service #- Unit部分用于描述服务单元的基本信息,包括描述和依赖关系。在这里,描述了redisCluster服务 [Unit] Description=redis Cluster Service After=network.target #- Service部分定义了实际的服务配置。指定服务的类型为forking,这意味着它只会运行一次,并且在退出后仍然保持激活状态。还指定了服务的工作目录和启动/停止命令。 [Service] Type=forking RemainAfterExit=yes WorkingDirectory=/redis_cluster #注意你的redis程序的位置。 ExecStart=/bin/sh -c '/usr/local/bin/redis-server /redis_cluster/1/config/redis_6379.conf && /usr/local/bin/redis-server /redis_cluster/2/config/redis_6380.conf' ExecStop=/bin/sh -c '/usr/local/bin/redis-cli -h 192.168.24.21 -p 6379 -a SCredis_2020 shutdown && /usr/local/bin/redis-cli -h 192.168.24.21 -p 6380 -a SCredis_2020 shutdown' Restart=always #- Install部分定义了服务的安装信息。在这个例子中,指定了服务在multi-user.target下启动。 [Install] WantedBy=multi-user.target [root@data0 ~]#
然后运行 systemctl daemon-reload加载服务,然后启动服务:
systemctl start redisCluster.service