部署安装
centos使用Docker容器方式安装各类软件包
docker部署各种服务
docker安装elasticsearch7.6.2
docker方式安装onlyOffice
使用docker安装部署kibana
Docker常用运维命令
使用docker方式安装mm-wiki,助力技术团队文档开发
docker方式部署springboot应用
Harbor 入门与上手
修改或增加已运行的 Docker 容器端口映射
docker安装mysql
docker方式安装gitlab
Docker 安装MQTT服务 mosquitto2.0版本
centos编译方式安装
centos通过编译的方式安装python3.8
centos绿色安装包
Centos7安装NodeJs
centos7环境下部署yapi v1.9.2版本
centos7.9安装nacos2.2.3
Centos下安装Node14
centos中安装go
centos通过yum方式安装的软件包
centos 安装supervior
centos 安装 jenkins 2.452.1最新版本
centos7安装docker-20.10.9版本
数据库
在centos7下安装PostgreSQL10
mysql 主从搭建
windows安装oracle11g的一些后续注意事项
centos7.9安装oracle11g
镜像加速
nginx
在两台centos上面安装nginx+keepalived实现主备
linux常用命令
jenkins部署前后端服务几种常见场景配置说明
GIT
K8S
kubeadm init在初始化master节点的遇到的问题梳理
K8S部署+kuboard可视化界面完整说明
k8s+kuboard+harbor部署springboot的一些说明
其他
centos7使用miniconda方式安装飞浆OCR
frp内网穿透
java全平台安装
mysql+keepalived搭建部署,mysql互为主备
本文档使用 MrDoc 发布
-
+
首页
mysql+keepalived搭建部署,mysql互为主备
> 服务器信息 主数据库:10.113.1.14 备数据库:10.113.1.15 虚拟IP: 10.113.1.19 数据库端口: 13306 ## 1、到官网下载mysql安装包 下载MySQL网址: https://downloads.mysql.com/archives/community/ `我装的这个版本,最新的44版本,装了一下有问题。建议装这个28的版本。`  ## 2、解压安装 把下载的包 放到/opt/mysql目录,这个目录提前建一下。 解压: ~~~ tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar ~~~ 然后安装下面的顺序 依次安装: ~~~ rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm #检查 是否成功安装 : rpm -qa | grep -i mysql # 启动一下 systemctl start mysqld # 检查一下启动状态 systemctl status mysqld ~~~ ## 3、设置root密码 通过 `cat /root/.mysql_secret` 查看临时密码。 如果你能运行上面这个命令,,,那运气不错, 我TM运行完之后,直接提示找不到这个文件!!! * 想办法重置root密码。 先关闭 mysql ~~~ systemctl stop mysqld ~~~ 然后按下面的步骤操作一下! ~~~ # 新建一个 /tmp/mysql_root_password.sql 文件,内容如下 alter user 'root'@'localhost' identified by 'Test@1234'; # 然后执行: mysqld --user=mysql --init-file='/tmp/mysql_root_password.sql' & # 好像上面这个命令 执行时间会有点长 验证一下: mysql -uroot -pTest@1234 ~~~ * 还有一种方法是通过 --skip-grant-tables 的方法操作的:具体可以自行查一下。 ~~~ # 忽略权限 mysqld --user=mysql --skip-grant-tables --skip-networking & ~~~ 网上查出来的方法是执行 `mysqld_safe --skip-grant-tables & mysql -uroot -p` 但是我执行的时候 bash: mysqld_safe: 未找到命令... 真是TM无语。。。 4、开启远程访问 其实就是建一个用户,可以用非localhost的主机%进行访问。 `mysql -uroot -pTest@1234` 进入mysql命令行 然后执行: ~~~ create user 'root'@'%' identified by 'Test@1234'; grant all privileges on *.* to 'root'@'%'; FLUSH PRIVILEGES; ~~~ ## 4、设置双主 关闭 SELINUX ~~~ sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config & setenforce 0&& systemctl disable firewalld.service && systemctl stop firewalld.service ~~~ 修改两个服务器的my.cnf的配置文件,分别 追加以下内容: ### 第1台 ~~~ # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB lower_case_table_names=1 #不区分大小写 log-bin=mysql-bin binlog_format=mixed server-id=1 log-bin=mysql-bin #sync_binlog=1 #binlog_checksum=none binlog_format=mixed auto-increment-increment=2 auto-increment-offset=1 ~~~ 修改完重启: ~~~ systemctl stop mysqld systemctl start mysqld ~~~ 登陆mysql 创建同步用户 ~~~ # 登录到mysql命令行 mysql -uroot -ptest@2025 # 创建用户并授权 create user 'rep1'@'%' identified by 'test@2025'; #创建从数据库同步用的用户 grant replication slave,replication client on *.* to 'rep1'@'%'; #授权rep1用户权限 # 刷新授权 flush privileges; # 锁表,查看binlog日志节点 flush tables with read lock; show master status; ~~~ 执行 show master status; 显示以下结果:  记住 mysql-bin.000002 和 695两个数字!!! ### 第2台 修改my.cnf文件,追加以下内容: ~~~ # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB lower_case_table_names=1 #不区分大小写 max_allowed_packet=100M server-id=2 log-bin=mysql-bin #sync_binlog=1 #binlog_checksum=none binlog_format=mixed auto-increment-increment=2 auto-increment-offset=2 slave-skip-errors=all ~~~ 重启生效: ~~~ systemctl stop mysqld systemctl start mysqld ~~~ 登陆mysql 创建同步用户(同第1台操作一样!) ~~~ # 登录到mysql命令行 mysql -uroot -ptest@2025 # 创建用户并授权 create user 'rep1'@'%' identified by 'test@2025'; #创建从数据库同步用的用户 grant replication slave,replication client on *.* to 'rep1'@'%'; #授权rep1用户权限 # 刷新授权 flush privileges; # 锁表,查看binlog日志节点 flush tables with read lock; show master status; ~~~ 执行完成 show master status;后,,记住这两个数字  记住 mysql-bin.000003 和 299两个数字!!! ### 999 == 这步操作在主从失败同步后需要再次执行== 第2次执行的时候 可能需要 执行 `stop slave;` **回到第1台服务上[10.113.1.14],进入mysql命令行,然后执行:** ~~~ change master to master_host='10.113.1.15',master_user='rep1',master_password='test@2025',master_log_file='mysql-bin.000003',master_log_pos=299,master_port=13306; start slave; show slave status \G; ~~~  Slave_IO_Running和 Slave_SQL_Running 都显示绿色的Yes,说明 成功了! **回到第2台服务上[10.113.1.15],进入mysql命令行,然后执行:** ~~~ change master to master_host='10.113.1.14',master_user='rep1',master_password='test@2025',master_log_file='mysql-bin.000002',master_log_pos=695,master_port=13306; start slave; show slave status \G; ~~~ master_port 配置了 13306,这里特别注意一下!!如果是默认的3306,这个参数可以不写!  ## 5、配置keepalived ==以下所有操作,在两台服务器上 同样都操作一遍!== 更新一下依赖: ~~~ yum install -y gcc openssl openssl-devel libnl3-devel net-snmp-devel ~~~ 我这里使用的是原生安装的方式,很快。 ~~~ cd /opt/ wget --no-check-certificate https://www.keepalived.org/software/keepalived-2.2.8.tar.gz ll tar -zxvf keepalived-2.2.8.tar.gz cd keepalived-2.2.8 ./configure --prefix=/opt/keepalived-2.2.8 make && make install ~~~ configure 执行成功的截图:  没有看到这个图,说明你的 configure 是执行失败了,没法往下执行make操作。 make install 执行成功的截图:  ~~~ [root@keepalived-2.2.8]# mkdir /etc/keepalived [root@keepalived-2.2.8]# cp keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf [root@keepalived-2.2.8]# cp keepalived/etc/init.d/keepalived /etc/init.d/ [root@keepalived-2.2.8]# cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/ [root@keepalived-2.2.8]# cp bin/keepalived /usr/sbin/ ~~~ ### 新建shutdown.sh文件 ~~~ vi /etc/keepalived/shutdown.sh ~~~ 写入以下内容: ~~~ #!/bin/bash #该脚本是在mysql服务出现异常时,将keepalived应用停止,从而使虚拟vip主机自动连接到另一台mysql上 killall keepalived ~~~ 增加可执行的权限: ~~~ chmod +x /etc/keepalived/shutdown.sh ~~~ ### 配置keepalived.conf文件 ==以下操作两台服务器不太一样== 查看服务器的网卡信息:使用ifconfig 命令。  记住上面这个 ens160的网卡名,因为需要写到配置文件里。 进入/etc/keepalived/目录。 把原有的keepalived.conf更名为keepalived_bak.conf,然后新建keepalived.conf配置文件。 ~~~ vi keepalived.conf ~~~ 写入以下内容: ~~~ ! Configuration File for keepalived #主要配置故障发生时的通知对象及机器标识 global_defs { router_id MYSQL-1 #主机标识符,唯一即可 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } #用来定义对外提供服务的VIP区域及相关属性 vrrp_instance VI_1 { state BACKUP #表示keepalived角色,都是设成BACKUP则以优先级为主要参考 interface ens160 #指定HA监听的网络接口,刚才ifconfig查看的接口名称 virtual_router_id 151 #虚拟路由标识,取值0-255,master-1和master-2保持一致 priority 100 #优先级,用来选举master,取值范围1-255 advert_int 1 #发VRRP包时间间隔,即多久进行一次master选举 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { #虚拟出来的地址 10.113.1.19 } } #虚拟服务器定义 virtual_server 10.113.1.19 13306 { #虚拟出来的地址加端口 delay_loop 2 #设置运行情况检查时间,单位为秒 lb_algo rr #设置后端调度器算法,rr为轮询算法 lb_kind DR #设置LVS实现负载均衡的机制,有DR、NAT、TUN三种模式可选 persistence_timeout 50 #会话保持时间,单位为秒 protocol TCP #指定转发协议,有 TCP和UDP可选 real_server 10.113.1.14 13306 { #实际本地ip+3306端口 weight=5 #表示服务器的权重值。权重值越高,服务器在负载均衡中被选中的概率就越大 #当该ip 端口连接异常时,执行该脚本 notify_down /etc/keepalived/shutdown.sh #检查mysql服务down掉后执行的脚本 TCP_CHECK { #实际物理机ip地址 connect_ip 10.113.1.14 #实际物理机port端口 connect_port 13306 connect_timeout 5 nb_get_retry 3 delay_before_retry 3 } } } ~~~ 主要修改一下这个配置文件里的4个IP地址!根据你的实际情况进行修改! ### 第2台服务器。 同上面的操作一样,不同的是keepalived.conf的内容不太一样。我这里的内容是: ~~~ ! Configuration File for keepalived #主要配置故障发生时的通知对象及机器标识 global_defs { router_id MYSQL-2 #主机标识符,唯一即可 vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } #用来定义对外提供服务的VIP区域及相关属性 vrrp_instance VI_1 { state BACKUP #表示keepalived角色,都是设成BACKUP则以优先级为主要参考 interface ens160 #指定HA监听的网络接口,刚才ifconfig查看的接口名称 virtual_router_id 151 #虚拟路由标识,取值0-255,master-1和master-2保持一致 priority 40 #优先级,用来选举master,取值范围1-255 advert_int 1 #发VRRP包时间间隔,即多久进行一次master选举 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { #虚拟出来的地址 10.113.1.19 } } #虚拟服务器定义 virtual_server 10.113.1.19 13306 { #虚拟出来的地址加端口 delay_loop 2 #设置运行情况检查时间,单位为秒 lb_algo rr #设置后端调度器算法,rr为轮询算法 lb_kind DR #设置LVS实现负载均衡的机制,有DR、NAT、TUN三种模式可选 persistence_timeout 50 #会话保持时间,单位为秒 protocol TCP #指定转发协议,有 TCP和UDP可选 real_server 10.113.1.15 13306 { #实际本地ip+3306端口 weight=5 #表示服务器的权重值。权重值越高,服务器在负载均衡中被选中的概率就越大 #当该ip 端口连接异常时,执行该脚本 notify_down /etc/keepalived/shutdown.sh #检查mysql服务down掉后执行的脚本 TCP_CHECK { #实际物理机ip地址 connect_ip 10.113.1.15 #实际物理机port端口 connect_port 13306 connect_timeout 5 nb_get_retry 3 delay_before_retry 3 } } } ~~~ 启动keepalived并加入开机启动。 ~~~ systemctl start keepalived # 启动 systemctl status keepalived # 查看状态 systemctl enable keepalived # 加入开机自启 ~~~ 我这里用的到虚拟IP是:10.113.1.19 现在就可以通过 10.113.1.19 的13306试下效果了!!! 如果两台keepalive或mysql 都被停止的情况下,需要 把上面999的步骤重新执行 以保持同步!!! > 参数资料: https://blog.csdn.net/zyjzyjjyzjyz/article/details/139118084 https://blog.csdn.net/weixin_43885834/article/details/108602587
superadmin
2025年2月25日 14:06
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码