1.安装VMware
VMware16 pro:https://www.aliyundrive.com/s/wF66w8kW9ac
centos镜像:https://www.aliyundrive.com/s/UQMBPEovxNgps:镜像下载之后修改后缀为iso
2.win10搭建centos7
这里直接搜索上海
3.解决宿主机和虚拟机之间的网络互通问题
以上安装转至https://blog.csdn.net/weixin_52799373/article/details/124324077?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170277821616800188520670%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=170277821616800188520670&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-124324077-null-null.142v96pc_search_result_base3&utm_term=vmware%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187
用以上安装之后我发现内部是连接不上外网以及我宿主机无法访问这台虚拟机
3.1查看网段
3.2配置宿主机的vm8
3.3编辑配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROT0:设置为静态ip
IPADDR:就是这台虚拟机的ip
NETMASK:子网掩码,跟我们宿主机配置的一样就行
GATERWAY:网关,同样配置成我们外部的
3.4重启network
java service network restart
发现能访问外网了,宿主机也能访问虚拟机内部
按照以上的模式又创建了一个虚拟机,也能ping通
4.安装docker
4.1.安装 Docker-CE
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
4.2.设置 docker repo 的 yum 源
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
4.3.安装 docker,以及 docker-cli
sudo yum install docker-ce docker-ce-cli containerd.io
启动 docker
sudo systemctl start docker
4.4.设置 docker 开机自启
sudo systemctl enable docker
5.配置 docker 镜像加速
sudo mkdir -p /etc/docker```
```java sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://fka6fyyd.mirror.aliyuncs.com"]
}
EOF```
```java
sudo systemctl daemon-reload
sudo systemctl restart docker
5.安装mysql
5.1、下载镜像文件
docker pull mysql:5.7
5.2、创建实例并启动
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
参数说明
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口
-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂载到主机
-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机
-v /mydata/mysql/data:/var/lib/mysql/:将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=root:初始化 root 用户的密码
5.3.MySQL 配置
vi /mydata/mysql/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
5.4.通过容器的 mysql 命令行工具连接
docker exec -it mysql mysql -uroot -proot
5.5.设置 root 远程访问
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
5.6.设置 mysql开机自启
docker update mysql --restart=always
6.搭建mysql的主主复制
6.1.1实现原理
MySQL双主双活是指两台mysql服务器mysql-1、mysql-2都为master主节点服务器,同时又是对方的slave从节点,每个数据库都可作为主数据库使用,并将对数据库操作的数据同步至另外一台mysql服务中。 当应用服务开发过程中使用了mysql-1连接信息,在打包发布后,数据库连接信息已经固定,当数据库mysql-1出现异常时,需要人工干预先将应用服务停止–>将应用服务的mysql连接信息改为mysql-2 -->在启动应用服务器,比较繁琐,当应用服务器较多时,一个一个关闭,修改,再重启,将耽误更多时间,应用服务器修复故障时间延长,严重时会造成灾难性的后果。
故而引入了keepalived,keepalived通过VIP虚拟IP的漂移实现高可用,在相同集群内发送组播包,master主通过VRRP协议发送组播包,告诉从主的状态。
当我们通过keepalived虚拟出一个ip服务 mysql-3,应用服务只需要将mysql配置信息更改为mysql-3的配置信息,mysql-3实际代理的实体服务器为mysql-1或mysql-2。
例如:当mysql-3实际代理mysql-1时,mysql-1服务出现故障后,keepalived通过自身机制,自动将mysql-2作为实际代理主服务器,不需要人工干预去修改mysql配置信息,从而实现了高可用。
MySQL复制过程分为三步:
- master将改变记录到二进制日志(binary log)
- slave将master的binary log拷贝到它的日志(relay log)
- slave重做日志中的事件,将改变应用到自己的数据库中
6.1.2准备两台服务器
主:192.168.9.13
从:192.168.9.14
6.1.3配置主13–>从14的主从复制
6.1.3.1配置主13
6.1.3.1.1创建用户:用于跟从库192.168.9.14备份
CREATE USER 'cpuser'@'192.168.9.14' IDENTIFIED WITH mysql_native_password BY 'root';
GRANT REPLICATION SLAVE ON *.* TO 'cpuser'@'192.168.9.14';
注:这里的cpuser 和root是一会儿备份服务器配置是需要用到的master服务器的用户名和密码,需要记下来)
6.1.3.1.2修改主库的配置文件
vi /mydata/mysql/conf/my.cnf
注意这里不是/etc/my.cnf,因为我上面用docker安装的,是把配置文件挂载到/mydata/mysql/conf/my.cnf
# 启用二进制日志记录 (binlog),用于记录所有对数据库的修改操作,以便进行数据恢复和复制等操作。
log-bin=mysql-bin
# 指定 binlog 是否需要同步写入磁盘,可以保证数据的完整性和持久性。默认值为 0,即不强制同步写入磁盘
sync_binlog = 1
# 指定 binlog 的格式,mixed 表示使用基于语句和基于行的混合模式,可以在不同场景下选择最佳的模式。
binlog_format=mixed
#服务器唯一性标识符,每台服务器配置必须保存不一样
server-id=1
# 指定 binlog 的校验方式,none 表示不进行校验。NONE, CRC32, 或 SHA256。默认值为 NONE
binlog_checksum=none
# 是否为只读模式,可选值为 0 或 1。默认值为 0,即不是只读模式。如果设置为 1,
# 则表示 MySQL 服务器将只允许读操作,不允许写操作。这个参数适用于需要限制写入操作的情况,比如备份服务器或只需要查询的从库。
read-only=0
#需要备份的那个数据库名叫“test_db”(可选)如果不指定数据库,默认同步所有的数据库,若有多个,则配置多个binlog-do-db
binlog-do-db=test_db1
binlog-do-db=test_db2
#这里设置用来台服务器来做备份,按个人情况定 我们这里是主主复制,所以是两台,。
auto-increment-increment=2
#表示这台服务器序号,从1开始,不超auto-increment-increment
#配置完该数据库中插入第一个数据id=1,第二条数据id=3而不是2,避免的数据库集群中id冲突
auto-increment-offset=1
# 用于指定当从库出现错误时,是否跳过该错误并继续进行复制操作。
# 可选值为 ALL 或一个正整数。默认值为 0,即不跳过任何错误。如果设置为 ALL,则表示跳过所有错误,不建议在生产环境中使用。
slave-skip-errors = all
6.1.3.1.3重启mysql
6.1.3.1.登录Mysql数据库,查看Master状态
Position:记住这里的值,在后面配置需要用到
6.1.3.2配置从库
6.1.3.2.1修改从库的配置文件
vi /mydata/mysql/conf/my.cnf
# 启用二进制日志记录 (binlog),用于记录所有对数据库的修改操作,以便进行数据恢复和复制等操作。
log-bin=mysql-bin
# 指定 binlog 是否需要同步写入磁盘,可以保证数据的完整性和持久性。默认值为 0,即不强制同步写入磁盘
sync_binlog = 1
# 指定 binlog 的格式,mixed 表示使用基于语句和基于行的混合模式,可以在不同场景下选择最佳的模式。
binlog_format=mixed
#服务器唯一性标识符,每台服务器配置必须保存不一样
server-id=2
# 复制过程中的一个过滤器,用于指定在主库上进行哪些数据库的更改需要被复制到从库。
# 即replicate-do-db=test_db1 表示仅复制名为 test_db1 的数据库的更改到从库。
# 如果不指定数据库,默认同步所有的数据库,若有多个,则配置多个replicate-do-db
replicate-do-db=test_db1
replicate-do-db=test_db2
# MySQL 从服务器中继日志的名称和位置。relay-log=mysql.relay.bin 表示中继日志的文件名为 mysql.relay.bin
relay-log=mysql.relay.bin
# 参数指定从服务器是否将更新记录到自己的二进制日志中。当该参数设置为 ON 时,从服务器会将更新记录到自己的二进制日志中,
# 以便在后续的复制过程中,能够将这些更新发送给其它从服务器。
# 默认情况下,该参数的值为 OFF,表示从服务器不会记录更新到自己的二进制日志中。
# 需要注意的是,log-slave-updates 参数只在 MySQL 主从复制模式的情况下有意义,
# 它用来控制从服务器是否将更新记录到自己的二进制日志中。如果没有使用主从复制,则该参数不起作用。
log-slave-updates=ON
6.1.3.2.2重启mysql
6.1.3.2.3登录Mysql的从数据库,配置将连接的主库信息
change master to master_host='192.168.9.13',master_port=3306,master_user='cpuser',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=150;
ps:上面命令中192.168.1.13为主机ip; 3306主机端口;
cpuser/root 同步使用的用户/密码 mysql-bin.000001同步使用的文件;148同步使用的标识码
6.1.3.2.4启动从节点
start slave;
6.1.3.2.5查看从数据库的状态
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
当此两项都为yes 且没有错误信息
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
这个时候就是已经配置了13-14的同步,只需要在13上操作然后看14上是否会产生相同的就行
6.1.5配置主14–>从13的主从复制
6.1.5.1在14上创建备份用户
CREATE USER 'cpuser'@'192.168.9.13' IDENTIFIED WITH mysql_native_password BY 'root';
GRANT REPLICATION SLAVE ON *.* TO 'cpuser'@'192.168.9.13';
6.1.5.2编辑mysql配置文件
vi /mydata/mysql/conf/my.cnf
# 主机使用配置 如果不指定数据库,默认同步所有的数据库
read-only=0
binlog-do-db=test_db1
auto-increment-increment=2
auto-increment-offset=2
6.1.5.3查看状态
show master status
6.1.5.4配置从库13打开他的中继日志
#从机使用配置 如果不指定数据库,默认同步所有的数据库
replicate-do-db=test_db1 #主库复制到当前从库的数据库
replicate-do-db=test_db2
relay-log=mysql.relay.bin #中继日志
log-slave-updates=ON
6.1.5.5到13服务器上开启13的同步
change master to master_host='192.168.9.14',master_port=3306,master_user='cpuser',master_password='root',master_log_file='mysql-bin.000006',master_log_pos=592;
注:host为22服务的IP地址,user、password是在22服务上创建的备份用户,log_file、log_pos是在22服务上看到的master状态信息
6.1.5.6启动从节点
start slave;
6.1.5.7在13查看状态
show slave status
跟上面显示一个就表示成功
7.搭建mysql的主主复制
7.1概念
Keepalived的工作原理是VRRP(协议) VRRP里面有两个概念
1.VRRP路由器和虚拟路由器,主控路由器和备份路由器
2.VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。
Vrrp中存在着一种选举机制,主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务
通过VIP实现Mysql双主对外连接的统一接口。即客户端通过Vip连接数据库;
当其中一台宕机后,VIP会漂移到另一台上,这个过程对于客户端的数据连接来说几乎无感觉,从而实现高可用(有点类似于ng的概念),用这种方式保持高可用
7.2安装keepalived并将其配置成系统服务(13,14)
[root@localhost ~]# yum install -y openssl-devel
[root@localhost ~]# cd /usr/local/
[root@localhost local]# wget --no-check-certificate http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
[root@localhost local]# tar -zxvf keepalived-1.3.5.tar.gz
[root@localhost local]# cd keepalived-1.3.5
[root@localhost keepalived-1.3.5]# ./configure
//此处会有警告提示,忽略即可!
[root@localhost keepalived-1.3.5]# make && make install
# 或使用 yum安装
[root@localhost ~] yum -y install keepalived
7.2修改keepalived的配置文件(13)
[root@localhost ~] cd /etc/keepalived
[root@localhost ~] vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
761200809@qq.com
}
notification_email_from 761200809@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
}
cript chk_mysql_port {
script "/opt/chk_mysql.sh" #这里通过脚本监测mysql
interval 2 #脚本执行间隔,每2s检测一次
weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
state MASTER
interface ens33 #指定虚拟ip的网卡接口 通过ifconfig查看以确定
mcast_src_ip 192.168.9.13 #本机ip
virtual_router_id 51 #路由器标识,MASTER和BACKUP必须一致
priority 100 #定义优先级,数字越大,优先级越高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.9.88 #VIP
}
track_script {
chk_mysql_port
}
}
7.2编辑检测mysql脚本,心跳检测(13)
vim /opt/chk_mysql.sh
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
systemctl stop keepalived
fi
13的MySQL服务挂了,14会监听到,然后请求192.168.9.88成为主
7.3设置开机自动启动和启动
systemctl enable keepalived 开机启动
systemctl start keepalived 启动
systemctl status keepalived 查看状态
7.3设置14
Configuration File for keepalived
global_defs {
notification_email {
761200809@qq.com
}
notification_email_from 761200809@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
}
vrrp_script chk_mysql_port {
script "/opt/chk_mysql.sh" #这里通过脚本监测
interval 2 #脚本执行间隔,每2s检测一次
weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
state MASTER
interface ens33 #指定虚拟ip的网卡接口
mcast_src_ip 192.168.9.14 #本机ip
virtual_router_id 51 #路由器标识,MASTER和BACKUP必须一致
priority 99 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.9.88 #VIP
}
track_script {
chk_mysql_port
}
}
ps:一样的操作步骤,不过是配置文件稍微修改,要priority 设置比13的小
7.4测试
用以前的方式连接或者使用配置文件的vip连接都可以
因为在13配置的权重大于14上的,所以这个时候88连接的实际上是13
文章来源:https://www.toymoban.com/news/detail-784389.html
7.4.1关闭13
但是这个时候我发现用vip去连接也连接不上,也就是没有漂移
文章来源地址https://www.toymoban.com/news/detail-784389.html
到了这里,关于【windows安装centos以及搭建docker】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!