CRM系统环境搭建部署(nginx、jdk、tomcat、keepalived、mysql、zabbix)

发布时间:2024年01月21日


CRM系统环境搭建部署(nginx、jdk、tomcat、keepalived、mysql、zabbix)

crm.XXX.com ? ?#CRM系统使用的域名,已注册并做好DNS解析

两台应用服务器(主、备):172.16.38.172、172.16.38.173
两台数据库服务器(主、备):172.16.38.174、172.16.38.175
操作系统:CentOS 7.9

各服务器准备工作:
关闭selinux 、firewalld、设置好hostname
服务器时间同步
yum -y install ntp ntpdate
ntpdate asia.pool.ntp.org ?#设置系统时间与网络时间同步
hwclock --systohc ? ?#将系统时间写入硬件时间,这里是为了防止系统重启后时间被还原,因此需要写到硬件设备中去

CRM系统要求:
nginx 日志分割
tomcat 日志分割
zabbix监控
mysql本地备份和远程备份的脚本配置,任务计划设置

一、CRM系统应用服务器配置

172.16.38.172 ?应用服务器(主)
172.16.38.173 ?应用服务器(备)

应用服务器使用域名访问数据库:crm.mysql.com,所以两台应用服务器需要设置hosts解析:
vim /etc/hosts
172.16.38.174 crm.mysql.com
172.16.38.175 crm.mysql.com


安装nginx、jdk、tomcat、keepalived

(一)、编译安装nginx服务

1、创建www用户和组

groupadd www
useradd www -g www?
passwd www www ? #设置www用户密码为www
mkdir /home/www
chown www.www /home/www
chmod 700 /home/www

2、更新源和环境所需插件安装

yum update ? ? ? ? ? ? ? ?#更新yum源
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel ? ? ?#先安装nginx依赖包

3、下载nginx-1.18.0.tar.gz 存放在/data/software 目录下

cd /data/software
wget -c http://nginx.org/download/nginx-1.18.0.tar.gz ? ? ? ?#从nginx官网下载nginx-1.18.0.tar.gz
tar -xf nginx-1.18.0.tar.gz -C /data/server/ ? ? ? ? ? ? ? ? ? ? ? ? ?#解压nginx到/data/server/
cd /data/server/nginx-1.18.0

4、编译安装nginx,指定执行的用户主和用户组(使用前面创建的www用户和组)

./configure --prefix=/data/server/nginx ?--with-http_ssl_module ? --user=www --group=www
make
make install

cd /data/server/nginx ? ?#查看nginx目录下的文件情况
/data/server/nginx/sbin/nginx -? ? ? ? ? ? ?#查看nginx相关参数
/data/server/nginx/sbin/nginx -v ? ? ? ? ? ?#查看nginx的版本
/data/server/nginx/sbin/nginx -t ? ? ? ? ? ?#检查配置文件语法是否正确
/data/server/nginx/sbin/nginx ? ? ? ? ? ? ? ?# 启动nginx服务
/data/server/nginx/sbin/nginx -s stop ? ?#停止nginx服务
netstat -nltp ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#查看端口
ps -ef |grep nginx ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #查看nginx进程

pgrep nginx | xargs kill -9 ? ##如何用一条Linux命令干掉所有nginx进程,通过 pgrep 指令,根据名字找出所有包含该名字的进程号


设置nginx自启
在rc.local中添加启动代码
vim /etc/rc.local
# 在文件末尾添加一句 /data/server/nginx/sbin/nginx
# 重新赋予权限
chmod 755 /etc/rc.local

重启nginx服务

/data/server/nginx/sbin/nginx -s reload


在浏览器中输入nginx 服务器IP地址,查看nginx的默认页面

5、配置负载均衡

172.16.38.172、172.16.38.173 设置免密登录

在172上执行:
ssh-keygen ? ? # 一路回车
ssh-copy-id 172.16.38.173 ? #输入173的密码

在173上执行:
ssh-keygen ? ? # 一路回车
ssh-copy-id 172.16.38.172 ? ?#输入172的密码

在172上执行:
vim nginx.conf ? ? ? ? ? ?#修改部分内容

vim /data/server/nginx/conf/nginx.conf

user www www;
worker_processes ?auto;

#error_log ?logs/error.log;
#error_log ?logs/error.log ?notice;
#error_log ?logs/error.log ?info;

#pid ? ? ? ?logs/nginx.pid;


events {
? ? worker_connections ?10240;
}


http {
? ? include ? ? ? mime.types;
? ? default_type ?application/octet-stream;

? ? gzip on;
? ? gzip_comp_level 6;
? ? gzip_proxied any;
? ? gzip_buffers 4 8k;
? ? gzip_min_length 1024;
? ? gzip_types text/plain text/xml text/css application/x-javascript text/javascript image/jpeg;

? ? proxy_buffer_size 64k;
? ? proxy_buffers ? 32 32k;
? ? proxy_ignore_client_abort on;
? ? client_header_buffer_size 4k;
? ? #open_file_cache max=10240 inactive=20s;
? ? #open_file_cache_valid 30s;
? ? #open_file_cache_min_uses 1;
? ? #add_header Cache-Control max-age=604800;

# ? ?log_format ?main ?'$http_x_forwarded_for - $remote_user [$time_local] "$request" '
#
# ? ? ? ? ? ? ? ? ? ? ?'$status $body_bytes_sent "$http_referer" '
# ? ? ? ? ? ? ? ? ? ? ?'"$http_user_agent" "$http_x_forwarded_for"';
? log_format main '$remote_addr - $remote_user [$time_local] '
? ? ? ? ? ? ? ? ? ? ? ? ?'fwf[$http_x_forwarded_for] tip[$http_true_client_ip] '
? ? ? ? ? ? ? ? ? ? ? ? ?'$upstream_addr $upstream_response_time $request_time '
? ? ? ? ? ? ? ? ? ? ? ? ?'$http_host $request '
? ? ? ? ? ? ? ? ? ? ? ? ?'"$status" $body_bytes_sent "$http_referer" '
? ? ? ? ? ? ? ? ? ? ? ? ?'"$http_accept_language" "$http_user_agent" ';

# ? ?access_log logs/access.log ?main;
# ? ?error_log ? logs/error.log;
? ? sendfile ? ? ? ?on;
? ? #tcp_nopush ? ? on;

? ? #keepalive_timeout ?0;
? ? keepalive_timeout ?65;

? ? server_tokens off;

? ? client_max_body_size 5m;

? ?include vhost/*.conf;
?upstream api{
? ? ? ? server ?172.16.38.172:8080;
? ? ? ? server ?172.16.38.173:8080;
? ? }

? ? upstream oa{
? ? ? ?server ?172.16.38.172:8081;
? ? ? ?server ?172.16.38.173:8081;
? ? }


}


保存退出

scp /data/server/nginx/conf/nginx.conf root@172.16.38.173:/data/server/nginx/conf/ ? ? #将172上的/data/server/nginx/conf/nginx.conf拷贝到173上

mkdir -p /data/server/nginx/conf/ssl ? ? ? ? ?#若CRM系统要使用SSL证书,则需要创建ssl证书目录,并把制作好的XXX.crt、XXX.key这两个SSL证书上传到/data/server/nginx/conf/ssl目录下
mkdir -p /data/server/nginx/conf/vhost? ? ? #创建vhost目录


vim /data/server/nginx/conf/vhost/crm.conf? ? ?#编辑crm 虚拟机的配置文件

server {
? listen ? ? ? ? ?80;
? server_name ? ?localhost crm.XXX.com;
? ? ? ? rewrite ^(.*)$ ?https://crm.XXX.com$1 permanent;
? ? }
server {
? ? listen ? ? ? 443 ssl;
? ? server_name ?localhost crm.XXX.com;
? ? access_log ?logs/crm.access.log main;
? ? error_log ?logs/crm.error.log;

? #ssl on;
? ?ssl_certificate ? ? ?/data/server/nginx/conf/ssl/XXX.crt;
? ?ssl_certificate_key ?/data/server/nginx/conf/ssl/XXX.key;

? ?ssl_session_cache ? ?shared:SSL:1m;
? ?ssl_session_timeout ?5m;
? ?ssl_ciphers ?HIGH:!aNULL:!MD5;
? ?ssl_prefer_server_ciphers ?on;

? ?client_max_body_size 50m; ? # 设置客户端请求体大小限制
? # location /{
? # ? ?root /data/htdoc/www;
? # ? ?index index.html index.htm;
? # ? ?try_files $uri $uri/ /index.html;
? # ? ?add_header X-Frame-Options SAMEORIGIN;

? # ? ? ?}

? ? location ^~ /api/auth/cas-app/login {
? ? rewrite ^/api/auth/cas-app/login(.*)$ /auth/cas-app/login$1 last;
? ? ? ? }

? ? location ^~ /api/humanResources/StaffManagementMobile/getCurrentUser {
? ? ? ? rewrite ^(.*)$ ?/humanResources/StaffManagementMobile/getCurrentUser last;
? ? ? ? }

? ? location ^~ /api/crm/appVersion/getAppNewVersion {
? ? ? ? rewrite ^(.*)$ ?/crm/appVersion/getAppNewVersion last;
? ? ? ?}


? location ? /{
? ? ? ? proxy_pass http://oa;
? ? ? ? proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
? ? ? ? proxy_set_header Host $http_host;
? ? ? ? proxy_set_header X-Forwarded-Proto https;
? ? ? ? #proxy_set_header X-Forwarded-For $remote_addr;
? ? ? ? proxy_redirect off;
? ? ? ? proxy_connect_timeout ? ? ?240;
? ? ? ? proxy_send_timeout ? ? ? ? 240;
? ? ? ? proxy_read_timeout ? ? ? ? 240;
? ? ? ? # note, there is not SSL here! plain HTTP is used

? ? ? ? }
# ? location ^~ /api {
# ? ? ? proxy_pass http://api;
# ? ? ? ?proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# ? ? ? ?proxy_set_header Host $http_host;
# ? ? ? ?proxy_set_header X-Forwarded-Proto https;
# ? ? ? #proxy_set_header X-Forwarded-For $remote_addr;
# ? ? ? ?proxy_redirect off;
# ? ? ? ?proxy_connect_timeout ? ? ?240;
# ? ? ? ?proxy_send_timeout ? ? ? ? 240;
# ? ? ? ?proxy_read_timeout ? ? ? ? 240;
# ? ? ? ?# note, there is not SSL here! plain HTTP is used
#
# ? ? ? }

# ? ? ? ?location ~ \.(jpg|png|js|css|gif|ico)$ {
# ? ? ? ? ? ? ?root /opt/tomcat/web/online;
# ? ? ? ? ? ? ?expires 12h;
# ? ? ? ? ? ? ?}

? ? ? ? error_page ?403 ?404 ? ? ? /404.html;
? ? ? ? error_page 500 502 503 504 /50x.html;

}


重启nginx
/data/server/nginx/sbin/nginx -s reload

在173服务器创建

将172上的nginx.conf 拷贝到173服务器的/data/server/nginx/sbin/nginx/conf目录下

scp -r /data/server/nginx/conf/ssl root@172.16.38.173:/data/server/nginx/conf/ ? ? ? ?#在172上将ssl目录拷贝到173上
scp -r /data/server/nginx/conf/vhost root@172.16.38.173:/data/server/nginx/conf/ ? #将vhost目录拷贝到173上

173上重启nginx
/data/server/nginx/sbin/nginx -s reload


验证nginx默认页面是否可以正常打开

6、nginx 日志分割

mkdir -p /data/server/nginx/logs ? #根据脚本提示,创建logs目录
mkdir -p /data/sh ? ? ? ? ? ? ? ? ? ? ? ? #创建脚本存放目录
chown -R www. /data/sh ? ? ? ? ? ? #修改sh目录属主权限

vim /data/sh/nginx-cutlog.sh ? ? ?#编辑nginx 日志分割脚本

#!/bin/bash
d=`date -d '1 day ago' +%Y%m%d`

d15=`date -d'15 day ago' +%Y%m%d`
logs_path="/data/server/nginx/logs" ? ? ? ? ? ?#要切割的日志路径


mv ${logs_path}/crm.access.log ${logs_path}/crm.access_${d}.log

kill -USR1 $(cat /data/server/nginx/logs/nginx.pid)

rm -rf ${logs_path}/crm.access_${d15}.log

保存退出

chmod +x /data/sh/nginx-cutlog.sh ? ?#授权执行权限
scp /data/sh/nginx-cutlog.sh root@172.16.38.173:/data/sh/ ? ?#将nginx-cutlog.sh拷贝到173的/data/sh/目录下
chmod +x /data/sh/nginx-cutlog.sh ? ?#在172、173赋予执行权限

在172.16.38.172、172.16.38.173服务器上添加任务计划:
crontab -e

5 0 * * * /bin/sh /data/sh/cut_log/nginx-cutlog.sh
0 5 * * * /usr/sbin/ntpdate asia.pool.ntp.org;hwclock -w

(二)、安装jdk

安装路径:
/data/server/jdk1.8.0_231

创建数据、日志路径

tar xf jdk-8u231-linux-x64.tar.gz -C /data/server ? #将安装包上传到/data/server,然后解压jdk二进制压缩包

配置环境变量
vim /etc/profile

export JAVA_HOME=/data/server/jdk1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

source /etc/profile ?#使配置生效

java -version ? ?#查看java版本

javac

(三)、安装部署tomcat服务

tomcat 目录结构:

bin:服务启动,关闭等可以执行文件.
conf: ? ? ? ? 配置文件目录,server.xml是tomcat主配置文件,web.xml为webapps提供默认的配置。
lib: ? ? ? ? ? ?库目录.
logs: ? ? ? ? 日志目录.
webapps: ? 应用程序部署目录.
work: ? ? ? jsp编译后的结果文件.


tomcat核心组件:


server:即tomcat进程实例,多个server,就是启动多个tomcat实例。
service:service服务用于关联connector与engine,connector可以使用不同的协议绑定不同的端口,进而处理不同的客户端连接请求。
engine:引擎可以定义多个虚拟主机,并对请求头进行分析,将请求发给对应的虚拟主机。
host:定义虚拟主机,以及资源路径context.


1、解压apache-tomcat-9.0.36.tar.gz压缩包

安装路径:/data/server/tomcat9
将apache-tomcat-9.0.36.tar.gz上传到 /data/server目录下

tar -xf apache-tomcat-9.0.36.tar.gz -C /data/server/ ? #将apache-tomcat-9.0.36.tar.gz 解压到/data/server/目录下
cd /data/server/
mv apache-tomcat-9.0.36 tomcat9 ? ?#将解压出来的apache-tomcat-9.0.36 重命名为tomcat9
chown -R www. /data/server/tomcat9 ?#将tomcat目录修改为www的属主权限


2、配置环境变量

vim /etc/profile

CATALINA_BASE=/data/server/tomcat9
PATH=$CATALINA_BASE/bin:$PATH
export PATH CATALINA_BASE

source /etc/profile ? #使配置生效

catalina.sh version ? #进到相应的目录下执行该命令,查看tomcat版本

catalina.sh start ? ?#进到相应的目录下执行该命令,前台启动tomcat服务

nohup ./startup.sh & ?#后台运行tomcat服务


3、设置tomcat服务开机启动

cd /usr/lib/systemd/system ? #进入system目录
vim tomcat.service ? ? ?#创建tomcat.service 文件

[Unit]
Description=Tomcat9
After=syslog.target network.target remote-fs.target nss-lookup.target
? ?
[Service]
Type=forking
Environment='JAVA_HOME=/data/server/jdk1.8.0_231'
Environment='CATALINA_PID=/data/server/tomcat9/bin/tomcat.pid'
Environment='CATALINA_HOME=/data/server/tomcat9/'
Environment='CATALINA_BASE=/data/server/tomcat9/'
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
?
WorkingDirectory=/data/server/tomcat9/
?
ExecStart=/data/server/tomcat9/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
? ?
[Install]
WantedBy=multi-user.target


保存退出

systemctl enable tomcat.service ? #先执行此命令设置为tomcat开机启动,再执行后续以下命令

随后可以使用以下命令操作tomcat服务:

systemctl start tomcat.service ? ?# 启动tomcat

systemctl stop tomcat.service ? ?# 关闭tomcat ??

systemctl restart tomcat.service ? ?# 重启tomcat?


mkdir -p /data/crm/log ? ? ? ? ? ? ? ? #创建CRM系统日志存放路径(在/data/web/oa/WEB-INF/classes/properties/config.properties此文件里配置,也是开发部署的发布目录)
chown -R www.www /data/crm ? ?#修改crm目录属主权限
?

vim /data/server/tomcat9/conf/server.xml ? ?#在server.xml文件,根据nginx.conf 中upstream oa的端口信息将端口8080改为8081:

<Connector port="8081" protocol="HTTP/1.1"
? ? ? ? ? ? ? ?connectionTimeout="20000"
? ? ? ? ? ? ? ?redirectPort="8443" />

再增加“/data/web/oa/”发布路径:

? ? <Context path="" docBase="/data/web/oa/" debug="0" reloadable="true" />

? ? ? ? <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"


4、tomcat 日志分割设置

分别用www用户登录172.16.38.172、172.16.38.173应用服务器上操作

/data/sh 目录下文件的属组均是www

vim /data/sh/tomcat9-cutlog.sh ? #编辑tomcat 日志分割脚本,保留60天的日志文件

#!/bin/bash
#cd ?`dirname $0`
#d=`date +%Y%m%d`
d=`date -d '1 day ago' +%Y%m%d`
d60=`date -d'60 day ago' +%Y%m%d`
cd ?/data/server/tomcat9/logs/
cp catalina.out catalina.out.${d}
echo "" > catalina.out
rm -rf catalina.out.${d60}
#chown www.www *

保存退出
chmod +x /data/sh/tomcat9-cutlog.sh
crontabl -e ? #添加到任务计划中
20 0 * * * /bin/sh /data/sh/tomcat9-cutlog.sh ? #每天20点执行


另外在Tomcat的logs目录,每天都会产生很多日志文件,我们也可以定期手工或使用定时任务来删除60天前的日志文件,这里使用手工的方式进行演示,

cd /data/server/tomcat9/logs ? ? ? ? ? ?#进入data/server/tomcat9/logs目录
find -mtime +60 -exec rm -f {} \; ? ? ?#删除60天前的日志
find -mtime +7 -exec rm -f {} \; ? ? ? ?#删除7天前的日志

(四)、安装配置keepalived(可以等到应用都调试完成,没有问题了再部署keepalived服务)

根据自己的网络情况规划好VIP地址,这里设置keepalived的VIP 为172.16.38.201,然后在防火墙上映射公网IP(目的NAT)124.XXX.154.XXX的80和443端口,在防火墙策略里添加允许124.XXX.154.XXX的80、433端口出去,在阿里云上将crm.XXX.com 解析124.XXX.154.XXX

yum install keepalived -y ? ? ?#172.16.38.172、172.16.38.173两台服务器均需安装keepalived
cd /etc/keepalived/
cp keepalived.conf keepalived.conf_bak
vim keepalived.conf ? ?#配置MASTER的编辑内容如下:

global_defs {
? ?notification_email {
? ? ?admin@centos.bz
? ?}
? ?notification_email_from keepalived@domain.com
? ?smtp_server 127.0.0.1
? ?smtp_connect_timeout 30
? ?router_id LVS_DEVEL
}
vrrp_script chk_http_port {
? ? ? ? ? ? ? ? script "/etc/keepalived/keepalived_check.sh"
? ? ? ? ? ? ? ? interval 2
? ? ? ? ? ? ? ? weight 2
}
vrrp_instance VI_1 {
? ? state MASTER ? ? ? ?############ 辅机为 BACKUP
? ? interface em1 ? ? ? ?######根据服务器网卡名称设置
? ? virtual_router_id 50 ####MASTER和BACKUP设置同一个virtual_router_id
? ? mcast_src_ip 172.16.38.172 ?###设置MASTER的IP地址
? ? priority 102 ? ? ? ? ? ? ? ? ?########### 权值要比BACKUP 高
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
track_script {
? ? ? ? chk_http_port ### 执行监控的服务
? ? ? ? }
? ? virtual_ipaddress {
? ? ? ?172.16.38.201
? ? }
}

scp /etc/keepalived/keepalived.conf root@172.16.38.173:/etc/keepalived/ ? ? ?#修改完后拷贝到BACKUP,然后编辑内容做相应的修改即可

编辑检测脚本
vim /etc/keepalived/keepalived_check.sh
内容如下:

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
? ? ? ? ? ? ? ? /data/server/nginx/sbin/nginx
? ? ? ? ? ? ? ? sleep 3
? ? ? ? ? ? ? ? if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
? ? ? ? ? ? ? ? ? ? ? ?killall keepalived
? ? ? ? ? ? ? ? fi
fi

保存退出

chmod +x /etc/keepalived/keepalived_check.sh ? ?#授权
scp /etc/keepalived/keepalived_check.sh root@172.16.38.173:/etc/keepalived/ ? ?#拷贝到172.16.38.173服务器的相应目录下
chmod +x /etc/keepalived/keepalived_check.sh ? #再进行授权
yum install psmisc -y ? ? ? ? ? #脚本中用到killall 命令,需要安装pamisc
systemctl start keepalived ? # 启动keepalived 服务
systemctl enable keepalived ? #设置开机启动keepalived服务

ip a # 查看虚拟IP172.16.38.201是否在MASTER 服务器上

[root@localhost keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
? ? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
? ? inet 127.0.0.1/8 scope host lo
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 ::1/128 scope host
? ? ? ?valid_lft forever preferred_lft forever
2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
? ? link/ether 34:73:5a:9e:de:84 brd ff:ff:ff:ff:ff:ff
? ? inet 172.16.38.172/24 brd 172.16.38.255 scope global noprefixroute em1
? ? ? ?valid_lft forever preferred_lft forever
? ? inet 172.16.38.201/32 scope global em1
? ? ? ?valid_lft forever preferred_lft forever
? ? inet6 fe80::e3a4:2c6d:b1ca:96f/64 scope link noprefixroute
? ? ? ?valid_lft forever preferred_lft forever
3: em2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
? ? link/ether 34:73:5a:9e:de:85 brd ff:ff:ff:ff:ff:ff
4: em3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
? ? link/ether 34:73:5a:9e:de:86 brd ff:ff:ff:ff:ff:ff
5: em4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
? ? link/ether 34:73:5a:9e:de:87 brd ff:ff:ff:ff:ff:ff


虚拟IP172.16.38.201,对外解析124.XXX.154.XXX

在我们的电脑上绑定host,进行测试

172.16.38.201 crm.XXX.com

在浏览器中访问VIP 地址172.16.38.201,均能直接跳转到tomcat默认页面,等待研发提供程序代码部署即可,正式访问CRM 系统页面


二、CRM系统数据库服务器配置

(一)、安装mysql数据库

172.16.38.174 ?数据库服务器(主)
172.16.38.175 ?数据库服务器(备)

分别在174、175服务器上执行

创建/data/software目录
mkdir -p /data/software
cd /data/software

下载mysql-5.7.28二进制安装包

wget -c https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz

也可从别的服务器上找个mysql-5.7.28.tar.gz

yum install libaio -y

redhat系列需要卸载自带的mariadb

[root@localhost server]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
[root@localhost server]# ?rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64


创建一个mysql用户和组 ? (根据实际情况看,是否需要允许mysql用户可以登录)

groupadd mysql ? ? #添加mysql组
useradd -r -g mysql -s /bin/false mysql ? ? ? #添加mysql用户设置其不允许登录


解压文件
#解压下载的二进制包到需要安装mysql的目录
mkdir -p /data/server
tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz ?-C /data/server


开始安装
以下目录(path)为/data/server

1、创建一个mysql的软链接

cd /data/server?
ln -s mysql-5.7.28-linux-glibc2.12-x86_64 mysql

2、添加mysql环境变量

vim /etc/profile
#添加下面一行
export PATH=$PATH:/data/server/mysql/bin
source /etc/profile ? ? #使环境变量生效


3、创建数据目录

cd /data/server/mysql
mkdir data
chown mysql.mysql data
chmod 750 data
mkdir -p /data/server/mysql/logs
touch /data/server/mysql/logs/error.log
chown -R mysql.mysql /data/server/mysql/logs

4、初始化mysql

cd /data/server/mysql
bin/mysqld --initialize ?--user=mysql ?--basedir=/data/server/mysql ?--datadir=/data/server/mysql/data

#完成之后会有一个临时密码

Gqd:!@1kiCO*UA

5、配置ssl

#bin/mysql_ssl_rsa_setup
bin/mysql_ssl_rsa_setup --datadir=/data/server/mysql/data

6、编辑配置文件(主、备库my.cnf文件做相应的配置log-bin、server-id)

主库:
log-bin = master-bin
server-id=1

备库:
server-id=2

vim /etc/my.cnf ?#以下是主库的my.cnf文件配置信息

[client]
port = 3306
socket = /data/server/mysql/data/mysql.sock
#net_buffer_length = 300000
#max_allowed_packet = 1G
default-character-set=utf8
[mysqld]
#skip-grant-tables?
port = 3306
socket = /data/server/mysql/data/mysql.sock
basedir = /data/server/mysql
datadir = /data/server/mysql/data
pid-file = /data/server/mysql/data/mysql.pid
user = mysql
bind-address = 0.0.0.0
log_error = /data/server/mysql/logs/error.log
relay-log=relay-log
relay-log-index=relay-log.index
log-bin = master-bin
server-id=1
innodb_file_per_table=ON
skip_name_resolve=ON
interactive_timeout = 12000
wait_timeout = 12000
net_buffer_length = 300000
max_allowed_packet = 1G
innodb_buffer_pool_size = 6G
innodb_log_buffer_size = 1G
innodb_log_file_size = 2G
innodb_write_io_threads = 16
innodb_flush_log_at_trx_commit = 0
max_connections = 5120
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
max_heap_table_size = 67108864
character-set-server=utf8
lower_case_table_names = 1
#sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES
[mysqld_safe]
port = 3306
socket = /data/server/mysql/data/mysql.sock
basedir = /data/server/mysql
datadir = /data/server/mysql/data
pid-file = /data/server/mysql/data/mysql.pid
user = mysql
bind-address = 0.0.0.0
log_error = /data/server/mysql/logs/error.log
relay-log=relay-log
relay-log-index=relay-log.index
log-bin = master-bin
server-id=1
#innodb_file_per_table=ON
skip_name_resolve=ON
interactive_timeout = 12000
wait_timeout = 12000
net_buffer_length = 300000
max_allowed_packet = 1G
innodb_buffer_pool_size = 6G
innodb_log_buffer_size = 1G
innodb_log_file_size = 2G
innodb_write_io_threads = 16
innodb_flush_log_at_trx_commit = 0
max_connections = 5120
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
max_heap_table_size = 67108864
default-character-set=utf8

7、启动mysql

bin/mysqld_safe --user=mysql &


8、复制mysql启动脚本

cp support-files/mysql.server /etc/init.d/mysqld ? #将服务文件拷贝到init.d下,并重命名为mysql

#之后可以使用 /etc/init.d/mysqld start|stop|restart 来启动、关闭、重启mysql

/etc/init.d/mysqld start ? ? #启动
service mysql status ? ? #查看mysql状态
/etc/init.d/mysqld status ?#查看mysql状态

9、设置开机自启动mysql服务

chmod +x /etc/init.d/mysqld ?#赋予可执行权限
chkconfig --add mysqld ? ? #添加服务
chkconfig --list ? ? #显示服务列表,如果看到mysql的服务,并且3,4,5都是on的话则成功,
chkconfig --level 345 mysqld on ? ?#如果是off,则键入此命令
reboot ? ?#重启电脑
netstat -na | grep 3306 ? ?#验证电脑重启后mysql服务是否启动
ps -ef | grep mysql ? ?# 查看mysql服务进程
service mysql status ? ? #查看mysql状态
/etc/init.d/mysqld status ?#查看mysql状态

10、登录mysql并修改临时密码

mysql -u root -p ? #输入刚才的临时密码Gqd:!@1kiCO*UA

> set password for root@localhost = password('174p5ffdr7s.Z'); ? ? #在172.16.38.174服务器上修改主数据库root新密码
> set password for root@localhost = password('174p5ffdr7s.Z'); ? ? #在172.16.38.175服务器上修改172.16.38.175备库的root新密码


11、配置数据库主从

(1)部署master主库服务器:

登录mysql,接下来进行验证二进制功能开启是否成功
mysql -u root -p?

方法1、查看主库状态
show master status;
方法2、查询主库日志文件
show master logs;
方法3、查询二进制变量
show variables like '%log_bin';

授权,指定哪些机器(网段)可以连接这台主库服务器,建立复制所要使用的用户

useradd repl -g repl
passwd repl ? #设置repl的用户密码,输入123456

grant replication slave on *.* to 'repl'@'172.16.38.%' identified by '123456';
grant replication slave on *.* to 'repl'@'172.20.%' identified by '123456';

mysql> flush privileges; ? # 刷新权限生效

mysql> show master status; ? ? #查看File、Position 信息,一会用到

?File ? ? ? ? ? ? ?| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000004 | ? ? ?154?


查看数据库用户、主机访问权限
use mysql;
select Host,User from user;
select host,user,authentication_string from user;

(2)部署slave从库服务器:

可以将主库的my.cnf文件拷贝过来,去掉log-bin = master-bin,server-id=1 更改为server-id=2

修改my.cnf文件后,重启mysql 服务
/etc/init.d/mysqld restart

登录mysql,连接主库:

change master to master_host='172.16.38.174',master_user='repl',master_password='123456',master_log_file='master-bin.000004',master_log_pos=154;


mysql> start slave; ? ?#启动slave从库?
mysql> show slave status\G ? ? #查看主从连接状态

当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。


查看主、备库数据库数量及名称是否一致
mysql> show databases;

主库上查看二进制日志文件
mysql> show binlog events in 'master-bin.000004';

12、在172.16.38.174主库上创建数据库用户

在master主库上创建数据库用户:
创建mysql用户crm,并授权crm远程和数据库的访问权限:

mysql -u root -p?
CREATE USER 'crm'@'localhost' ?IDENTIFIED BY '149fdjsqqdYeph'; ? ?#创建crm用户,授权本地登录?
grant all privileges on zl9_crm.* to 'crm'@'172.16.38.%' identified by '174OnSdfevhYeph'; ? ? ?#授权crm用户访问zl9_crm 数据库权限
grant all privileges on zl9_crm.* to 'crm'@'172.20.%' identified by '174OnSdfevhYeph'; ? ? ? ? ?#授权crm用户访问zl9_crm 数据库权限

flush privileges;
quit


配置数据库root用户远程访问权限:

grant all privileges on *.* to 'root'@'172.16.38.%' identified by '174p5ffdr7s.Z';
grant all privileges on *.* to 'root'@'172.20.%' identified by '174p5ffdr7s.Z';
flush privileges;

###如果要删除MySQL用户账号crm

mysql> DROP USER IF EXISTS 'crm'@'localhost';

###撤销已经赋予给 MySQL 用户权限的权限。

revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:

grant ?all on *.* to ? dba@localhost; ? #授权dba用户本地访问所有数据库的权限
revoke all on *.* from dba@localhost; ? #撤销dba用户本地访问所有数据库的权限
revoke all on zl9_crm.* from 'crm'@'%'; ? #撤销mysql用户crm的访问zl9_crm数据库的权限
revoke all on *.* from 'crm'@'%'; ?#撤销mysql用户crm的所有访问权限

mysql> REVOKE ALL PRIVILEGES ON zl9_crm.* TO 'crm'@'localhost'; ? ? #撤销crm用户访问zl9_crm数据库的权限


mysql> SHOW GRANTS FOR 'crm'@'localhost'; ? ? ? #显示MySQL用户权限


查看数据库用户、主机访问权限
use mysql;
select Host,User from user;
select host,user,authentication_string from user;

13、创建数据库

在master主库上创建CRM系统的数据库(zl9_crm):

创建一个zl9_crm数据库:
mysql> create database zl9_crm; ? ? ?# 创建数据库
mysql> use zl9_crm; ? ? ? ? ? ? ? ? ? ? ? ? # 使用已创建的数据库?
mysql> set names utf8; ? ? ? ? ? ? ? ? ? # 设置编码

在slave从库上查看,数据库数量及名称是否与master主库一致
mysql> show databases;


问题排查例子(Slave_SQL_Running: No):
因在master 上删除了jfedu数据库(drop database jfedu;),在slave上show slave status\G 查看slave的状态时发现Slave_SQL_Running: No,
处理方法:
1、在master服务器上设置set sql_log_bin=0; 然后删除要删除的数据库,再设置set sql_log_bin=1; 刷新生效 flush privileges;?
2、查看master 的pos点,show master status;
3、这时需要在slave上执行stop slave,根据master 的pos点信息,快速重新连接主库change master to
change master to master_host='172.20.26.37',master_user='tongbu',master_password='123456',master_log_file='master-bin.000001',master_log_pos=2760;
4、成功运行change master to后,执行start slave;,再执行show slave status\G 查看slave的状态,
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
5、再在master创建新的数据库,就能同步到slave 上了。


###如果有老系统的数据库需要导入的话,可以先在老系统中将数据库备份导出,再导到新数据库中

###数据库备份mysqldump命令


mysqldump --skip-opt ?-q -uroot -p --databases zl8 | gzip > zl8.sql.gz ? ? #将数据库zl8导出到名为zl8.sql.gz的压缩包,拷贝到新服务器中


###在新服务器中进行数据库导入

gunzip -c zl8.sql.gz >zl8.sql ? ? #对zl8.sql.gz、进行解压

导入数据库:

mysql -uroot -p zl9_crm < ?/data/zl8.sql ? ? #将zl8.sql数据库导入到zl9_crm 数据库中

或者通过数据库连接工具Navicat Premium 15进行备份和还原


###mysql 主从数据库重启顺序:

停数据库 ?先备后主?
启数据库 ?先主后备

(二)、数据库备份设置

将数据库备份文件存放在172.20.26.193备份服务器上

1、创建数据库备份文件存放目录,编辑备份脚本内容
在172.16.38.175从库服务器上
mkdir -p /data/database_bak ?#在CRM的从库服务器上创建database_bak数据库本地备份目录


cd /data/sh ? #进入sh目录,根据CRM系统的数据库zl9_crm,修改备份脚本名称及内容


vim zl9_crm_backup.sh ? ###修改root数据库密码、数据库名称zl9_crm以及远程备份路径:

#!/bin/bash
?user="root"
?password="175VDFEWddQiTakYWGeQRSJ"
?host="localhost"
?db_name="zl9_crm"
?backup_path="/data/database_bak/zl9_crm"
?date=$(date +"%Y%m%d%H")
# Dump数据库到SQL文件
##因为有一个大写表dict_appType 所以加了 -f;数据库配置文件改了后 再改回来去掉 -f
/data/server/mysql/bin/mysqldump -f --user=$user --password=$password --host=$host $db_name > $backup_path/$db_name-$date.sql
gzip $backup_path/$db_name-$date.sql
##传到远端备份服务器
scp $backup_path/$db_name-$date.sql.gz root@172.20.26.193:/data/data_bak/crm_databak/zl9_crm
# 删除30天之前的就备份文件
find $backup_path/* -mtime +30 -exec rm {} \;


保存退出


2、在172.16.38.175、172.20.26.193上创建相应的备份存放目录,并将172.16.38.175与172.20.26.193两台服务器配置好免密

在172.16.38.175服务器上

mkdir -p /data/database_bak/zl9_crm


在172.20.26.193服务器上

mkdir -p /data/data_bak/crm_databak/zl9_crm


配置172.16.38.175与172.20.26.193两台服务器之间的免密访问

在172.16.38.175从库上

ssh-keygen -t rsa?
chmod 700 ~/.ssh/
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cd ~/.ssh/

chmod 600 ?authorized_keys

在172.20.26.193备份服务器上

vim authorized_keys ? ?#打开authorized_keys,把内容追加到172.20.26.193上的authorized_keys 文件下面,做好备注

systemctl restart sshd ?或者 ?service sshd restart ? ? #重启175、193各台的sshd 服务

scp -r /data/sh root@172.20.26.193:/data/share ? #测试把一个文件从172.16.38.175 scp拷贝到172.20.26.193服务器,不提示输入密码即可


3、添加任务计划

在172.16.38.175服务器上------CRM系统上线后开启任务计划

crontab -e

0 1 * * * /bin/sh /data/sh/zl9_crm_backup.sh ?>/dev/null
0 5 * * * /usr/sbin/ntpdate asia.pool.ntp.org;hwclock --systohc


三、安装zabbix3.4客户端(172.20.26.136为zabbix监控系统服务器端)

我们要将172.16.38.172-175这4台服务器添加到我们的zabbix监控系统里,所以需要这四台服务器依次安装配置zabbix客户端。

rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm ? #下载zabbix3.4源

报错警告(也可以不处理此警告,直接yum install ):
警告:/var/tmp/rpm-tmp.f38CWl: 头V4 RSA/SHA512 Signature, 密钥 ID a14fe591: NOKEY

?#这是由于yum安装了旧版本的GPG keys造成的,执行如下:
rpm --import /etc/pki/rpm-gpg/RPM* ?
rpm -qa | grep zabbix ? ?#查询已安装的rpm源
zabbix-release-3.4-2.el7.noarch

yum install -y zabbix-agent ? #安装zabbix客户端
#修改/etc/zabbix/zabbix_agentd.conf

#Server=127.0.0.1
Server=172.20.26.136
#ServerActive=127.0.0.1
ServerActive=172.20.26.136 ? ? ? ? ? //server端ip
HostName=CRM_NEW_APP1 ? ? ? ? ? ? ? ? ? ?//主机名唯一的
HostMetadataItem=system.uname ? ? ? ? ?//设置默认模板,server端


systemctl start zabbix-agent ? #启动agent服务
systemctl enable zabbix-agent ?#开机启动agent服务

4台服务器依次添加主机到zabbix服务器中
zabbix 服务器web管理界面,添加主机,群组添加到“Linux servers”,模板选择“Template Dell Raid Card”和“Template OS Linux”,等待zabbix变绿色即可。

文章来源:https://blog.csdn.net/lqcbj/article/details/135689009
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。