Haproxy 实现数据库的负载均衡,健康监测.权重分发.
IP规划:
192.168.0.221 os---221 db 192.168.0.222 os---222 db 192.168.0.223 os---223 db 192.168.0.224 os---224 haproxy 192.168.0.225 os---225 haproxy VIP: 192.168.0.226
准备:
三台主机安装之前,必须先设置selinux 、hostname 和 iptables; 如下:
(1)禁止selinux selinux=Disabled (2)配置防火墙 service iptables stop chkconfig iptables off iptables -F (3)编辑hosts文件 vi /etc/hosts 192.168.0.221 os---221 192.168.0.222 os---222 192.168.0.223 os---223
(4)reboot
1.添加mariadb.repo,yum 源
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
yum makecache
2.安装
yum install MariaDB-Galera-server MariaDB-client galera
3. 在三台主机上初始化mariadb,并且创建集群账户
All nodes:
初始化如下: service mysql start mysql_secure_installation #提示创建密码,root是否远程登录,删除test数据库。 授权账户如下: mysql -p GRANT ALL PRIVILEGES ON *.* TO 'cp'@'%' IDENTIFIED BY '123' WITH GRANT OPTION; flush privileges; quit 然后停止All Nodes的数据 service mysql stop
4.建立集群:Setup Cluster Configuration on Client221
vi /etc/my.cnf.d/server.conf
[mariadb] query_cache_size=0 binlog_format=ROW default_storage_engine=innodb innodb_autoinc_lock_mode=2 wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address=gcomm://192.168.0.223,192.168.0.222 wsrep_cluster_name='cp' wsrep_node_address='192.168.0.221' wsrep_node_name='os6---221' wsrep_sst_method=rsync wsrep_sst_auth=cp:123
保存退出后,执行
/etc/init.d/mysql bootstrap 或者: /usr/sbin/mysqld --wsrep-new-cluster --user=mysql &
说明:bootstrap的功能
mysql命令调用/usr/sbin/mysqld bootstrap相当于--wsrep-new-cluster --user=mysql &
5. 建立集群:Setup Cluster Configuration on Client222,只有三处和上面不同
[mariadb] query_cache_size=0 binlog_format=ROW default_storage_engine=innodb innodb_autoinc_lock_mode=2 wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address=gcomm://192.168.0.221,192.168.0.223 wsrep_cluster_name='cp' wsrep_node_address='192.168.0.222' wsrep_node_name='os6---222' wsrep_sst_method=rsync wsrep_sst_auth=cp:123
最后
/etc/init.d/mysql start
6. 建立集群:Setup Cluster Configuration on Client223,同样只有三处和上面不同
[mariadb] query_cache_size=0 binlog_format=ROW default_storage_engine=innodb innodb_autoinc_lock_mode=2 wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address=gcomm://192.168.0.221,192.168.0.222 wsrep_cluster_name='cp' wsrep_node_address='192.168.0.223' wsrep_node_name='os6---223' wsrep_sst_method=rsync wsrep_sst_auth=cp:123
最后
/etc/init.d/mysql start
7. 测试集群
省略
8.安装haproxy,分别在192.168.0.224和192.168.0.225
yum install haproxy -y
9.配置haproxy,编辑/usr/local/haproxy/etc/haproxy.cfg,分别在192.168.0.224和192.168.0.225
mv /usr/local/haproxy/etc/haproxy.cfg /usr/local/haproxy/etc/haproxy.cfg.bak vi /usr/local/haproxy/etc/haproxy.cfg
global log 127.0.0.1 local0 notice user haproxy group haproxy defaults log global retries 2 timeout connect 1000 timeout server 5000 timeout client 5000 listen mariadb-cluster bind 0.0.0.0:3306 mode tcp option mysql-check user haproxy balance roundrobin server DB221 192.168.0.221:3306 check server DB222 192.168.0.222:3306 check server DB223 192.168.0.223:3306 check listen webinterface bind 0.0.0.0:8080 mode http stats enable stats uri /haproxy/stats stats realm Strictly\ Private stats auth haproxy:haproxy
10.在数据库上建立一个用户,用于haproxy对db的检测
主意: 再一台数据库上执行即可.不必要再3台DB上全部执行.
CREATE USER 'haproxy'@'192.168.0.224'; CREATE USER 'haproxy'@'192.168.0.225'; FLUSH PRIVILEGES;
11.启动haproxy
service haproxy start
开机启动
echo "/etc/init.d/haproxy start" >>/etc/rc.local
访问haproxy的检测页面:
224: http://192.1680.224/haproxy/stats user:haproxy pass:haproxy 225: http://192.168.0.225/haproxy/stats user:haproxy pass:haproxy
试图登陆mysql:
mysql -h 192.168.0.224 -P 3306 -p mysql -h 192.168.0.225 -P 3306 -p
测试:
任意关闭其中一个数据库/两个数据库,测试连通性
12.安装keepalived
脚本安装:省略
13.配置主haproxy(192.168.0.224)的keepalived配置文件
vi /etc/keepalived/keepalived.conf
global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server smtp.163.com smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_haproxy { script "killall -0 haproxy" interval 1 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 8 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.226 } track_script { chk_haproxy } }
14.配置备haproxy(192.168.0.225)的keepalived配置文件
global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server smtp.163.com smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_haproxy { script "killall -0 haproxy" interval 1 weight 2 } vrrp_instance VI_1 { state SLAVE interface eth0 virtual_router_id 8 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.0.226 } track_script { chk_haproxy } }
15.启动haproxy和keepalived,测试haproxy的高可用
service haproxy start service keepalived start
测试过程省略.
16.授权mysql的root用户可以在任意的IP地址下登陆
mysql -p >grant all privileges on *.* to root@'%' identified by '123' with grant option; >flush privileges;
17.测试登陆,查看是否每次重新连接mysql实例,是否达到负载均衡的效果
[root@os6---222 xinetd.d]# mysql -h 192.168.0.226 -p Enter password: MariaDB [(none)]> show variables like 'wsrep_node_name'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | wsrep_node_name | os6---222 | +-----------------+-----------+ 1 row in set (0.00 sec) MariaDB [(none)]> exit Bye
[root@os6---222 xinetd.d]# mysql -h 192.168.0.226 -p Enter password: MariaDB [(none)]> show variables like 'wsrep_node_name'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | wsrep_node_name | os6---223 | +-----------------+-----------+ 1 row in set (0.00 sec) MariaDB [(none)]> exit Bye
[root@os6---222 xinetd.d]# mysql -h 192.168.0.226 -p Enter password: MariaDB [(none)]> show variables like 'wsrep_node_name'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | wsrep_node_name | os6---221 | +-----------------+-----------+ 1 row in set (0.01 sec)