Keepalived的安装及使用教程(mysql+nginx)
- centos7.9部署keepalived
- keepalived下载
https://www.keepalived.org/software/keepalived-2.2.2.tar.gz
-
- 安装依赖
yum -y install gcc curl openssl-devel libnl3-devel net-snmp-devel
安装依赖时如果遇到yum报错,则需要更换镜像源,可以参考下面的链接:
解决CentOS7的yum无法安装的问题_cenos 安装不了任何服务-CSDN博客
-
- 部署keepalived
tar -xf keepalived-2.2.2.tar.gz
cd keepalived-2.2.2
./configure --prefix=/data/keepalived
make
make install
-
- 查看版本
ln -s/data/keepalived/sbin/keepalived /usr/sbin/keepalived
keepalived -v
-
- 配置启动服务
vim /usr/lib/systemd/system/keepalived.service
[Unit]
Description=LVS and VRRP High Availability Monitor
After=network-online.target syslog.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/keepalived.pid
KillMode=process
EnvironmentFile=-/data/keepalived/etc/sysconfig/keepalived
ExecStart=/data/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
1.6创建配置文件,两台电脑,一台主机,一台从机,都安装同样的配置,配置文件直接替换为以下内容。
1.6.1主配置文件
mkdir /etc/keepalived
cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
# 定义收件人
248737677@qq.com
}
notification_email_from 248737677@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id nginx-mysql-ha
}
vrrp_script chk_nginx {
script "/usr/local/bin/chk_nginx.sh"
interval 2
weight -10
fall 3
rise 2
}
vrrp_script chk_mysql {
script "/usr/local/bin/chk_mysql.sh"
interval 2
weight -10
fall 3
rise 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
mcast_src_ip 192.168.31.210
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345
}
virtual_ipaddress {
192.168.31.110
}
track_script {
chk_nginx
chk_mysql
}
}
1.6.2从配置文件
mkdir /etc/keepalived
cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
# 定义收件人
248737677@qq.com
}
notification_email_from 248737677@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id nginx-mysql-ha-backup
}
vrrp_script chk_nginx {
script "/usr/local/bin/chk_nginx.sh"
interval 2
weight -10
fall 3
rise 2
}
vrrp_script chk_mysql {
script "/usr/local/bin/chk_mysql.sh"
interval 2
weight -10
fall 3
rise 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
mcast_src_ip 192.168.31.19
virtual_router_id 51
priority 90 # 从节点的优先级应低于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 12345
}
virtual_ipaddress {
192.168.31.110
}
track_script {
chk_nginx
chk_mysql
}
}
1.7、nginx检测脚本,放到/usr/local/bin目录下
#!/bin/bash
# 检查 Nginx 进程是否存在
nginx_status=$(ps -ef | grep nginx | grep -v grep)
if [ -z "$nginx_status" ]; then
# 如果 Nginx 没有运行,尝试启动 Nginx
systemctl start nginx
sleep 2
# 再次检查 Nginx 是否启动成功
nginx_status=$(ps -ef | grep nginx | grep -v grep)
if [ -z "$nginx_status" ]; then
# 如果 Nginx 启动失败,退出脚本,这将触发 Keepalived 故障转移
exit 1
fi
fi
exit 0
1.8、mysql检测脚本,放到/usr/local/bin目录下
#!/bin/bash
# 尝试连接到 MySQL 服务器并执行简单的查询
mysql -u dbs1000 -p Beta_dbs1000mysql -e "show status" > /dev/null 2>&1
# 如果连接失败,返回非零退出码以触发 Keepalived 故障转移
if [ $? -ne 0 ]; then
exit 1
fi
exit 0
1.9、keepalived启动、停止、重启命令
systemctl start keepalived
systemctl stop keepalived
systemctl restart keepalived
- 两台设备安装nginx
2.1、安装
# 下载nginx安装包
[root@ chenc01 ~]# wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 解压nginx包
[root@ chenc01 ~]# rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 安装nginx
[root@ chenc01 ~]# yum -y install nginx
# 设置nginx开机自动启动
[root@ chenc01 ~]# systemctl enable nginx.service
# 查看nginx版本
[root@ chenc01 ~]# nginx -v
nginx version: nginx/1.26.1
2.2、nginx验证方法
防火墙要关闭,或者开启指定端口
主机nginx
vi /usr/share/nginx/html/index.html
清空该文件的内容,输入以下内容:
Nginx-master
从机nginx
vi /usr/share/nginx/html/index.html
清空该文件的内容,输入以下内容:
Nginx-slave
然后访问vip地址,192.168.31.110,这个根据自己配置keepalived配置文件里设置的来,这里首先会看到Nginx-master,此时,将主机的keepalived停了,systemctl stop keepalived,再刷新页面,会显示Nginx-slave,然后再将主机的keepalived启动,systemctl start keepalived,再刷新页面,则会看到Nginx-master。
- 两台设备安装mysql
3.1实现MySQL主主同步注意下面几点:
1)要保证同步服务期间之间的网络联通。即能相互ping通,能使用对方授权信息连接到对方数据库(防火墙开放3506端口)。
2)关闭selinux。
3)同步前,双方数据库中需要同步的数据要保持一致。这样,同步环境实现后,再次更新的数据就会如期同步了。
3.2安装步骤,将如图所示的文件上传到/opt目录下,并将目录内的install_mysql.sh赋权,chmod 777 install_mysql.sh
然后执行脚本即可: ./install_mysql.sh
Mysql启停命令:service mysqld start service mysqld stop
3.3、主机无需修改内容,从机需要修改如下内容
vi /etc/my.cnf
将log-bin的名字和server-id改成如图所示内容
3.4、主机mysql设置
[root@keepalived-mysql-1 ~]# mysql -uroot -p
Password:
无需输入密码,直接回车
mysql> GRANT ALL PRIVILEGES ON *.* TO 'dbs1000'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> exit
mysql -udbs1000 -pBeta_dbs1000mysql
mysql> show master status;
+-------------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------------+----------+--------------+------------------+-------------------+
| mysql-bin-master.000001 | 602 | | mysql | |
+-------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
记录下 mysql-bin-master.000001 和602,这个是给从机使用的
mysql> grant replication slave on *.* to slave@192.168.31.19 identified by "Beta_dbs1000mysql";
这里的192.168.31.19的ip是从机的ip地址
mysql> flush privileges;
mysql> stop slave;
mysql> change master to master_host='192.168.31,19',master_port=3506,master_user='slave',master_password='Beta_dbs1000mysql',master_log_file='mysql-bin-slave.000001',master_log_pos=614;
这里的master_log_pos填写的从机查询出来的614,这个会根据实际情况有所变动
mysql> start slave;
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
3.5、从机mysql设置
[root@keepalived-mysql-1 ~]# mysql -uroot -p
Password:
无需输入密码,直接回车
mysql> GRANT ALL PRIVILEGES ON *.* TO 'dbs1000'@'%' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> exit
mysql -udbs1000 -pBeta_dbs1000mysql
mysql> grant replication slave on *.* to slave@192.168.31.210 identified by "Beta_dbs1000mysql";
这里的ip192.168.31.210是主机的ip
mysql> flush privileges;
mysql> show master status;
+------------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------------+----------+--------------+------------------+-------------------+
| mysql-bin-slave.000001 | 614 | | mysql | |
+------------------------+----------+--------------+------------------+-------------------+
记录下 mysql-bin-slave.000001 和614,这个是给主机使用的
mysql> stop slave;
mysql> change master to master_host='192.168.31.210',master_port=3506,master_user='slave',master_password='Beta_dbs1000mysql',master_log_file='mysql-bin-master.000001',master_log_pos=602;
这里的master_log_pos填写的主机查询出来的602,这个会根据实际情况有所变动
mysql> start slave;
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上表明双方已经实现了mysql主主同步。
上述文件可访问以下链接进行下载: