上午
1、web01与web02服务器搭建
ip:10.0.0.11
systemctl
stop
filewalld
systemctl disable firewalld
setenforce
0
vim
/etc/selinux/config
SELINUX
=
disabled
yum
-y
install nginx
echo
"web----------01"
> /usr/share/nginx/html/index.html
nginx
ip:10.0.0.12
systemctl
stop
filewalld
systemctl disable firewalld
setenforce
0
vim
/etc/selinux/config
SELINUX
=
disabled
yum
-y
install nginx
echo
"web----------02"
> /usr/share/nginx/html/index.html
nginx
2
、
nat
服务器搭建
两个网卡
ip:10.0.0.10(
内网
ip)
、
10.0.0.23(
外网
ip)
systemctl
stop
filewalld
systemctl disable firewalld
setenforce
0
vim
/etc/selinux/config
SELINUX
=
disabled
3
、
dns
服务器搭建
ip:10.0.0.3
yum
-y
install bind
vim
/etc/named.conf
listen-on port
53
{
127
.0.0.1;any; };
......
allow-query { localhost;any; };
vim
/etc/named.rfc1912.zones
zone
"abc.com"
IN {
type master;
file
"abc.com.zone"
;
allow-update { none; };
};
cp
-p
/var/named/named.localhost /var/named/abc.com.zone
vim
/var/named/abc.com.zone
web01 A
10
.0.0.11
web02 A
10
.0.0.12
nat A
10
.0.0.10
ds A
10
.0.0.23
systemctl
start
named
下午
1
、时间服务器搭建
ntp
服务器搭建在
nat
服务器上
(ip
地址为
10.0.0.10)
[root@ntp ~]
# yum -y install ntpdate
[root@ntp ~]
# ntpdate cn.ntp.org.cn
[root@ntp ~]
# yum -y install ntp
[root@ntp ~]
# vim /etc/ntp.conf
15
行加入
restrict
10
.0.0.0 mask
255
.255.255.0 //
允许
10.0.0.0
网段的主机访问
[root@ntp ~]
# which ntpdate
[root@ntp ~]
# crontab -e
*
2
* * * /usr/sbin/ntpdate cn.ntp.org.cn
[root@ntp ~]
# systemctl start ntpd
[root@ntp ~]
# systemctl enable ntpd
其余内网主机
yum
-y
install ntpdate
crontab
-e
//
定时与
ntp
服务器同步时间
30
* * * * /usr/sbin/ntpdate
10
.0.0.10
date
date
-s
"2014-1-1 14:00:00"
date
ntpdate
10
.0.0.10
2
、规划表
3
、
ipvsadm
ipvsadm.x86_64
通常是指用于
x86_64
架构的
IP
虚拟服务器管理工具(
IP Virtual Server
Administration
)。
IPVS
(
IP Virtual Server
)是
Linux
内核中的一种负载均衡技术。
ipvsadm
工具用于配置和管理
IPVS
规则。
例如,您可以使用
ipvsadm
来设置负载均衡的算法(如轮询、加权轮询等)、定义真实服务器
(
Real Server
)、添加服务(
Service
)等。
[root@nat ~]
# yum -y install ipvsadm.x86_64
[root@nat ~]
# ipvsadm -h #
显示
ipvsadm
工具的帮助信息
[root@nat ~]
# ipvsadm -C #
清空当前的
IPVS
规则设置。
[root@nat ~]
# ipvsadm -L #
用于列出当前系统中已配置的
IPVS
规则和相关信息
IP Virtual Server version
1
.2.1
(size
=
4096
)
Prot LocalAddress:Port Scheduler Flags
-
> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@nat ~]
# ipvsadm -L -n #
用于以数字形式列出当前系统中已配置的
IPVS
规则和相关
信息
IP Virtual Server version
1
.2.1
(size
=
4096
)
Prot LocalAddress:Port Scheduler Flags
-
> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@nat ~]
# ipvsadm -A -t 10.0.0.23:80 -s rr
(失败)
4
、
mysql
补充 (
slave
服务器不⼩⼼写⼊数据的解决⽅案
)
1
、正常情况下,
master
既可以读,也可以写,但是
slave
从服务器 只能读取操作,⼀旦我们在
slave
从服务器中写⼊数据,主从结 构会失败。
2
、
show slave status\G
3
、如果数据⽐较少,可以通过跳过当前语句的⽅式解决,但是如果 从服务器写⼊的数据⽐较多,架
构必须重新搭建
4
、可通过变量
sql_slave_skip_counter
临时跳过事务进⾏处理
mysql
>
set GLOBAL
sql_slave_skip_counter
=
N
# n
代表跳过的
n
个事务
mysql
>
stop
slave
;
mysql
>
start slave
;
5
、跳过事务应该在
slave
上运⾏
6
、传统的
ab
复制⽅式可以使⽤,基于
GTIDs
的⽅式不⽀持
5
、
mysql
补充(基于
gtids
的主从复制搭建)
主从同步太过频繁,浪费资源。添加
gtid
,只添加提交的事务。
1
、什么是
GTIDs
1
、
Global transaction identifiers
全局事务标识符,是
mysql5.6
新加
⼊
的技术
2
、使
⽤
GTIDs
时,每
⼀
个事务都可以被识别和跟踪
3
、添加的新的
slave
或者发
⽣
故障时,需要将
master
身份或者
⻆⾊
迁移到
slave
上时,都需要考虑哪
⼀
个
⼆
进制
⽇
志以及哪个
position
值,极
⼤
简化了相关操作。
4
、
GTIDs
是完全基于事务的,因此不
⽀
持
MYISAM
存储引擎
5
、
GTIDs
由
source_id
和
transaction
组成:
source_id
来源于
server.uuid
可以在
auto.cnf
中看到
tansaction_id
是
⼀
个序列数字,
⾃
动
⽣
成
2
、限制条件
1
、不
⽀
持
⾮
事务引擎(
MyISAM
)因为可能会导致多个
gtid
分布给同
⼀
个事务
2
、
create table select
语句不
⽀
持(主库语法报错)
3
、
create
、
drop temprary table
语法不
⽀
持
4
、必须使
⽤
enforce-gtid-consistency
参数
5
、
sql-slave-skip-counter
不
⽀
持
6
、
gtid
复制环境中必须统
⼀
开启
gtid
或者关闭
gtid
7
、在
5.7
之前使
⽤
mysql upgrade
命令也会出现问题
3
、
replication
是基于传统的⽅式部署,并且已经在运⾏,利⽤已经 存在的环境升
级⾄基于
GTIDs
的
replication
1
.
修改配置
⽂
件,
⽀
持
GTIDs
(主从)
2
.
重启数据库(主从)
3
.
为了保证数据
⼀
直,
master
和
slave
都设置为只读
4
.
从服务器上重新配置同步
4
、实践步骤
1
.
修改配置
⽂
件
⽀
持
GTIDs
# master
中
[mysqld]
basedir
=
/usr/local/mysql
datadir
=
/usr/local/mysql/data
socket
=
/tmp/mysql.sock
port
=
3306
log-error
=
/usr/local/mysql/data/db01-
master.err
log-bin
=
/usr/local/mysql/data/binlog
server-id
=
10
character_set_server
=
utf8mb4
gtid-mode
=
on
# GTID
(
Global Transaction Identifier
,全局事务标识符)模式开启。
GTID
是
MySQL
用于
在主从复制环境中唯一标识每个事务的标识符。开启此模式可以更方便地进行主从切换、故障恢复以及数据迁移等操作。例如,当需要将从库提升为主库时,通过 GTID
可以更准确和高效地确定需要应用的事务。
log-slave-updates
=
1
#
这个参数表示从服务器将接收到的更新操作记录到其自身的二进制日志中。这对于构建多层级的复制拓扑结构非常有用。比如,如果有一个主库,多个从库,其中一个从库又作为另一个从库的主库时,就需要开启这个参数,以便将更新传递下去。
enforce-gtid-consistency
#
强制
GTID
的一致性。这有助于确保在复制环境中,所有的事务都符合
GTID
的规则和要求,避免出现不一致或错误的情况。比如说,如果有事务违反了 GTID
的某些约束,如重复的
GTID
或不连续的GTID 序列,系统会进行相应的处理或报错。
# slave
中
[mysqld]
basedir
=
/usr/local/mysql
datadir
=
/usr/local/mysql/data
socket
=
/tmp/mysql.sock
port
=
3310
log-error
=
/usr/local/mysql/data/db01-
slave.err
relay-log
=
/usr/local/mysql/data/relaylog
server-id
=
11
character_set_server
=
utf8mb4
log-bin
=
/usr/local/mysql/data/binlog
#
指定了二进制日志的存储路径为
/usr/local/mysql/data/binlog
。二进制日志用于记录数据库
的更改操作,对于数据备份、恢复、主从复制等操作至关重要。例如,在进行数据恢复时,可以通过读取二进制日志中的操作来还原到特定的时间点。
gtid-mode
=
on
#
开启
GTID
模式,使得事务在整个复制拓扑中有唯一且全局的标识符。这为复制的管理和故障转移提供了更便利和可靠的方式。比如,在主从切换时,可以基于 GTID
快速确定需要同步的事务,而无需依赖传统的基于二进制日志文件和位置的方式。
log-slave-updates
=
1
#
允许从服务器将从主服务器接收到的更新操作记录到自身的二进制日志中。这对于构建多层级的复制架构非常有用。假设您有一个主库 A
,从库
B
,而从库
B
又作为从库
C
的主库,那么
B
就需要开启此参数,将从 A
接收到的更新传递给
C
。
enforce-gtid-consistency
#
强制保证
GTID
的一致性,确保所有的事务都遵循
GTID
的规则和要求,防止出现不一致或错误的情况。例如,如果有事务试图违反 GTID
的唯一性或连续性等规则,系统会进行阻止或报错,以维护数据库的一致性和可靠性。
skip-slave-start
#
这个参数会使得在服务器启动时不会自动启动从库复制进程。这通常在需要手动配置或检查从库的初始状态,或者在特定情况下需要暂时停止从库复制时使用。比如说,在对从库进行一些重大的配置更改或数据修复之前,可能会先使用此参数来防止从库自动启动复制,以免造成不可预期的结果。
2
、重启启动
mysql
服务
[root@mysql-zhu ~]
# service mysql8 restart
Shutting down MySQL.......... SUCCESS!
Starting MySQL.. SUCCESS!
[root@mysql-slave ~]
# service mysql8 restart
Shutting down MySQL.. SUCCESS!
Starting MySQL... SUCCESS!
3
、主从配置只读模式
mysql>
set
@@global
.read_only
=
ON;
mysql>
set
@@global
.read_only
=
ON;
4
、
slave
重新配置
change master to
mysql>
stop
slave;
mysql> change master to
-
>
master_host
=
'10.0.0.51'
,
-
>
master_user
=
'slave'
,
-
>
master_password
=
'123'
,
-
>
master_port
=
3306
,
-
>
master_auto_position
=
1
;
Query OK,
0
rows affected,
8
warnings (0.01
sec)
mysql>
start
slave;
mysql> show slave status\G;
5
、关闭主从服务器的只读模式
mysql>
set
@@global
.read_only
=
OFF;
mysql>
set
@@global
.read_only
=
OFF;
6
、获得公钥
[root@slave ~]
# mysql -uslave -p123 -h 10.0.0.51 -P3306 --get-server-public
key
mysql> quit
Bye