这两天公司项目进行割接,需要将老的无缝替换到新的上面,但我犯了很多错误,所以特来记录一下。
1.配置环境
首先需要将新服务器配置上运行环境,nginx、redis、mysql、java、minio、rabbitmq等等。
redis
首先下载安装包,然后将安装包上传到你的服务器上。
通过下列命令安装redis所需要的gcc环境依赖。
yum install -y gcc tcl
`` 然后解压你的安装包
tar -xzf redis-6.2.6.tar.gz
进入你的解压文件夹里,并且执行make编译
cd redis-6.2.6
make && make install
之后进行redis的文件配置
vim redis.conf
找到这几个位置,修改成你想要的内容,然后wq保存就好,记住要配置为后台运行
之后运行redis就好
redis-server redis.conf
你还可以将redis做成服务。 
将下面这个内容封装成redis.service,放到 /etc/systemd/system/ 下面。
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
ExecStart=/app/redis-6.2.13/src/redis-server /app/redis-6.2.13/redis.conf
ExecStop=/app/redis-6.2.13/src/redis-cli shutdown
User=root
Group=root
Restart=always
[Install]
WantedBy=multi-user.target
然后运行重载命令,刷新识别。
sudo systemctl daemon-reload
然后你就可以使用下面的命令了。
systemctl status redis
systemctl restart redis
systemctl start redis
systemctl stop redis

mysql
跟redis同理,下载安装包,执行make编译。 先下载安装包,我这些都是内网操作,如果你的服务器可以直接访问外网,可以直接通过命令行下载。
rpm -qa | grep mysql
解压缩
tar -zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz #解压缩
创建mysql用户组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
创建数据目录、并且进行授权
mkdir data
chown mysql:mysql data
chmod 750 data
cd /usr/local/mysql/bin/
./mysqld –defaults-file=/etc/my.cnf –basedir=/usr/local/mysql/ –datadir=/mysql/data/ –user=mysql –initialize
使用 –initialize 或 –initialize-insecure 选项,具体取决于您是否希望服务器为 ‘root’@‘localhost’ 帐户生成一个随机初始密码,或者创建该帐户时没有密码 
my.cnf需要自己配置
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql #初始地址
datadir=/data/mysql #数据地址
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err #log
pid-file=/data/mysql/mysql.pid #pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
这样系统就运行起来了mysql,你可以通过下面命令来测试
mysql -uroot -p12345
不过这样的启动不够轻松,需要启动的命令太臃肿,那如何让系统更轻量的启动mysql命令。
那就是将mysql服务封装成linux系统的service管理,通过下面的命令,将mysql.server复制到init.d里面。
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
之后通过下面命令,就可以启动mysql和查看状态了。
systemctl start mysql
systemctl status mysql
然后服务就起来了,你可以通过ssh命令进行穿透,然后将老数据进行迁移。
mysql -uroot -p

报错
如果你在启动执行systemctl start mysql的时候,出现错误,就看看init.d下面有没有mysqld文件。
执行下面命令来查看是否存在mysql命名的配置文件被systemctl管理。
systemctl list-unit-files | grep -i mysql
通过上图可以看见,两个service被systemctl管理,他们两个都有系统生成generated,那是因为放入init.d里面的文件会被systemctl读取自动在内存生成为一个service服务,并不是现在主流的通过在etc/systemd/system下面创建一个 name.service,直接由systemctl管理的方法。 如果你能查到,证明你有service服务,可以直接启动。
执行这个命令来查看正在被读取的service,你就可以确定使用的是哪一个service。
systemctl status mysqld | grep "Loaded:"
那如果说,你都看不到这些的话,那你就需要重新将mysql/support下面的内容重新复制到init.d下面进行编辑了。具体看我上面的配置内容,那里有说。 
还有就是不能将my.cnf设置权限为777,权限太低的话,mysql会过滤该my.cnf配置,使用默认配置。 建议使用
从这个图片可以看到mysql的提醒。
ls -la /etc/my.cnf #查看
sudo chmod 644 /etc/my.cnf
建议使用如上命令,将my.cnf权限改为只有拥有者才可以写,其他人只能读。
nginx
先下载nginx的依赖环境
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
下载压缩包,然后解压
tar -zxf nginx-1.25.1.tar.gz
解压成功之后,进入nginx目录,运行可执行文件 –prefix选择编译目录
cd nginx-1.25.1
sudo ./configure –prefix=/app/nginx
上图出现,表示配置成功,之后执行编译和安装就行了。
make && make install
./app/sbin/nginx -v
之后需要什么,在conf的nginx.conf进行配置就行。
minio
安装minio二进制文件,配置minio.conf
MINIO_VOLUMES="/app/data"
MINIO_OPTS="–address 0.0.0.0:9000 –console-address 0.0.0.0:9001"
MINIO_ACCESS_KEY="minioadmin"
MINIO_SECRET_KEY="minioadmin"
将minio设置为systemctl
#minio.service文件内容
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
#minio文件具体位置
AssertFileIsExecutable=/usr/local/minio/minio
[Service]
#User and group 用户 组
User=root
Group=root
#创建的配置文件 minio.conf
EnvironmentFile=/usr/local/minio/conf/minio.conf
ExecStart=/usr/local/minio/minio server $MINIO_OPTS $MINIO_VOLUMES
#Let systemd restart this service always
Restart=always
#Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
#Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
依然是通过systemctl方法进行minio的操作
#将服务设置为每次开机启动
systemctl enable minio.service
#重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载
systemctl daemon-reload
#启动服务
systemctl start minio
#停止服务
systemctl stop minio
#重启服务
systemctl restrat minio
#查看服务状态
systemctl status minio.service
#打开页面访问登录成功即可
http://192.168.80.137:9000
java
通过官网下载java。
通过rpm命令进行安装
sudo rpm -ivh jdk-8u391-linux-x64.rpm
#或
sudo yum localinstall jdk-8u391-linux-x64.rpm
也就是会自动生成软连接,不需要用户再去配置java_home了。 你像我们刚才上面的那些环境配置,都是手动配置
以后直接全部下载RPM进行安装,打包者提供了配置。
迁移数据
服务就是换ip,打包 数据就通过navicat批量导入就好,不过要看看哪些表内容比较多,分批次导入。
minio就通过minio官方给我们提供的minio client进行导入就行:
步骤 1:安装 MinIO 客户端 wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc chmod +x /usr/local/bin/mc
步骤 2:设置源和目标服务器别名
mc alias set minio_src http://源服务器IP:9000 用户名 密码
mc alias set minio_dest http://目标服务器IP:9000 用户名 密码
步骤 3:执行数据迁移
迁移指定桶的数据:
mc cp –recursive minio_src/桶名/ minio_dest/桶名/
#迁移所有数据:
mc cp –recursive minio_src/ minio_dest/
一次性同步所有数据:
mc mirror –preserve minio_src/ minio_dest/
实时监控并同步:
mc mirror –watch minio_src/ minio_dest/
使用以下命令对比源和目标的数据差异:
mc diff minio_src/ minio_dest/
网络策略
因为都是内网,所以我将一个前台服务器开了外网,通过nginx转发,让剩下的内网服务器可以访问外网资源,所以要配置nginx.conf,
并且需要配置该服务器的DNS解析,使得可以解析域名。
配置DNS
比较临时的方法就是直接改resolv.conf,在 /etc/resolv.confs里。
#在里面加入你需要的域名解析
nameserver 8.8.8.8
nameserver 114.114.114.114
如果你的服务器安装了NetworkManager的话,也可以使用NetworkManager进行统一管理。
#查看连接名
nmcli connection show
#修改 DNS(替换 "Wired connection 1" 为你的连接名)
sudo nmcli con mod "Wired connection 1" ipv4.dns "223.5.5.5 223.6.6.6"
sudo nmcli con mod "Wired connection 1" ipv4.ignore-auto-dns yes # 忽略 DHCP 的 DNS
sudo nmcli con up "Wired connection 1"
#设置主备 DNS
sudo nmcli con mod "eth0" ipv4.dns "223.5.5.5 223.6.6.6"
#关闭自动获取 DNS(防止 DHCP 覆盖)
sudo nmcli con mod "eth0" ipv4.ignore-auto-dns yes
#重新激活连接
sudo nmcli con up "eth0"
然后是各个服务器之间要相互能ping通。
防火墙设置端口访问
而各个服务器要能访问其他服务器所运行的服务端口,需要在防火墙里面进行设置。 使用iptables命令
#添加126这个服务器可以访问本机的9000端口
iptables –A INPUT –p tcp –s 134.96.246.126 —dport 9000 –j ACCEPT
查看端口命令
iptables -S INPUT | grep "\\-\\-dport 9000"
将你所需要的端口给你设置的ip启动,在你所设置的ip服务器上使用
#我现在登录的是126,要访问127是否能通
telnet 134.96.246.127 9000
如果返回connected,证明可以访问通过,就配置成功了。
mysql的3306,redis的6379,minio的9000,rabbitMQ的15672都是这样。




