版权声明:未经本人允许严禁转载 https://blog.csdn.net/WanJiaBaoBao/article/details/83625391
配置环境
- 已关闭防火墙、selinux;
- 服务器的IP地址及角色如下表:
IP地址 | 服务器/角色 | 安装服务 |
---|---|---|
192.168.91.131 | master | Keepalived、MariaDB-server、MariaDB |
192.168.91.132 | backup | Keepalived、MariDB-server、MariaDB |
192.168.91.133 | 测试连接mysql | MariaDB |
192.168.91.254(VIP) | master、backup | ----------------------------------------- |
配置步骤
- 在master和backup两主机上分别配置网络源、安装epel-release,并安装Keepalived和MySQL
[root@master ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@master ~]# sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo
[root@master ~]# yum -y install epel-release
[root@master ~]# yum -y install keepalived mariadb mariadb-server
- 在master主机上修改/etc/keepalived/keepalived.conf配置文件
[root@master ~]# cp -a /etc/keepalived/keepalived.conf{,.bak}
[root@master ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id 001
}
vrrp_instance VI_1 {
state MASTER
interface eno16777736
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.91.254
}
}
virtual_server 192.168.91.254 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.91.131 3306 {
weight 1
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.91.132 3306 {
weight 1
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
- 在backup主机上修改/etc/keepalived/keepalived.conf配置文件
[root@backup ~]# cp -a /etc/keepalived/keepalived.conf{,.bak}
[root@backup ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id 002
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.91.254
}
}
virtual_server 192.168.91.254 3306 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.91.131 3306 {
weight 1
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.91.132 3306 {
weight 1
TCP_CHECK {
connect_port 3306
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
- 在master和backup主机上分别启动keepalived服务
[root@master ~]# systemctl start keepalived
[root@master ~]# ps aux | grep keepalived
root 12929 0.0 0.1 118624 1364 ? Ss 04:26 0:00 /usr/sbin/keepalived -D
root 12930 0.0 0.2 118740 2532 ? S 04:26 0:00 /usr/sbin/keepalived -D
root 12931 0.0 0.1 118624 1832 ? S 04:26 0:00 /usr/sbin/keepalived -D
- 查看VIP在那台主机上
## 在master主机上查看 ##
[root@master ~]# ip a
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:34:95:c3 brd ff:ff:ff:ff:ff:ff
inet 192.168.91.131/24 brd 192.168.91.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.91.254/32 scope global eno16777736
valid_lft forever preferred_lft forever
## 在backup上查看 ##
[root@backup ~]# ip a
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c7:d2:e7 brd ff:ff:ff:ff:ff:ff
inet 192.168.91.132/24 brd 192.168.91.255 scope global eno16777736
valid_lft forever preferred_lft forever
- 在master和backup主机上分别启动mysqld服务
[root@master ~]# systemctl start mariadb
[root@master ~]# systemctl enable mariadb
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
[root@master ~]# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 50 *:3306 *:*
- 在master和backup主机上分别设置mysql数据库密码
[root@master ~]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): ##按回车
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password: ##输入密码
Re-enter new password: ##确认密码
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y ##移除匿名用户
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] n ##不禁止root远程登录
... skipping.
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y ##移除测试数据库
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y ##重新加载特权表
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
注:也可以使用mysqladmin设置mysql密码
[root@backup ~]# mysqladmin -uroot password 123456
- 在master和backup主机上分别登录mysql,给虚拟IP进行授权
[root@master ~]# mysql -uroot -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.60-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> grant all on keepalived.* to [email protected] identified by '123456';
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
- 在master主机上创建keepalived数据库,并创建master表
MariaDB [(none)]> create database keepalived;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use keepalived;
Database changed
MariaDB [keepalived]> create table master(id int null,name char null);
Query OK, 0 rows affected (0.00 sec)
- 在backup主机上创建keepalived数据库,并创建backup表
MariaDB [(none)]> create database keepalived;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use keepalived;
Database changed
MariaDB [keepalived]> create table backup(id int null,name char null);
Query OK, 0 rows affected (0.00 sec)
- 在192.168.91.133主机上进行测试连接
[root@localhost ~]# mysql -ukeepalived -p123456 -h192.168.91.254
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 5.5.60-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
- 在master上编写脚本来监控mysql数据库
[root@master ~]# mkdir /etc/keepalived/scripts
[root@master ~]# vim /etc/keepalived/scripts/check_m.sh
#!/bin/bash
pidof mysqld
if [ $? -ne 0 ];then
systemctl stop keepalived
fi
- 在master上修改/etc/keepalived/keepalived.conf配置文件,并重启keepalived服务
[root@master ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id 001
}
vrrp_script mysql_check {
script "/etc/keepalived/scripts/check_m.sh"
interval 1
weight -20
}
......
virtual_ipaddress {
192.168.91.254
}
track_script {
mysql_check
}
......
[root@master ~]# chmod +x /etc/keepalived/scripts/check_m.sh
[root@master ~]# systemctl restart keepalived
- 检查监控脚本是否生效
[root@master ~]# ps aux | grep -v 'grep' | grep keepalived
root 13364 0.0 0.1 118624 1368 ? Ss 06:36 0:00 /usr/sbin/keepalived -D
root 13365 0.0 0.2 118740 2532 ? S 06:36 0:00 /usr/sbin/keepalived -D
root 13366 0.0 0.2 120720 2456 ? S 06:36 0:00 /usr/sbin/keepalived -D
[root@master ~]# systemctl stop mariadb
[root@master ~]# ps aux | grep -v 'grep' | grep keepalived
- 看看master和backup的VIP地址
## master主机上无VIP地址 ##
[root@master ~]# ip a
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:34:95:c3 brd ff:ff:ff:ff:ff:ff
inet 192.168.91.131/24 brd 192.168.91.255 scope global eno16777736
valid_lft forever preferred_lft forever
## backup主机上有VIP地址 ##
[root@backup ~]# ip a
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c7:d2:e7 brd ff:ff:ff:ff:ff:ff
inet 192.168.91.132/24 brd 192.168.91.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.91.254/32 scope global eno16777736
valid_lft forever preferred_lft forever
- 在192.168.91.133主机上登录mysql数据库
[root@localhost ~]# mysql -ukeepalived -p123456 -h192.168.91.254
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 82
Server version: 5.5.60-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> exit
Bye