上午
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