狂自私

导航

内网离线部署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

 

posted on 2024-01-30 15:39  狂自私  阅读(204)  评论(1编辑  收藏  举报