文章目录
一、keepalived安装与配置
1、安装组件
1. apt-get install libssl-dev
2. apt-get install openssl
3. apt-get install libpopt-dev
4、apt-get install nmap
4、apt-get install keepalived
libssl-dev、openssl、libpopt-dev
为安装keepalived
的必备组件。首先安装它,不然后面会报错。namp
检测端口开放情况,用于后面mysql检测脚本。
2、压缩包方式安装
1、官网下载安装包(以keepalived-2.0.18.tar.gz为例)
2、tar -zxvf keepalived-2.0.18.tar.gz
3、cd ./keepalived-2.0.18
4 ./configure --prefix=/usr/local/keepalived
5、make && make install
3、检测脚本
在/opt
目录下新建检测脚本,任意目录下都行,你自己决定
#!/bin/sh
# check mysql server status
PORT=3306
nmap localhost -p $PORT | grep "$PORT/tcp open"
#echo $?
if [ $? -ne 0 ];then
service mysql stop
service mysql start
sleep 5
nmap localhost -p $PORT | grep "$PORT/tcp open"
if [ $? -ne 0 ];then
pkill -f keepalived
fi
fi
给脚本赋予执行权限
chmod +x /opt/chk_mysql.sh
注意点:检测脚本不要再windows环境下编写,Windows下为dos
格式,需要转成unix
格式即可。如果你在windows下面编写的,脚本写完以后可以以下方法检查一下格式。
vim chk_mysql.sh
:set ff # 显示 filefomate=dos
:set ff=unix
:set ff # 显示 filefomate=unix
# 再退出编辑就可以执行脚本了
4、配置文件转移到系统下
接下来将配置文件复制到系统的etc
目录下面,不进行这一步的话,keepzlived
就无法启动。系统默认读取/etc/keepalived
下的keepalived.conf
文件。
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
5、配置文件修改
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 检测mysql是否正常运行
vrrp_script check_mysql {
script "/opt/chk_mysql.sh"
interval 2
weirht 2
}
vrrp_instance VI_1 {
state BACKUP # MASTER或者BACKUP,我们选择两台都为BACKUP
interface eth0 # 网卡名称,可使用 ip addr在系统里查看
virtual_router_id 51
priority 100 # 优先级,两台均为BACKUP的话,优先级设置成一样。
advert_int 1
track_script # 加上这个检测上面编写的脚本
{
check_mysql
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16 # 虚拟ip
}
}
- state:实例状态,只有MASTER 和 BACKUP两种状态,并且需要全部大写。抢占模式下,其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的服务会自动把它的状态由BACKUP切换到MASTER状态。当失效的MASTER所在的服务恢复时,BACKUP从MASTER恢复到BACKUP状态。
- interface:对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。
- virtual_router_id:虚拟路由的ID号,每个节点设置必须一样,可选择IP最后一段使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。
- priority:节点优先级,取值范围0~254,MASTER要比BACKUP高
- advert_int:MASTER与BACKUP节点间同步检查的时间间隔,单位为秒
- authentication:验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用PASS类型,据说AH使用时有问题。验证密码为明文,同一vrrp 实例MASTER与BACKUP使用相同的密码才能正常通信。
- nopreempt:禁止抢占服务。默认情况,当MASTER服务挂掉之后,BACKUP自动升级为MASTER并接替它的任务,当MASTER服务恢复后,升级为MASTER的BACKUP服务又自动降为BACKUP,把工作权交给原MASTER。当配置了nopreempt,MASTER从挂掉到恢复,不再将服务抢占过来。
- virtual_ipaddress:虚拟IP地址池,可以有多个IP,每个IP占一行,不需要指定子网掩码。注意:这个IP必须与我们的设定的vip保持一致。
6、启动
然后就可以使用service命令启动
service keepalived start #启动服务
service keepalived stop #停止服务
service keepalived status #查看状态
7、华为云虚拟ip
阿里云上面不支持keepalived,你就别想在这个上面用了。目前使用的是华为云的服务器。
1、申请虚拟ip
-
登陆虚拟私有云,进入
vpc-default
-
进入子网
-
申请虚拟ip
-
绑定服务器
只能绑定同一个子网下的服务器。一个个的绑定,官方建议最多可绑定10台服务器。
-
申请弹性公网ip绑定虚拟ip
将刚刚申请的虚拟ip与弹性公网ip绑定,提供对外连接属性。
8、ip漂移测试
服务器里输入ip addr
可查看虚拟ip
- 当停掉mysql时,会切换到另一台服务器,此处无法观看到虚拟ip。
- 但是检测脚本里有启动mysql:
service mysql start
的步骤,手动验证时最好删除这个,不然无法观察到ip漂移现象。
二、MySql5.7.27 互为主从配置
1、双主互备注意事项
当你想要两个数据库互为主备的时候,需要在mysql.cnf
中加上下面这个配置,本篇中就需要加入这个。
log-slave-updates=true
2、A主B从
- 以下是在ubuntu系统下进行的对mysql5.27修改配置文件
- A:主数据库:139.9.7.204
- B:从数据库:138.159.140.61
1、主数据库修改mysql配置
- 找到主数据库的配置文件
my.cnf(或者my.ini)
,我的在/etc/mysql/mysql.conf.d/mysqld.cnf
,在[mysqld]部分插入如下两行:
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id,主从的不一样
log-slave-updates=true # 双主互备
- 修改完后重启mysql。
service mysql stop
service mysql start
- 创建同步账号
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'slaveMysql'; #创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'138.159.140.61' idedtified by '密码'; #分配权限
mysql> flush privileges; #刷新权限
-
查看master状态,记录二进制文件名(mysql-bin.000006)和位置(154):
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000006 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
2、从数据库修改
1.修改mysql配置
找到从数据库的配置文件my.cnf(或者my.ini)
,我的在/etc/mysql/mysql.conf.d/mysqld.cnf
,在[mysqld]部分插入如下行:
[mysqld]
server-id=2 #设置server-id,必须唯一
2.重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):
mysql> CHANGE MASTER TO MASTER_HOST='139.9.7.204 ',MASTER_USER='repl',MASTER_PASSWORD='密码', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=154;
3.启动slave进程
start slave;
4.查看slave状态
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 139.9.7.204
Master_User: mysql
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: ecs-t6-large-2-linux-20190918162959-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes # 这两个同时为yes代表成功了
Slave_SQL_Running: Yes # 这两个同时为yes代表成功了
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
3、B主A从
-
A:从数据库:139.9.7.204
-
B:主数据库:138.159.140.61
按照上面的步骤角色相反进行同样的操作就行了。
建议:同步账号设置成与“A主B从”的一样的,便于后面使用弹性公网连接查看数据库。
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
## 3、B主A从
- A:从数据库:139.9.7.204
- B:主数据库:138.159.140.61
按照上面的步骤角色相反进行同样的操作就行了。
建议:同步账号设置成与“A主B从”的一样的,便于后面使用弹性公网连接查看数据库。
[主从配置参考博客](https://www.cnblogs.com/gl-developer/p/6170423.html)